stream_is_local () ist eine PHP-integrierte Funktion, die bestimmt, ob der angegebene Stream auf die Datei des lokalen Dateisystems zeigt. Die Funktionssignatur ist wie folgt:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">stream_is_local</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span>)
</span></span>
Parameter : $ Dateiname ist der Dateiname, der überprüft wird, was ein Dateipfad oder eine URL sein kann.
Rückgabewert : Rückgabe true Wenn der angegebene Stream eine lokale Datei ist, ansonsten falsch .
Diese Funktion wird häufig verwendet, um lokale Dateien von Remotedateien zu unterscheiden (z. B. über FTP oder HTTP zugegriffene Dateien). Stellen Sie vor der Ausführung von Dateivorgängen sicher, dass die lokalen Dateien betrieben werden.
Obwohl Stream_is_local () eine sehr einfache Funktion ist, können in der tatsächlichen Entwicklung unterschiedliche Pfadformate zu unerwarteten Ergebnissen führen. Im Folgenden finden Sie einige häufige Fallstricke, die Entwickler bei der Verwendung besonderer Aufmerksamkeit schenken müssen.
Wenn Stream_is_local () aufgerufen wird, kann der Pfad ein lokaler Dateisystempfad oder eine URL sein. Wenn ein Pfad mit einem Protokollpräfix (z. B. http: // oder ftp: // ), stream_is_local () bestimmt, ob der Pfad in das lokale Dateisystem verweist. Wenn es sich jedoch um eine Remote -URL handelt, wird dies falsch zurückgegeben.
Punkte : Sie können fälschlicherweise glauben, dass Stream_is_local () nur feststellt, ob es sich um eine lokale Datei basiert, die auf dem Pfadformat basiert, und den Protokollteil ignoriert.
Problemumgehung : Stellen Sie sicher, dass der eingehende Pfad ein korrekter lokaler Dateipfad ist, keine Remote -URL. Wenn Sie eine URL übergeben, müssen Sie sie verarbeiten und anhand Ihrer Anforderungen entsprechende Urteile fällen.
<span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">"http://example.com/file.txt"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">stream_is_local</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>)) {
</span><span><span class="hljs-comment">// Kehre hierher zurückfalse</span></span><span>
}
</span></span>
Die Funktion von PHPs stream_is_local () wird nur true zurückgegeben, was zu einem Urteilsfehler führen kann, wenn der Pfad auf das lokale Dateisystem zeigt. Wenn das Pfadformat jedoch nicht den Erwartungen erfüllt, z. B. kein Protokoll, das die Datei enthält (z. B.: Datei: // ).
Pitpunkt : Wenn die Datei: // Protokoll im Dateipfad nicht angegeben ist, kann die Funktion ein falsches Ergebnis zurückgeben.
Problemumgehung : Bei der Verarbeitung lokaler Dateipfade ist es am besten, die Datei immer ausdrücklich anzugeben: // Protokoll explizit sicherstellen, dass die Funktion die lokale Datei korrekt erkennen kann.
<span><span><span class="hljs-variable">$localPath</span></span><span> = </span><span><span class="hljs-string">"/var/www/html/test.txt"</span></span><span>; </span><span><span class="hljs-comment">// Kann zurückkehrenfalse</span></span><span>
</span><span><span class="hljs-variable">$localPathWithProtocol</span></span><span> = </span><span><span class="hljs-string">"file://<span class="hljs-subst">$localPath</span></span></span><span>"; </span><span><span class="hljs-comment">// Klarer</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">stream_is_local</span></span><span>(</span><span><span class="hljs-variable">$localPathWithProtocol</span></span><span>)) {
</span><span><span class="hljs-comment">// Kehre hierher zurücktrue</span></span><span>
}
</span></span>
Das Format und das Trennzeichen der Dateipfade variieren in verschiedenen Betriebssystemen. Insbesondere zwischen Windows und Unix-ähnlichen (Linux-, macOS) -Systemen werden die Pfade unterschiedlich behandelt. Windows verwendet Backslashes ( \ ) als Pfadabscheider, während UNIX-ähnliche Systeme vorwärts ( / ) verwenden. Die Funktion stream_is_local () beurteilt basierend auf dem Pfadformat des Betriebssystems. Sie müssen jedoch sicherstellen, dass das Pfadformat korrekt ist.
Grubenpunkt : In Windows -Systemen kann der Pfad einen Backslash haben, der dazu führt, dass Stream_is_local () die lokale Datei nicht korrekt erkennt.
Problemumgehung : Stellen Sie sicher, dass der Trennzeichen im Pfad mit dem aktuellen Betriebssystem kompatibel ist, oder verwenden Sie die Konstante von Directory_Separator, um sich automatisch an Windows -Systemen anzupassen.
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">"C:\\Users\\test\\file.txt"</span></span><span>; </span><span><span class="hljs-comment">// WindowsBackslash -Pfad</span></span><span>
</span><span><span class="hljs-variable">$pathLinux</span></span><span> = </span><span><span class="hljs-string">"/home/user/file.txt"</span></span><span>; </span><span><span class="hljs-comment">// ArtUnixSlash -Pfad vorwärts</span></span><span>
</span></span>
Die Funktion stream_is_local () hat unterschiedliche Möglichkeiten, relative und absolute Pfade zu behandeln. Wenn Sie einen relativen Pfad bestehen, kombiniert PHP ihn mit dem aktuellen Arbeitsverzeichnis, um den tatsächlichen Pfad zu generieren. Dies kann zu Urteilsfehlern führen, insbesondere in verschiedenen Ausführungsumgebungen.
Grubenpunkt : Wenn Sie relative Pfade verwenden, kann Stream_is_local () die lokale Datei möglicherweise nicht korrekt beurteilen. Es kann den Pfad basierend auf dem falschen aktuellen Arbeitsverzeichnis beheben.
Lösung : Verwenden Sie nach Möglichkeit immer absolute Pfade für das Urteilsvermögen. Sie können relative Pfade durch RealPath () -Funktion in absolute Pfade konvertieren.
<span><span><span class="hljs-variable">$relativePath</span></span><span> = </span><span><span class="hljs-string">"./file.txt"</span></span><span>;
</span><span><span class="hljs-variable">$absolutePath</span></span><span> = </span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-variable">$relativePath</span></span><span>); </span><span><span class="hljs-comment">// Holen Sie sich den absoluten Weg</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">stream_is_local</span></span><span>(</span><span><span class="hljs-variable">$absolutePath</span></span><span>)) {
</span><span><span class="hljs-comment">// Richtige lokale Akten beurteilen</span></span><span>
}
</span></span>
stream_is_local () bestimmt, ob der Stream -Pfad in die lokale Datei zeigt, nicht in das Verzeichnis. Wenn Sie einen Verzeichnispfad anstelle eines Dateipfads übergeben, gibt die Funktion false zurück. Dies kann zu Verwirrung für Szenarien führen, in denen Sie überprüfen möchten, ob sich ein Verzeichnis im lokalen Dateisystem befindet.
Pitspunkt : Wenn der Pfad auf ein Verzeichnis zeigt, keine Datei, stream_is_local () gibt falsch zurück, was möglicherweise nicht wie erwartet ist.
Problemumgehung : Stellen Sie bei Verwendung von Stream_is_local () sicher, dass der eingehende Pfad auf eine Datei und nicht auf ein Verzeichnis hinweist. Wenn Sie das Verzeichnis beurteilen müssen, können Sie andere Funktionen wie is_dir () verwenden.
<span><span><span class="hljs-variable">$dirPath</span></span><span> = </span><span><span class="hljs-string">"/var/www/html"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">stream_is_local</span></span><span>(</span><span><span class="hljs-variable">$dirPath</span></span><span>)) {
</span><span><span class="hljs-comment">// Wird hierher zurückkehrenfalse,Weil es ein Verzeichnis ist</span></span><span>
}
</span></span>