ingobar: fopen geht nicht

Hallo zusammen,

leider habe ich wohl Pech mit php. Folgendes habe ich versucht:

Ich habe in Formular mit

<input type="file" value="Importieren" id="input_filepath" size="10">

Den Pfadnamen der ausgewählten Datei schicke mit POST an eine php-Datei in der folgendes steht:

$InpRTF = $_POST["filepath"]; // Definiere hier den RTF-Filename
 if (file_exists($InpRTF)) {
 } else {
  print "Inputfile: <strong>$InpRTF</strong> nicht gefunden.";
 }

Ich habe es auch direkt mit

file_exists("/Users/username/Documents/Allgemein/__Jahr 0607/liste.rtf")

versucht aber es ging auch nicht. Das Leerzeichen habe ich auch mal weggenommen in dem ich den Ordern umbenannt habe. Ohne Auswirkung.

Das Ganze versuche ich unter OSX 10.4.

Die Meldung, die aber die ganze Zeit bekomme ist, dass die Datei nicht gefunden wurde.

Die Zugriffsrechte der Datei habe ich auch vorsichtshalber geändert. Alles ohne Auswirkung. Was ist falsch? Kann mir da mal jemand helfen?

  1. <input type="file" value="Importieren" id="input_filepath" size="10">

    Du machst einen Dateiupload? Hast du den richtigen Content-Type im <form> gesetzt?

    $InpRTF = $_POST["filepath"]; // Definiere hier den RTF-Filename

    Dateien stehen nicht in $_POST, sondern in $_FILES. Dort ist pro Datei ein Array mit diversen Metadaten vorhanden, auch der Pfadname zur temporären Datei, die hochgeladen wurde.

    Abgesehen davon heißt der Arrayindex so, wie das input-Feld. Und wenn das Feld "input_filepath" heißt, wirst du es nicht unter $_POST["filepath"] finden.

    Ich habe es auch direkt mit

    file_exists("/Users/username/Documents/Allgemein/__Jahr 0607/liste.rtf")

    Direktzugriff auf die Datei beim User ist nur in ganz speziellen Ausnahmefällen möglich. Hast du so einen Spezialfall?

    Die Meldung, die aber die ganze Zeit bekomme ist, dass die Datei nicht gefunden wurde.

    Debugging: Lasse dir immer ausgeben, nach welcher Datei tatsächlich gesucht wird, indem du den Dateinamen mit ausgibst. Sonst _glaubst_ du nur, dass du auf die vorhandene Datei zugreifst, in Wirklichkeit aber greifst du die ganze Zeit ins Leere!

    1. <input type="file" value="Importieren" id="input_filepath" size="10">

      Du machst einen Dateiupload? Hast du den richtigen Content-Type im <form> gesetzt?

      Tue ich das? Vielleicht sollte ich es genauer erklären:
      1. Es ist kein Fomular, da ich das mit AJAX machen möchte.
      2. Ich lese den Wert im input-Feld mit JS aus und mache dann dies:

      function read_rtf_file_data() {
       editklasse_ajax_db_anfrage = null;
       editklasse_ajax_db_anfrage = erzeugeDB_Anfrage();
       if (editklasse_ajax_db_anfrage!=null) {
        var url = "editclass_readrtf.php";
        data2send = "filepath="+escape(document.getElementById("input_filepath").value);
        editklasse_ajax_db_anfrage.open("POST", url, true);
        editklasse_ajax_db_anfrage.onreadystatechange = zeigeBestaetigung_schuler;
        editklasse_ajax_db_anfrage.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        editklasse_ajax_db_anfrage.send(data2send);
       } else {
        document.getElementById("feedback_data").innerHTML = "Es konnte keine Verbindung zum Server aufgebaut werden.";
        document.getElementById("feedback").style.visibility = "visible";
        document.getElementById("speichern").focus();

      }
      }

      Muss ich da den setRequestHeader anders setzen? Ich dachte, dass ich nur den Pfad zur Datei hier verarbeite.

      Dateien stehen nicht in $_POST, sondern in $_FILES. Dort ist pro Datei ein Array mit diversen Metadaten vorhanden, auch der Pfadname zur temporären Datei, die hochgeladen wurde.

      Auch bei meiner Konstruktion?

      Abgesehen davon heißt der Arrayindex so, wie das input-Feld. Und wenn das Feld "input_filepath" heißt, wirst du es nicht unter $_POST["filepath"] finden.

      Da ich ja keine <form> verwende nicht. Aber vielleicht sollte ich das besser, oder?

      Ich habe es auch direkt mit

      file_exists("/Users/username/Documents/Allgemein/__Jahr 0607/liste.rtf")

      Direktzugriff auf die Datei beim User ist nur in ganz speziellen Ausnahmefällen möglich. Hast du so einen Spezialfall?

      Keine Ahnung. Welche Spezialfälle gibt es denn? Die ganze Anwendung läuft lokal und wird auch in Zukunft erstmal lokal laufen.

      Debugging: Lasse dir immer ausgeben, nach welcher Datei tatsächlich gesucht wird, indem du den Dateinamen mit ausgibst. Sonst _glaubst_ du nur, dass du auf die vorhandene Datei zugreifst, in Wirklichkeit aber greifst du die ganze Zeit ins Leere!

      Wie muss ich denn das codieren?

      Ich weiß, Fragen über Fragen. Aber ich habe im Internet irgendwie sonst nichts gefunden, was mir weiterhelfen kann. Kennst du nicht ein Tutorial, wo ich mal zu diesem speziellen Problem etwas nachlesen kann?

      1. hi,

        Du machst einen Dateiupload? Hast du den richtigen Content-Type im <form> gesetzt?

        Tue ich das? Vielleicht sollte ich es genauer erklären:

        1. Es ist kein Fomular, da ich das mit AJAX machen möchte.
        2. Ich lese den Wert im input-Feld mit JS aus

        Damit kommst du nur an den Dateinamen.

        Javascript hat unter normalen Umständen keinen Zugriff auf Dateien auf dem Client - ein Dateiupload per AJAX ist also nicht möglich.

        Das ist erst vor ein paar Tagen noch hier diskutiert worden: </archiv/2007/2/t145888/>

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Okay,

          das ist irgendwie spurlos an mir vorübergezogen. Sorry, wenn ich also nochmals nachgefragt habe.

    2. Genau genommen will ich kein File hochladen. Sonder ich will folgendes machen: Ich habe Daten in einer Tabelle eines rtf-Files und will diesen Daten in eine MySQL-DB reinschreiben. Dazu will ich den Inhalt der Datei als String haben, dort alle Steuerzeichen rausschmeißen (wenn das überhaupt irgendwie geht), die Daten aus dem String rausextrahieren und diese dann in die DB schreiben.

      1. hi,

        Genau genommen will ich kein File hochladen. Sonder ich will folgendes machen: Ich habe Daten in einer Tabelle eines rtf-Files und will diesen Daten in eine MySQL-DB reinschreiben. Dazu will ich den Inhalt der Datei als String haben, dort alle Steuerzeichen rausschmeißen (wenn das überhaupt irgendwie geht), die Daten aus dem String rausextrahieren und diese dann in die DB schreiben.

        Liegt dieses RTF denn schon serverseitig vor - oder wo liegt der Berührungspunkt mit AJAX?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Liegt dieses RTF denn schon serverseitig vor - oder wo liegt der Berührungspunkt mit AJAX?

          Ich bekomme die benötigten Daten leider nur als rtf-File. AJAX wollte ich nur benutzen, um die Interaktio für den User netter zu machen. Inzwischen bin ich aber davon weg und beschränke mich rein auf php.

          Im Moment kämpfe ich mit den verschiedenen Befehlen in php die mit dem file-Handling zu tun haben.

          Im Moment bin ich bei

          $content=file_get_contents($_FILES['file']['name']);

          um an die Daten im File zu kommen, aber das klappt noch nicht:

          failed to open stream:

          Aber ich glaube ich finde schon irgendwas im Netz, das mir weiterhilft.

          Falls du aber einen Tipp hast?

          1. hi,

            $content=file_get_contents($_FILES['file']['name']);

            um an die Daten im File zu kommen, aber das klappt noch nicht:

            failed to open stream:

            Wenn es sich um eine gerade hochgeladene Datei handelt, solltest du die erst mal mit move_uploaded_file aus dem Temp-Verzeichnis herausholen - und dann erst weiter damit arbeiten.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }