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
([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
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
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
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
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
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 !
hey schnucki. was krabbelst du denn so alte threads aus? :goth:
der ist doch schon über ein jahr alt.
*CLOSE* (wenn was ist ... icq)
|
|