Ankündigung

Einklappen
Keine Ankündigung bisher.

Kann Fehler im Script nicht finden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kann Fehler im Script nicht finden

    In folgendem Script ist der Dateiname gleich dem Dateiinhalt.

    Im ersten Abschnitt wird die Datei angelegt.
    Warum wird diese bei der if(!file_exists) Abfrage als nicht gefunden ausgegeben?
    Wo ist da der Fehler?

    Code:
    <html>
    <form method="post" action="output.php">
    <input type="text" name="Feld1" size="13" maxlength="13"/>Vorname1<p>
    <input type="submit" name="senden" />
    </html>
    PHP-Code:
     <?php
    $vorname1 
    $_POST["Feld1"];
    echo 
    '<input type="text" name="Feld1" size="13" maxlength="13" value="'.$vorname1.'" />' ;
    echo 
    "<p>";
    $dateiname "Namen/"$_POST['Feld1'] . '.csv';
    $handler fopen("Namen/"$_POST['Feld1'] . '.csv'"a");
    fWrite($handler $vorname1);
    fClose($handler);
    echo 
    "<p>";
    ?>

    <?php
    if(!file_exists("Namen/"$_POST['Feld1']))
    {
    echo 
    "Datei konnte nicht gefunden werden";
    exit;
    }
    $fp fopen("Namen/"$_POST['Feld1'],"r");
    if(!
    $fp)
    {
    echo 
    "Datei konnte nicht geöffnet werden";
    exit;
    }
    $zeile fgets($fp14);
    echo 
    '<input type="text" name="Feld1" size="13" maxlength="13" value="'.$zeile.'" />' ;
    ?>

  • #2
    Ein ganz klitzekleiner Tipp: Dateiendung

    Übrigens ist es immer Nett in solchen Fällen den Code grob zu kommentieren

    Kommentar


    • #3
      und selbst dann ist das nicht sichergestellt - dein script schreibt zwar die Datei - aber geh einfach mal davon aus, dass dein Webserver intern so richtig schnell sein muss - es ist gut möglich, dass der so schnell da durch ist, dass das Dateisystem des darunterliegenden Betriebssystems die Datei noch gar nicht auf die Platte gebracht hat, wenn dein PHP seinerseits nur nanosekunden später das file_exists macht - mal abgesehen davon, dass da wie schon gesagt auf einmal die Dateiendung fehlt ....

      Kommentar


      • #4
        Zitat von beliar284 Beitrag anzeigen
        und selbst dann ist das nicht sichergestellt - dein script schreibt zwar die Datei - aber geh einfach mal davon aus, dass dein Webserver intern so richtig schnell sein muss - es ist gut möglich, dass der so schnell da durch ist, dass das Dateisystem des darunterliegenden Betriebssystems die Datei noch gar nicht auf die Platte gebracht hat, wenn dein PHP seinerseits nur nanosekunden später das file_exists macht
        Darüber brauch man sich keine sorgen machen, PHP Arbeitet sequenziell. Solang das fclose nicht sauber durch ist wird file_exist auch nicht ausgeführt...

        Viel mehr sorgen sollte man sich hingegen darüber machen das $_POST einfach so ungeprüft eingesetzt wird und dann noch bei Pfaden...

        Kommentar


        • #5
          ja - nicht sauber - aber wenigstens klatscht er ne feststehende Dateiendung dran, sodass man keine Systemrelevante Datei einfach so überschreiben kann

          Kommentar


          • #6
            Zitat von Varon Beitrag anzeigen
            Solang das fclose nicht sauber durch ist wird file_exist auch nicht ausgeführt...
            file_exist interessiert es nebenbei bemerkt gar nicht, ob ein close schon gemacht wurde, denn file_exist liefert bereits true nach einem fopen mit mode='a' (sofern mit fopen alles ok gelaufen ist).

            Kommentar


            • #7
              [MAN]clearstatcache[/MAN] nicht vergessen.

              Kommentar

              Lädt...
              X