Sven Rautenberg: is_file() und file_exists() erkennen Datei nicht!

Beitrag lesen

Moin!

(1) Geben Sie eine möglichst exakte Problembeschreibung, mit Auswahl eines passenden Themenbereiches und Titels bekannt. Funzt nicht ist keine Problembeschreibung.

Ok, meine Überschrift war vielleicht nicht gut gewählt. Aber: da die Funktionen true oder false zurückgeben, kann ich auch nicht mehr dazu sagen, wie geht oder geht nicht...

Eine "möglichst exakte Problembeschreibung" sollte den potentiellen Antworter im Zweifel genau in die Lage versetzen, das Problem lokal nachstellen zu können.

Das kann ich aber nicht, wenn ich z.B. keinen Quelltext sehe (Mindestbedingung 1), und die Gewißheit über die sonstigen Umgebungsbedingungen dürfte ebenfalls nicht verkehrt sein. Unter dem Strich: Ein Zuviel an vernünftigen Informationen ist sicherlich weitaus weniger schädlich, als ein Zuwenig. Immerhin steht deine Anfrage hier schon über zwei Stunden rum, ohne Interesse geweckt zu haben. Und wenn ich dann das Zuwenig an Information bemängele, sollte das vielleicht zu denken geben und die Nachlieferung veranlassen.

(2) Geben Sie besondere Umgebungsbedingungen wie Browser und Betriebssystem etc. bekannt. Für ein Intranet gelten z.B. andere Maßstäbe als für im World Wide Web veröffentlichte Seiten.

Habe ich: lokal und im www, jeweils auf Apache (genau: Apache 2). Browser, BS... spielen keine Rolle. Der Fehler entsteht ja nicht im Browser, wenn ich die Funktionen ausführe.

Aber selbstverständlich spielt das Betriebssystem eine Rolle. Nämlich das vom Server! Ich hätte nämlich einige Theorien für dein Problem, aber die kann ich natürlich nur verifizieren, wenn ich weiß, was du so verwendest.

Und die PHP-Version zu wissen wäre auch nicht falsch. Kann ja immerhin sein, dass du eine ganz veraltete Version hast, in der Bugs enthalten sind.

(3) Machen Sie den problematischen Quellcode öffentlich. Entweder im Posting selbst oder mittels Link auf die betreffende Seite. Funktionierende Glaskugeln sind eine Rarität und bloßes Rätselraten erschwert eine schnelle und gute Hilfe. Gerne wird es gesehen, wenn der Quellcode auf die für das Problem notwendigen Stellen reduziert wird, schließlich hat kaum jemand Lust, sich in hunderte Zeilen unnötigen Code einzuarbeiten.

Wie die Funktionen aufgerufen werden, habe ich mal vorausgesetzt.  Aber:

  

> if (file_exists("test.pdf")) echo "JA";  
> else echo "NEIN";  
> if (is_file("test.pdf")) echo "JA";  
> else echo "NEIN";  

Der Code gibt in beiden Fällen (Funktionen) "NEIN" aus.

Natürlich weiß ICH, wie man die Funktionen aufruft. Aber ich habe ja auch kein Problem, scheinbar existierende Dateien damit zu finden, das Problem hast DU. Mit DEINEM Code. Und wenn dieser Code ein Problem hat, dann würde ich ihn gerne kennen und offensichtliche Fehler ausschließen. Das ist keine unzumutbare Gängelung, sondern zwingend notwendig.

Du fragst ja auch nicht in der Autowerkstatt den Meister: "Ich hab bei mir im Auto das Blinkerlicht ausgetauscht, und jetzt geht das Bremslicht nicht mehr", und auf die Aussage "Kann ich mir das Auto mal ansehen" antwortest du "Also, ich dachte, wie ein Auto aussieht, sollte klar sein."

(4) Schildern Sie, was Sie bisher zur Lösung des Problems unternommen haben. Es hilft Ihnen ja nicht, wenn Sie Tipps bekommen, die Sie bereits selbst ausprobiert haben.

Was habe ich probiert.
Ich habe den Pfad in allen Varianten angegeben "/",  "./" und ""
Es mit verschiedenen Datenen versucht.. => nur mit PHP Dateien klappts...
*AHA* Die schreibweise der Funktion stimmt also. Die Pfadangabe auch. Nur sobald ich von test.php auf test.pdf oder test.bmp ändere geht nicht mehr. Es kommt FALSE statt TRUE. Dateien sind alle vorhanden, alle Rechte sind gleich.

Die Sache ist die: Dein hingeschriebener Testcode oben enthält alle diese Informationen nicht. Und so, wie du es hier verärgert hingeschrieben hast, ist das auch nicht wirklich hilfreich.

So, Sven, was sagst Du nun? Ne Lösung?

Ich hätte eigentlich (das wäre außerdem wesentlich kürzer gewesen) erwartet, dass du tatsächlich ein Testskript in dein Verzeichnis schreibst, welches sämtliche geprüften Varianten von is_file-Zugriffen auf test.php und test.pdf enthält - inklusive des Ergebnisses:

  
<?php  
echo "<pre>";  
echo (is_file("test.php")?"php: ja":"php: nein")."\n"; // ja  
echo (is_file("test.pdf")?"pdf: ja":"pdf: nein")."\n"; // nein  
//... weitere Pfadvariationen, wenn nötig  
echo "</pre>";  
?>  

Außerdem wäre es gut, wenn du die Dateinamen verifizieren würdest:

  
<?php  
error_reporting(E_ALL);  
$handle=opendir ('.');  
echo "<pre>Verzeichnis-Handle: $handle\n";  
echo "Dateien:\n";  
while (false !== ($file = readdir ($handle))) {  
   echo "$file\n";  
}  
closedir($handle);  
echo "</pre>";  
?>  

Die Ergebnisse beider Skripte (ins gleiche Verzeichnis, ist ja klar) bitte mal posten.

- Sven Rautenberg

--
My sssignature, my preciousssss!