Merkwürdiges Problem mit file()

Moritz123

Erfahrenes Mitglied
Hallo!

ich habe mir einen kleinen CSV-Reader geschrieben, den ich über ein Upload-Formular mit einer Text-Datei füttere.
Das Formular zum Upload sieht wie folgt aus:
HTML:
<form action="csvreader.php" method="post" enctype="multipart/form-data" name="form1">
  <table  border="0" cellspacing="0" cellpadding="0" align="center">
    <tr>
      <td>EP - CSV - Datei: &nbsp;</td>
      <td><input type="file" name="file"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" class="button" value="Datei erzeugen >>"></td>
    </tr>
  </table>
</form>

Ich nutze die file()-Funktion, um die übergebene Datei zeilenweise einzulesen:
PHP:
$name = $_FILES['file']['name'];
$zeile = file($name);
.... weiterer Code -> Datei wird _NICHT_ auf den Server geladen!
Das ging auch die ganze Zeit wunderbar - nur als ich mir stolzgeschwellter Brust das Ergebnis meinem Chef zeigen will, erhalte ich folgenden Fehler:
Code:
Warning: file(test_content.csv) [function.file]: failed to open stream: No such file or directory in F:\apachefriends\xampp\htdocs\www\emogress.de\shop\csvreader\csvreader.php on line 45
wobei Zeile 45 die Zeile mit der file()-Funktion (s.o.) ist.
Ich verstehe die Welt nicht mehr - kann mir nur vorstellen, dass es damit zusammenhängt, dass ich die Datei nicht auf den Server lade. Aber warum ging es dann vorher, ohne das sich an den Ausgangsbedingungen etwas geändert hat...?

Ich hoffe, Ihr könnt mir auf die Sprünge helfen.

Vielen Dank!
 
Hallo!

Woran es lag, dass es vorher ging, kann ich zwar nicht sagen, allerdings dient die Funktion file ja dazu, eine Datei auf dem Server zu lesen.
Wie soll das geschehen, wenn du die Datei nicht auf dem Server hast?

Vielleicht ist in der Variablen $_FILES, die du auf deinem Testserver (davon gehe ich mal aus) hattest (oder genau genommen $_FILES['file']['name']) der Pfad auf dem Server gespeichert (ich kenn' die Variable $_FILE nicht mehr so genau - gedächtnis wie ein Sieb ;) ) und auf deinem Testserver hattest du noch Zugriff auf die Datei, jetzt allerdings nicht mehr?! - Nur eine ganz vorsichtige Vermutung - kann also auch in die völlig falsche Richtung führen.
 
$_FILES['datei']['name'] beinhaltet den Originalnamender hochgeladenen Datei.
Auf dem Server wird sie erstmal ins Uploadverzeichnis geladen und umbenannt.
Den vorläufigen Dateinamen auf dem Server ermittelst du über $_FILES['datei']['tmp_name']


Warum es vorher ging, kann ich mir nicht erklären.
 
Vielen Dank erstmal für Eure Antworten.

Ich habe das Ganze auch auf meinem Testserver vorgestellt (ich sagte ja, dass sich an den Rahmenbedingungen nichts geändert hat).
Ich habe jetzt "$_FILES['file']['name']" mal gegen "$_FILES['file']['tmp_name']" getauscht und nun gehts.
Um das Ganze wasserdicht zu machen, habt ich mir überlegt, die Datei vielleicht in den Ausgabebuffer zu laden. Ist so etwas sinnvoll? Wenn ja, wie setze ich da am geschicktesten an?

Vielen Dank nochmal.
 
Hhmm...
Stimmt, so langsam dämmerts wieder ;).
Dann dürfte das Script ja eigentlich von Anfang an nicht richtig funktioniert haben.
Hat des das Script absolut richtig funktioniert, oder wurde einfach nur keine Fehlermeldung angezeigt?
Es sollte eigentlich nicht möglich sein, eine Datei zu lesen, die es nicht gibt (sofern diese nicht erstellt wird - was hier ja nicht der Fall ist). Deswegen könnte ich mir höchstens noch vorstellen, dass, wie gesagt, nur die Fehlermeldung nicht ausgegeben wird.
 
Wenn du die Datei später nicht mehr brauchst, kannst du sie da lassen, wo sie ist.
Solange das Skript läuft, befindet sich die Datei auf dem Server.
Ich wüsste auf Anhieb nichts, was dagegen spricht, über das Dateisystem drauf zuzugreifen.
 
Zurück