hartmann
Goto Top

CSV Dateien auslesen geht bei Datei 1 und bei Datei 2 nicht.....

Hallo,
ich habe mehrere CSV Dateien die ich täglich mit PHP einlesen und nach bestimmten Werten suchen muss.
Bisher hat alles Wunderbar funktioniert aber seit ca 2-3 Tagen werden 2 von 8 Dateien nicht mehr richtig eingelesen. Ich poste am besten erstmal mal den Code:

$dateien = "datei01.csv";    
$dateien[1] = "datei02.csv";    
$dateien[2] = "datei03.csv";    
$dateien[3] = "datei04.csv";    
$dateien[4] = "datei05.csv";    
$dateien[5] = "datei06.csv";    
$dateien[6] = "datei07.csv";    
$dateien[7] = "datei08.csv";    
$counter = 0;

$fp = @fopen($dateien[$counter], "r") or die ("Kann Datei nicht lesen.");   

while($array = fgetcsv($fp, 1000, ","))  
{ 

     // Hier werden die geschten Daten mit mehreren IF- Abfragen rausgesucht
     // Bei Datei 02 und 03 bekomme ich nur ein leeres Array zurück  

     $counter++;
}


Bei Datei 02 und 03 bekomme ich nur ein leeres Array zurück. Die Dateien sind Komma getrennt und vom Aufbau zu 100% identisch. Das hat bisher immer Perfekt funktioniert nur seit ein paar Tagen werden diese 2 Dateien nicht mehr richtig gelesen.
Wenn ich die CSV Dateien in einen Editor öffne liegen diese auch im richtigen Format mit Inhalt vor, nur PHP kommt nicht an den Inhalt ran.

Ich hoffe jemand kann mir hier weiterhelfen, ich bin nämlich im moment ziemlich Ratlos .... falls mehrere Informationen benötigt werden kann ich diese jederzeit noch Posten.

Content-ID: 127140

Url: https://administrator.de/contentid/127140

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

Tommy70
Tommy70 15.10.2009 um 07:43:06 Uhr
Goto Top
Hallo,

um mal mit Garantie sicherzustellen dass die Dateien identisch sind.
Lässt sich Datei02 einlesen wenn du sie in Datei01 umbenennst und Datei01 in Datei02?

Gruß
Tom
maretz
maretz 15.10.2009 um 07:51:58 Uhr
Goto Top
Moin,

gibt es denn auch ne Fehlermeldung (ggf. auch in den Log-Files?). Hat die Datei die entsprechenden Rechte? Wie sieht es mit Zeilen-Ende-Kennungen aus? (z.B. eine Datei im Unix, die andere im DOS-Format?)
nxclass
nxclass 15.10.2009 um 08:15:03 Uhr
Goto Top
evtl. ist eine Datenzeile länger als 1000 Zeichen ?
oder in einem Wert steht ein Komma, welches den Parser durcheinander bringt ?
hartmann
hartmann 15.10.2009 um 08:38:12 Uhr
Goto Top
erstmal danke für die schnelle Antworten.
Fehlermeldungen sind keine erschienen und Rechte der Dateien sind 100% identisch.

Habe die Dateien 01 und 02 jetzt umbenannt und alles ist perfekt gelaufen.

Dann habe ich diese Dateien wieder umbenannt und nochmal ausprobiert und es funktioniert jetzt auch wieder einwandfrei.

Das Problem hat sich jetzt also erstmal gelöst, aber woran könnte das liegen das es nach dem umbenennen jetzt wieder normal funktioniert ? Habe die Dateien 2 mal umbenannt jetzt ist alles wieder wie zu Beginn aber es geht jetzt perfekt.

Habt ihr da vielleicht noch eine Idee?
bbyszio
bbyszio 15.10.2009 um 09:09:47 Uhr
Goto Top
Moin,
also wenn ich dein Script richtig verstehe, öffnest du nur die erste Datei, da dein fopen ausserhalb der Schleife liegt. Ich würde das fopen in der Schleife machen und direkt vor dem $counter++ die Datei wieder schließen.


Gruß
Bodo
nxclass
nxclass 15.10.2009 um 09:37:01 Uhr
Goto Top
Kann es sein das evtl. ein anderer Prozess gerade auf die Datei zugegriffen und diese blockiert hat ? (AV o. ein Editor ?
Wie werden die CSV Dateien erstellt ? - evtl. waren die 2 Dateien noch nicht geschlossen und somit leer ?

PS: Durch reiben, ist meine Glaskugel schon ganz heiß - muss sie jetzt erst mal abkühlen lassen)
hartmann
hartmann 15.10.2009 um 10:25:14 Uhr
Goto Top
Hatte das fopen schon in einer Schleife das ist mir durch das kopieren wohl verloren gegangen, so sieht das script aus.

$dateien = "datei01.csv";    
$dateien[1] = "datei02.csv";    
$dateien[2] = "datei03.csv";    
$dateien[3] = "datei04.csv";    
$dateien[4] = "datei05.csv";    
$dateien[5] = "datei06.csv";    
$dateien[6] = "datei07.csv";    
$dateien[7] = "datei08.csv";    
$counter = 0;

while($counter < count($dateien))
{
$fp = @fopen($dateien[$counter], "r") or die ("Kann Datei nicht lesen.");   

while($array = fgetcsv($fp, 1000, ","))  
{ 

     // Abfragen

}
    $counter++;
}


@nxclass Der Tipp das die Dateien evtl noch nicht fertig erstellt bzw. noch in Verwendung waren könnte ich mir gut vorstellen da die CSV dateien von Excel mit einen VB Script erstellt werden und diese Excel Datei häufig von von verschiedenen Usern bearbeitet wird. Ich werde das mal beobachten.

Thx an alle nochmal für die schnelle Hilfe.