Archiv verlassen und diese Seite im Standarddesign anzeigen : is not a valid stream resource
weinreich 01-11-2006, 06:43 Hallo zusammen,
ich hole per ftp Textfiles von einem Server um diese danch zu zerlegen und wichtige Auszüge mit mysql wegzuschreiben ...klappt auch wunderbar solange die Schleife nicht zu lang wird ...
dann taucht bei folgendem Quellcodezeilen plötzlich folgende Fehlermeldung auf :
suplied argument is not a valid stream resource
Was kann das sein ?, geht im Prinzip schon...aber wenn die Anzahl der Textfiles zu groß wird gehts nicht mehr ... Danke Euch
$download = ftp_get($conn_id, $fname, $fname, FTP_BINARY);
handle = fopen($fname,"r");
while (!feof($handle)) {
$buffer = fgets($handle);
$array = explode('|', $buffer);
....
onemorenerd 01-11-2006, 07:26 1. Redest du von $conn_id oder $handle?
2. handle != $handle
3. Gibt es zwischendurch auch mal ein explizites fclose()?
Übrigens gehts auch mit
$array = explode('|', file_get_contents($fname));
weinreich 01-11-2006, 07:48 Danke für die schnelle Antwort.
also, Prinzip ist, ... File holen, zerlegen und fclose.
danach nächstes File ..... in einer Schleife bis keine Files mehr vorhanden sind.
Ging bisher prima ... aber jetzt bei über 1600 Files taucht die Fehlermeldung in Zeile 33 und 35 auf.
zu 3.) ja, nach jedem File gibt es ein fclose($handle)
zu 2.) verstehe leider nicht was Du meinst
zu 1.)
zeile 33 : while (!feof($handle)) {
zeile 35 : $array = explode('|', $buffer);
Original geschrieben von weinreich
zu 2.) verstehe leider nicht was Du meinst
*seufz* Augen aufmachen.
handle vs. $handle
( ) Du erkennst einen Unterschied in den beiden Schreibweisen.
( ) Du lässt es lieber bleiben.
Wenn du dein error_reporting auf E_ALL gestellt hättest (siehe Regeln (http://www.php-resource.de/forum/showthread.php?s=&threadid=50454), verflixt noch mal), dann hätte PHP dich gleich drauf hingewiesen.
schicker03 01-11-2006, 20:47 hallo weinreich,
der Fehler sagt dir das in $handle keine gültige Datei zu finden ist
>> is not a valid stream resource
bevor du das machst
>>while (!feof($handle)) {
solltest du mit "if($handle)" prüfen ob die Datei überhaupt vorhanden ist, sonst halt nicht laden, weil er sonst bei feof(...) knallt.
gruss
schicker03
jahlives 01-11-2006, 21:03 @topicstarter
Du hast gar keinen $handle sondern nur einen handle. Oder war das nur ein Verschreiber hier im Forum ?
Wenn die URL Wrapper bei dir aktiviert sind, dann würde ich die die vorgeschlagene Version mit explode() und file_get_contents() nahelegen, weil das weniger Code bedeutet.
Gruss
tobi
onemorenerd 01-11-2006, 22:48 Auch ohne allow_url_fopen bietet sich file_get_contents() an, schließlich liegen die Dateien nach ftp_get() lokal vor.
weinreich 02-11-2006, 09:26 sorry, das mit dem handle war ein Schreibfehler ...
natürlich heisst es $handle = fopen ....
mein Problem ist allerdings immer noch nicht gelöst.
Gibt es sowas wie ein Pufferüberlauf ?
Kann es sein dass mysql mit dem Wegschreiben der Daten nicht hinterher kommt ?
Warum geht die Schleife erst 5 Minuten lang bevor die Fehlermeldung kommt ?
seltsam, oder ?
weinreich 13-11-2006, 13:53 also, ist schon etwas länger her, dafür konnte ich den Fehler einkreisen ...
Ich habe jetzt einen noch größeren Sever mit noch mehr files, da geht die Schleife keine 5 Minuten..da geht sie gar nicht.
der Fehler passiert bei dem $download = ftp_get($conn_id, $fname, $fname, FTP_BINARY); ...$handle bleibt leer ..., warum auch immer.
und zwar bei einem Directory bei dem die Fileanzahl über 2300 Dateien beträgt ..bei kleineren Directorys funktionierts einwandfrei.
Was ich jetzt brauche ist also entweder eine ftp_get Alternative oder irgendetwas anderes.
An der Anzahl der Files oder dem Server auf dem die Files liegen kann ich nichts machen, und habe ich auch keinen Einfluß drauf.
Jemand eine Idee ?
onemorenerd 14-11-2006, 00:56 Was steht im Log des FTP-Servers?
weinreich 14-11-2006, 06:42 tut mir leid, an das log file komme ich nicht.
Es ist ein externer Server bei dem ich lediglich Leserechte für ein Directory habe ... und da liegen Statistiken..das ist der Hintergrund.
weinreich 14-11-2006, 06:57 hab gerade nochmal was getestet ...
das geht auch schon nicht .... allerdings nur bei Directory's mit einer
riesen Anzahl von Files ....bei kleinere Directory's funktioniert es ...
$contents = ftp_nlist($conn_id, ".");
var_dump($contents);
Gibt es da doch ein php Limit ?
liefert der ftp server evtl zu langsam die daten das sich php verrennt?
weinreich 14-11-2006, 09:02 Original geschrieben von Trashar
liefert der ftp server evtl zu langsam die daten das sich php verrennt?
das weiß ich nicht ...
mein Problem ist jetzt dass ich eine Alternative brauche um alle Filenamen
auszulesen ...
oder kann ich eine Schleife darum machen ?
die ersten 100, dann die nächsten 100 usw. ?
Wie könnte das aussehen ?
onemorenerd 14-11-2006, 10:49 Versuche erstmal noch ftp_pasv(), ftp_rawlist() und ftp_raw().
weinreich 14-11-2006, 13:35 also,
da gleiche mit ftp_rawlist geht ..
scheint als wäre der ftp_nlist nicht ganz in Ordnung ...
egal, den List bekomme ich jetzt .. Bleibt nur noch eine letzte Frage :
Wie kriege ich jetzt ohne viel Aufwand den ganzen Anhang von dem Dateinamen wieder weg ? Ich brauche lediglich den Dateinamen...für den späteren Download ...
mit explode etc. wird es nicht gehen, da ich keine 100% Regelmäßigkeit in dem Anhang der Files sehe .. oder auch unterschiedliche Längen ..
onemorenerd 14-11-2006, 17:22 http://php.net/ftp_rawlist
weinreich 15-11-2006, 06:40 vielen Dank für Eure Hilfe ...jetzt gehts !
ich bleibe aber dabei, dass mit dem ftp_nlist irgendwas buggy ist ...
|
|