Erreur de débogage « Échec de l'ouverture du flux : aucun fichier ou répertoire de ce type » dans les scripts PHP
L'exécution de scripts PHP entraîne souvent des erreurs ou des avertissements tels que :
Failed to open stream : No such file or directory.
Copier après la connexion
Pour identifier efficacement la cause sous-jacente, voici une liste de contrôle complète :
1. Vérifier l'exactitude du chemin du fichier
- Vérifiez manuellement les fautes de frappe dans le chemin du fichier.
- Créez une variable pour le chemin, faites-la écho et copiez-la pour vérifier manuellement l'accessibilité dans un terminal.
2. Déterminer les considérations relatives aux chemins relatifs et absolus
- Les chemins absolus commencent par "/" et font référence au répertoire racine du serveur.
- Les chemins relatifs sont calculés en fonction du répertoire de travail actuel.
- Utilisez toujours des chemins de fichiers absolus pour des raisons de portabilité et de robustesse.
- Utiliser DIR constante magique ou créez une constante SITE_ROOT pour générer dynamiquement des chemins absolus.
3. Vérifiez le chemin d'inclusion
- Les fichiers peuvent être inclus via le chemin d'inclusion, en particulier pour les bibliothèques ou les frameworks.
- Vérifiez le chemin d'inclusion à l'aide de get_include_path().
- Ajoutez les éléments nécessaires dossiers au chemin en utilisant set_include_path().
4. Vérifiez l'accès du serveur au fichier
- Assurez-vous que l'utilisateur exécutant le processus serveur est autorisé à accéder au fichier.
- Vérifiez les détails de l'utilisateur à l'aide de posix_getpwuid et les autorisations du fichier à l'aide de "ls -l" dans le terminal.
5. Inspecter les paramètres PHP
- open_basedir : restreint l'accès à des répertoires spécifiques. Vérifiez-le en utilisant phpinfo() ou ini_get("open_basedir").
- safe_mode : Ancien paramètre pouvant imposer des restrictions. Mettez à niveau vers une version PHP prise en charge si vous êtes toujours utilisé.
- allow_url_fopen et allow_url_include : pertinents pour accéder aux fichiers sur un réseau, pas localement. Vérifiez en utilisant ini_get().
Coins de cas
1. Inclusion de bibliothèque avec dépendance du chemin d'inclusion
- Les bibliothèques peuvent inclure d'autres fichiers en supposant que le chemin est déjà dans le chemin d'inclusion.
- Ajoutez le répertoire nécessaire à votre chemin d'inclusion.
2. Influence de SELinux
- Vérifiez si SELinux est activé et provoque un refus d'accès aux fichiers.
- Désactivez SELinux temporairement pour isoler la cause.
- Configurez SELinux pour accorder un accès approprié aux fichiers .
3. Problème de cache Symfony
- Dans Symfony, le téléchargement sur un serveur peut échouer en raison d'un problème de cache.
- Videz le cache à l'aide de la commande de console "cache:clear".
4. Caractères non-ASCII dans les fichiers Zip
- Les caractères non-ASCII dans les noms de fichiers zip peuvent provoquer l'erreur.
- Encodez les noms de fichiers à l'aide de utf8_decode() avant de créer le fichier cible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!