Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
ereg Problem [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
ereg Problem


 
markusschmitt
06-05-2003, 23:54 
 
Benuter Code

ereg("([-d])([rwxst-]{9}).* ([0-9]*) ([a-zA-Z]+[0-9: ]* [0-9]{2}:?[0-9]{2}) (.+)", $rawlist[$i], $regs);


Ausgabe (kommentiert)

Array
(
[0] => dr-xrwxr-x 7 1005 staff 4096 Dec 21 15:29 Gute Zeiten
[1] => d
[2] => r-xrwxr-x
[3] => 4096
[4] => Dec 21 15:29 //so sollte es aussehen
[5] => Gute Zeiten
[6] =>
[7] =>
[8] =>
[9] =>
)

Dies ist der Ordner: Gute Zeiten
2003-12-21 // wird aus dem oben genannten Datum erzeugt und ist hier nicht von Bedeutung

dr-xrwxr-x 2 1005 staff 4096 Dec 21 15:28 1986 - An Ordinary Life //so sieht der String aus der mit ereg bearbeitet wird.
Array
(
[0] => dr-xrwxr-x 2 1005 staff 4096 Dec 21 15:28 1986 - Hang On //1986 gehört zum Titel
[1] => d
[2] => r-xrwxr-x
[3] => 4096
[4] => Dec 21 15:28 1986 //1986 sollte nicht mehr dazugenommen werden
[5] => - Hang On //da es zum Titel gehört
[6] =>
[7] =>
[8] =>
[9] =>
)

//der Befehl ftp_cdup wird jetzt ausgeführt mit dem Ornder Hang On

dr-xrwxr-x 2 1005 staff 4096 Dec 21 15:28 1986 - Hang On
Dies ist der Ordner: - Hang On
2003-12-21

Warning: ftp_chdir: - Hang On: No such file or directory in C:\apache\htdocs\neuftp\suchevonmir2.php on line 104

 
Titus
08-05-2003, 16:35 
 
([a-zA-Z]+[0-9: ]* [0-9]{2}:?[0-9]{2})

das ist der problematische Teil.
und zwar genau das Leerzeichen im zweiten CharSet.

Entweder in mehrere Gruppen unterteilen oder (einfacher) die Länge begrenzen:
[0-9: ]* --> [0-9: ]{8}

 
markusschmitt
08-05-2003, 17:44 
 
Juppi es hat doch noch jemand drauf geantwortet

OK kleines Problem
ich lass mir nach dem ereg Befehl die $regs ausgeben aber sobald ich des beschränke so wie du es meinst klappt die Ausgabe nicht mehr.

ereg("([-d])([rwxst-]{9}).* ([0-9]*) ([a-zA-Z]+[0-9: ]{8} [0-9]{2}:?[0-9]{2}) (.+)", $rawlist[$i], $regs);
echo "<pre>";
print_r($regs);
echo "</pre>";


Was ist da los? Das Array $regs existiert doch auch wenn ichs beschränke. Woran kann das liegen?

Mfg Markus

 
Titus
10-05-2003, 15:36 
 
Entweder vor "[0-9: ]{8}" ein Leerzeichen einfügen
oder die 8 durch eine 9 ersetzen, dann sollte es funzen.

 
markusschmitt
13-05-2003, 13:42 
 
Also habs jetzt ausgiebig getestet und auch noch andere Möglichkeiten getestet was allerdings zu keinem erfolgreichen Ergebnis geführt hat.

ERGEBNIS:

drwxr-xr-x 1 ftp ftp 0 Mar 09 15:23 1999 - Ordner 3 gross
Array
(
[0] => drwxr-xr-x 1 ftp ftp 0 Mar 09 15:23 1999 - Ordner 3 gross
[1] => d
[2] => rwxr-xr-x
[3] => 0
[4] => Mar 09 15:23 1999
[5] => - Ordner 3 gross
[6] =>
[7] =>
[8] =>
[9] =>
)

Dies ist der Ordner - Ordner 3 gross
2003-03-09

Warning: ftp_chdir: CWD failed. '- Ordner 3 gross' : no such file or directory. in C:\apache\htdocs\neuftp\serversuche.php on line 170

Code:
ereg("([-d])([rwxst-]{9}).* ([0-9]*) ([a-zA-Z]+ [0-9: ]* [0-9]{2}:?[0-9]{2}) (.+)", $rawlist[$i], $regs);



Ich gebe jetzt auf, HEUL......

Danke für eure Hilfe
Wer sich daran versuchen will oder vielleicht einen Lösungsansatz hat soll bitte posten.

Mfg Markus

 
markusschmitt
13-05-2003, 13:57 
 
Juppi, hab noch ne Seite gefunden, vielleicht klappt das ja, muss es mir aber erst noch genau anschauen.

Code von http://www.inebria.com/phpftp/ftp.phps


if ($contents = ftp_rawlist($ftp,"")) {
$d_i=0;
$f_i=0;
$l_i=0;
$i=0;
while ($contents[$i]) {
$item[] = split("[ ]+",$contents[$i],9);
$item_type=substr($item[$i][0],0,1);
if ($item_type == "d") {
/* it's a directory */
$nlist_dirs[$d_i]=$item[$i][8];
$d_i++;
} elseif ($item_type == "l") {
/* it's a symlink */
$nlist_links[$l_i]=$item[$i][8];
$l_i++;
} elseif ($item_type == "-") {
/* it's a file */
$nlist_files[$f_i]=$item[$i][8];
$nlist_filesize[$f_i]=$item[$i][4];
$f_i++;
} elseif ($item_type == "+") {
/* it's something on an anonftp server */
$eplf=split(",",implode(" ",$item[$i]),5);
if ($eplf[2] == "r") {
/* it's a file */
$nlist_files[$f_i]=trim($eplf[4]);
$nlist_filesize[$f_i]=substr($eplf[3],1);
$f_i++;
} elseif ($eplf[2] == "/") {
/* it's a directory */
$nlist_dirs[$d_i]=trim($eplf[3]);
$d_i++;
}
} /* ignore all others */
$i++;
}


Wer mir helfen will des Ding zu analysieren kann sich gern betteiligen da ich die Hälfte der benutzen Funktionen nicht kenn.

Mfg Markus

 
Abraxax
13-05-2003, 14:04 
 
Original geschrieben von markusschmitt
[...] da ich die Hälfte der benutzen Funktionen nicht kenn.du nicht. aber das manual .... :D

http://de.php.net/manual/de
oder hier: www.php-resource.de/manual.php

 
markusschmitt
13-05-2003, 17:40 
 
Den spruch kenn ich schon ;) nur zu genüge.

Mir leuchtet der split Befehl nicht ganz ein
von PHP.net

$datum = "04/30/1973"; // Trennzeichen darf ein Schrägstrich, Punkt
// oder Bindestrich sein
list ($monat, $tag, $jahr) = split ('[/.-]', $datum);
echo "Monat: $monat; Tag: $tag; Jahr: $jahr<br>\n";


Code den ich gepostet hab

$item[] = split("[ ]+",$contents[$i],9);


Jetzt kommt die Question
$item[] = es wird ein Array angelegt
split = ("[ ]+", = Suchmuster also entweder ein Leerzeichen oder keins
$contents[$i] = ist der durchsuchende $i String
9 = ?

Was bedeutet die 9
Wird hier ein Array angelegt mit mindestens 9 mit Leerzeichen getrennten Strings und alle Leerzeichen hinterher werden ignoriert und dem 9ten Arrayelement hinzugefügt?

Werd nicht ganz schlau aus der Zahl, wer weiss Rat?

Mfg Markus

 
markusschmitt
13-05-2003, 17:52 
 
Habs getestet und es passt.
zur vorherigen Frage hätte ich dann doch noch gerne ein erklärung?


//Testskript
<?php
$suche = "drwxr-xr-x 1 ftp ftp 0 Mar 09 15:23 1999 - Ordner 3 gross";
$item = split("[ ]+",$suche,9);
echo"<pre>";
print_r($item);
echo"</pre>";
?>


Ergebnis:


Array
(
[0] => drwxr-xr-x
[1] => 1
[2] => ftp
[3] => ftp
[4] => 0
[5] => Mar
[6] => 09
[7] => 15:23
[8] => 1999 - Ordner 3 gross
)


Hoffe des klappt mit allen Dateien und Ordnern. Zum bestätigen müsste ich jetzt zur obigen Frage eine Antwort haben!

Mfg Markus

 
Abraxax
13-05-2003, 18:01 
 
das '[ ]+' heisst, wenn ich mich nicht irre, dass immer dann getrennt wird, wenn mindestest ein leerzeichen enthalten ist.

diese aussage ist jedoch nicht mehr hier '1999 - Ordner 3 gross' anwendbar. was mich ein wenig wundert :goth:

 
markusschmitt
13-05-2003, 18:44 
 
des ist dir also http://www.cheesebuerger.de/smilies/schilder/21.gif
Ich habs jetzt mit mehreren Strings getestet und es funktioniert. Schreib gerade mein Funktion um.
Das Ergebnis sind bisher immer 9 Array elemente mit perfektem Inhalt. Was die 9 hinten bedeutet weist du auch nicht oder?

Mfg Markus

 
Abraxax
13-05-2003, 19:40 
 
Original geschrieben von markusschmitt
Was die 9 hinten bedeutet weist du auch nicht oder?das ist ja wohl noch das einfachstedrwxr-xr-x 1 ftp ftp 0 Mar 09 15:23 1999 - Ordner 3 grossist aufgeteilt dieses hier... Array
(
[0] => drwxr-xr-x
[1] => 1
[2] => ftp
[3] => ftp
[4] => 0
[5] => Mar
[6] => 09
[7] => 15:23
[8] => 1999 - Ordner 3 gross
)


rechte (linux/unix) das d steht für directory und dann 3 mal ein dreier block für user/group/other (mache dich da mal mit google schlauer, wenns dich interessiert) sehr ungewöhnlich ... :D user group siehe 2 :D monat der dateierstellung / oder letzte änderung entsprechend tag und uhrzeit und jahr + das komische eben

 
markusschmitt
13-05-2003, 20:04 
 
"und jahr + das komische eben"

sorry
hätte ich erklären sollen.
Das ist das der Name vom Ordner. Hatte voher mit preg_match das Problem das ich 2 mal hintereinander die Jahreszahl hätte kommen können.

Datum sieht so aus
Mar 15 22:20 => Aktuelles Jahr mit dem Monat März dem Tag 15 und der Uhrzeit:
Mar 15 1999 => Monat März, Tag 15, und dem Jahr 1999

Das Problem war jetzt wenn ich einen Ordner oder Datei habe die folgendermassen begonnen hat
1999 - Ordner 3
2000 Datei 2.2.zip
dann wurde die Jahreszahl von der Datei weggenommen und dem Datum zugerechnet durch das preg match halt.
Ergebnis war dann
Datum: Mar 15 1999 1999
Datei/Verzeichnis: - Ordner 3

somit ist das Verzeichnis oder die Datei falsch und er kann mir nicht ins Verzeichnis wechseln da es den Ordner "- Ordner 3" ja nicht gibt.


Lass jetzt das Skript mal durch alle Verzeichnisse laufen und schreib dann obs geklappt hat oder nicht!!!

Mfg Markus

 
Abraxax
13-05-2003, 20:33 
 
wenn 'Ordner 3 gross' ein ordner ist, erklärt sich auch , warum er bei [ ]+ das nicht noch einmal getrennt hat. das leerzeichen war garantiert escaped, da es ja zum namen gehört. klingt für mich zumindest logisch... :D

 
JokerfaceHRO
23-08-2004, 18:06 
 
text_array = split("[ ]+",$text,9);


die 9 bedeutet nur bis zu welchem leerzeichen der String
aufgespaltet werden soll ;)

Blessings !

 
Abraxax
23-08-2004, 19:00 
 
hey schnucki. was krabbelst du denn so alte threads aus? :goth:

der ist doch schon über ein jahr alt.

*CLOSE* (wenn was ist ... icq)


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:24 Uhr.