Stream_is_local () est une fonction intégrée PHP qui détermine si le flux spécifié pointe vers le fichier du système de fichiers local. La signature de la fonction est la suivante:
<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>
Paramètres : $ nom de fichier est le nom de fichier à vérifier, qui peut être un chemin de fichier ou une URL.
Valeur de retour : renvoie true si le flux donné est un fichier local, sinon faux .
Cette fonction est souvent utilisée pour distinguer les fichiers locaux des fichiers distants (tels que les fichiers accessibles via FTP ou HTTP). Avant d'effectuer des opérations de fichiers, assurez-vous que les fichiers locaux sont opérés.
Bien que Stream_is_Local () soit une fonction très simple, dans le développement réel, différents formats de chemin peuvent conduire à des résultats inattendus. Vous trouverez ci-dessous quelques pièges courants que les développeurs ont besoin de prêter une attention particulière lors de leur utilisation.
Lorsque Stream_is_Local () est appelé, le chemin peut être un chemin de système de fichiers local ou une URL. Si un chemin avec un préfixe de protocole (tel que http: // ou ftp: // ), Stream_is_local () déterminera si le chemin pointe vers le système de fichiers local, mais s'il s'agit d'une URL distante, elle renverra faux .
Points : Vous pouvez penser à tort que Stream_is_Local () ne détermine que s'il s'agit d'un fichier local basé sur le format de chemin et ignore la partie du protocole.
Solution : assurez-vous que le chemin entrant est un chemin de fichier local correct, pas une URL distante. Si vous passez une URL, vous devez le traiter et porter des jugements appropriés en fonction de vos besoins.
<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">// Retour icifalse</span></span><span>
}
</span></span>
La fonction PHP Stream_IS_Local () ne renvoiera pas True , ce qui peut entraîner une erreur de jugement si le chemin du chemin pointe vers le système de fichiers local, mais si le format de chemin ne répond pas aux attentes, telles qu'aucun protocole ne contenant le fichier (par exemple: fichier: // ).
Point de stand : si le protocole de fichier: // n'est pas spécifié dans le chemin du fichier, la fonction peut renvoyer un résultat incorrect.
Solution : lors du traitement des chemins de fichier locaux, il est préférable de toujours spécifier le fichier: // protocole explicitement pour s'assurer que la fonction peut reconnaître correctement le fichier local.
<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">// Peut revenirfalse</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">// Plus clair</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">// Retour icitrue</span></span><span>
}
</span></span>
Le format et le séparateur des chemins de fichier varieront en différents systèmes d'exploitation. Surtout entre les systèmes Windows et Unix (Linux, MacOS), les chemins sont gérés différemment. Windows utilise des barreaux ( \ ) comme séparateurs de chemin, tandis que les systèmes de type UNIX utilisent des avantages ( / ). La fonction Stream_is_Local () jugera en fonction du format de chemin du système d'exploitation, mais vous devez vous assurer que le format de chemin est correct.
Pit de pit : Dans Windows Systems, le chemin peut avoir une barre arrière, ce qui a fait que Stream_is_local () ne reconnaît pas correctement le fichier local.
Solution : assurez-vous que le délimiteur dans le chemin est compatible avec le système d'exploitation actuel ou utilisez la constante Directory_separator pour s'adapter automatiquement sur les systèmes Windows.
<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">// WindowsChemin de bar</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">// gentilUnixPath de slash vers l'avant</span></span><span>
</span></span>
La fonction Stream_is_Local () a différentes façons de gérer les chemins relatifs et absolus. Si vous passez un chemin relatif, PHP le combine avec le répertoire de travail actuel pour générer le chemin réel. Cela peut entraîner des erreurs de jugement, en particulier dans différents environnements d'exécution.
Point de stand : Lors de l'utilisation de chemins relatifs, Stream_is_local () peut ne pas être en mesure de juger correctement le fichier local. Il peut résoudre le chemin en fonction du mauvais répertoire de travail actuel.
Solution : utilisez toujours des chemins absolus pour le jugement si possible. Vous pouvez convertir des chemins relatifs en chemins absolus à travers la fonction realPath () .
<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">// Obtenez le chemin absolu</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">// Juger correctement les dossiers locaux</span></span><span>
}
</span></span>
Stream_is_local () détermine si le chemin de flux pointe vers le fichier local, et non dans le répertoire. Si vous passez un chemin de répertoire au lieu d'un chemin de fichier, la fonction renvoie false . Cela peut entraîner une confusion pour les scénarios où vous souhaitez vérifier si un répertoire se trouve sur le système de fichiers local.
Point de stand : Si le chemin du chemin vers un répertoire, pas un fichier, Stream_is_local () renvoie False , ce qui peut ne pas être comme prévu.
Solution : lorsque vous utilisez Stream_is_local () , assurez-vous que le chemin entrant pointe vers un fichier, pas un répertoire. Si vous devez juger le répertoire, vous pouvez utiliser d'autres fonctions, telles que IS_DIR () .
<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">// Reviendra icifalse,Parce que c'est un répertoire</span></span><span>
}
</span></span>