• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Für mich nicht nachvollziehbares fopen Problem

T

ToM80

Guest
Hallo zusammen,

ich greife in einem Login-Script per fopen auf eine Textdatei zurück die bei mir in einem Ordner (z. B. data/login.txt) gespeichert ist. Die Datei und der Ordner sind vorhanden!
Bei einem Login erhalte ich egal ob ich auf diese Datei oder eine andere dort zugreifen will immer ein
Code:
Warning: fopen(data/mandantno/032011.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Entwicklung\xampp\htdocs\mcms\inc\functions\main.func.inc.php on line 229

Wenn ich jedoch eingeloggt bin klappt der Zugriff 1a.

Also dachte ich muss an der Referenzierung der Datei liegen. Ich habe sie also über das root-Verzeichnis verlinkt
Code:
/mcms/data/mandantno/032011.txt
Aber auch hier wieder die gleiche Fehlermeldung :( Woran kann das liegen, bin ratlis :(
 
Ich denke mal, wenn du per fopen eine Datei öffnest bezieht sich Root auf das Dateisystem, in deinem Fall also C:\

edit: muss man auf windoof nicht Backslahes benutzen?
 
hmm das wäre mir neu. alle andere referenzen gehen ja auch. ich arbeite mit xampp. der root ist in diesem fall der in der apache config angegebene ort 'C:\entwicklung\xampp\htdocs'.
Aber ich kann deshalb trotzdem z. B. "/img/bild.png" darstellen lassen. Daran dürfte es nicht liegen, zumal ja aus irgendeinem Grund das ganze kein Problem ist, wenn ich mich an meiner applikation angemeldet habe. dann akzeptiert er "/mcms/data/...". Ist verhext. Denke mal legt irgendwo im Quellcode. Aber den kann ich hier aufgrund der Menge nicht einfach posten. Ich denke ich werde da mal wen befreundetes rüberschauen lassen.

Sollte troztdem jemand mal das gleiche Problem gehabt haben und somit ggf. auch einen Lösungsansatz, bin ich gespannt auf diesen :)

Trotzdem Danke Junkee[]
 
Sobald Du mit Dateioperationen arbeitest, spielt der Web-/Documentroot keine Rolle mehr. Wenn Du also einen absoluten Pfad angibst, dann ist dieser Pfad tatsächlich vom Basisverzeichnis Deines Dateisystems auszuwerten. Auch wenn Deine Beobachtungen Dir etwas anderes glauben machen wollen.

Wenn Du die oben genannte Fehlermeldung erhälst, dann deshalb weil für das dort gestartete Skript die Datei nicht in dem genannten relativen Verzeichnis gefunden werden kann. Eingeloggte User starten eventuell ein anderes Skript aus einem anderen Verzeichnis, welches einen entsprechenden Unterordner mit der gesuchten Datei enthält.
Zur Kontrolle kannst Du in beiden Fällen einfach mal das aktuelle Arbeitsverzeichnis ausgeben lassen, dann siehst Du eventuell den Unterschied.
 
Ich habe mit rel.Pfadangaben noch nie Probleme gehabt, meine Erfahrungen halten sich jedoch für PHP in Grenzen.
Ein echo getcwd(); vor/nach dem fopen könnte Aufschluß geben wo man sich wirklich befindet.

Edit: Albu war schneller
 
Ich bin schon im richtigen Verzeichnis. Auch wenn ich ein is_file mir ausgeben lasse kommt true zurück. Wenn ich jetzt also keine absolute sondern wieder die alte Pfadangabe nehme würde es ja rein theoretisch auch nach Win-Format passen.
Das merkwürdige ist, dass es schonmal alles reibungslos funktioniert hat vor X Versionen. Ich habe nur irgendwas anscheinend geändert und ich komm nicht rauf was. Notfalls muss ich mal im repositiory blättern und schauen wann es aufgehört hat zu funktionieren.
 
wie genau sieht dein fopen-befehl aus? hat der Webservernutzer die richtigen Berechtigungen auf das Verzeichnis bzw. die Datei?

versuch mal die login.txt ins Verzeichnis deiner main.func.inc.php zu schieben und sie dort zu öffnen, dann brauchst du erstmal gar keine Pfadangabe
 
doch braucht er schon, weil die main.func.inc.php vermutlich von einem anderen script eingebunden wird. das pwd (arbeitsverzeichnis) ist immer das verzeichnis in dem die datei liegt die man im browser aufgerufen hat.

Um solchen Pfadproblemen vorzubeugen definier ich mir normal eine Konstante die den absoluten pfad zur applikation enthält und benutz diese dann um weitere pfade zu erzeugen.
Angenommen du hast in C:\Entwicklung\xampp\htdocs\mcms\ eine global.php die bei jedem Aufruf eingebunden wird kannst du da reinschreiben:
define('APPLICATION_ROOT', dirname(__FILE__));

und dann von überall innerhalb der applikation deine datei so öffnen:
fopen(APPLICATION_ROOT . '/data/mandantno/032011.txt');
 
Hallo Danke für Eure hilfen. Fragt mich nicht wie oder was. Aber es funktionierte auf einmal ohne Vorwarnung wieder. Nachdem aber meine XAMPP Entwicklungsumgebung mehrfach aussetzer hat, denke ich dass es anscheinend auf der Platte noch eine andere Apache Umgebung gibt mit der sie sich verhakt und es deshalb zu den Fehlern kam.
Nachdem ich nun auch wieder in meinem Büro bin und meinen Hauptentwicklunsrechner nutze konnte ich das ganze nochmal testen. Auch hier habe ich keine Probleme und fopen funktioniert so wie vorgestellt.
Ich werde mich also mal auf die Suche nach dem Apache-Problem auf dem Notebook machen müssen, das hat jedoch Zeit. :)
 
Zurück
Oben