Bei der Verwendung von PHP für Dateioperationen ist die Funktion fopen () eine gemeinsame Eintragsfunktion, mit der Dateien zum Lesen, Schreiben oder Anhängen von Vorgängen geöffnet werden. Während des Entwicklungsprozesses kann die Datei jedoch nicht aufgrund von Pfadspezifikationsfehlern geöffnet werden, und dann wird eine Warn- oder Fehlermeldung geworfen. In diesem Artikel wird vorgestellt, wie die Funktion fopen () verwendet wird, um den Dateipfad korrekt anzugeben und gemeinsame Pfadfehler zu vermeiden.
Pfadfehler stammen hauptsächlich aus Missverständnissen über relative und absolute Pfade.
Der relative Pfad ist relativ zum Ausführungsort der aktuellen Skriptdatei. Zum Beispiel:
<span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"data.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span></span>Wenn die aktuelle PHP -Datei in /var/www/html/ Verzeichnis ausgeführt wird, sucht Fopen () in diesem Verzeichnis nach Daten.txt .
Der absolute Pfad ist der vollständige Pfad, der vom Stamm des Dateisystems beginnt. Zum Beispiel:
<span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"/var/www/html/data/data.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span></span>Durch die Verwendung absoluter Pfade können Sie Dateien klarer finden, ist jedoch weniger tragbar.
Es wird empfohlen, __dir__ oder DirName (__File__) zu verwenden, um den Pfad zu konstruieren, der die Flexibilität des relativen Pfades und die Zuverlässigkeit des absoluten Pfades kombinieren kann.
Beispiel:
<span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">"/data/data.txt"</span></span><span>;
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span></span>Um Fehler zu vermeiden, die in der Datei nicht gefunden wurden, sollten Sie überprüfen, ob die Datei vor der Verwendung fopen ( ) über File_Exists () vorhanden ist.
Beispiel:
<span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">"/data/data.txt"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-comment">// Lesen oder Prozessdateiinhalte lesen</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Datei existiert nicht: "</span></span><span> . </span><span><span class="hljs-variable">$file</span></span><span>;
}
</span></span>Im Folgenden sind häufige Pfadfehler in der Entwicklungsfehler:
Pfad geschrieben oder falsch geschrieben
Dateiname Fallempfindlichkeit (insbesondere unter Linux)
Dateierweiterung vergessen (z. B. .txt )
Verschiedene Betriebsumgebungen führen zu Pfadproblemen
Wenn Sie PHP in der Befehlszeile ausführen, kann sich das Arbeitsverzeichnis von der Webumgebung unterscheiden
Verwenden Sie chdir () , um das aktuelle Verzeichnis zu ändern, und beeinflusst das nachfolgende Pfadurteil
Verschiedene Webserverkonfigurationen
Die Einstellungen des Root -Verzeichnisses von Apache und Nginx sind unterschiedlich, was dazu führt, dass der relative Pfad normal nicht verwendet werden kann.
Verwenden Sie __dir__ oder RealPath (), um den Dateipfad zu erstellen, um sicherzustellen, dass der Pfad korrekt ist.
Überprüfen Sie die Dateiberechtigungen mit is_readable () oder is_writable () vor der Operation.
Vermeiden Sie hartcodierte Pfade und verwenden Sie Konfigurationskonstanten, um die Pfade einheitlich zu verwalten.
Verwenden Sie die Konstante der Verzeichnis_Separator in der Pfadstiche, um die plattformübergreifende Kompatibilität zu verbessern.
Zum Beispiel:
<span><span><span class="hljs-variable">$baseDir</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span>;
</span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-variable">$baseDir</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-string">"data"</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-string">"log.txt"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_writable</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>)) {
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-string">"a"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-string">"Neue Protokollierung\n"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Datei nicht beschreibbar: "</span></span><span> . </span><span><span class="hljs-variable">$filename</span></span><span>;
}
</span></span>Der Schlüssel zur korrekten Angabe des Dateipfads von fopen () besteht darin, die Ausführungsumgebung zu verstehen, die entsprechende Pfadkonstruktionsmethode zu verwenden, den Dateistatus zu überprüfen und gute Codierungspraktiken zu befolgen. Path -Themen mögen trivial erscheinen, aber sie werden oft im Mittelpunkt des Debuggens in den tatsächlichen Projekten. Die Behandlung dieser Probleme im Voraus kann die Robustheit und Wartbarkeit des Codes erheblich verbessern.
Verwandte Tags:
fopen