L'un des problèmes les plus courants consiste à rencontrer des erreurs d'autorisation de fichier lors de l'ouverture d'un fichier en mode écriture. Si le script PHP n'a pas d'autorisation suffisante pour écrire dans le fichier spécifié, FOPEN reviendra faux .
Le fichier cible n'a pas d'autorisations d'écriture.
Le répertoire cible n'a pas d'autorisations d'écriture.
Les utilisateurs du processus PHP n'ont pas d'autorisations suffisantes pour accéder au fichier.
Pour vous assurer que le fichier ou le répertoire a des autorisations d'écriture appropriées, vous pouvez définir les autorisations d'écriture du fichier via la commande chmod :
chmod 666 /path/to/your/file
Si le répertoire n'a pas d'autorisations d'écriture, vous pouvez également définir des autorisations d'écriture pour le répertoire:
chmod 777 /path/to/your/directory
Si votre programme PHP s'exécute sous un utilisateur restreint, vous pouvez envisager de modifier la propriété du fichier dans cet utilisateur et d'utiliser la commande chown .
Lors de l'ouverture d'un fichier à l'aide de la fonction FOPEN , si le chemin de fichier spécifié n'existe pas ou si le chemin est faux, PHP renvoie false et que le fichier ne sera pas créé (sauf en utilisant W ou un mode).
Le chemin du fichier fourni est mauvais ou mal orthographié.
Le répertoire où réside le fichier n'existe pas.
Avant d'appeler FOPEN , vous pouvez utiliser File_exists ou IS_DIR pour vérifier si le fichier ou le répertoire existe:
if (!file_exists($file)) {
echo "Le fichier n'existe pas";
}
Assurez-vous que le chemin est correct, en particulier entre les chemins relatifs et absolus. Essayez d'utiliser des chemins absolus pour éviter les problèmes de chemin.
Si le fichier est verrouillé par un autre processus ou programme, FOPEN de PHP peut échouer, surtout lorsqu'il existe de nombreuses opérations simultanées. À ce stade, FOPEN reviendra faux et l'accès au fichier ne peut pas être obtenu.
Le fichier est occupé par d'autres processus ou utilisateurs.
Le mécanisme de verrouillage des fichiers du serveur (tel que le verrouillage du système de fichiers).
Vous pouvez utiliser la fonction Flock pour verrouiller le fichier pour vous assurer que le fichier ne sera pas occupé par d'autres processus pendant le fonctionnement. L'exemple de code est le suivant:
$file = fopen('file.txt', 'w');
if (flock($file, LOCK_EX)) { // Obtenez un verrouillage exclusif
fwrite($file, "Écrire du contenu");
flock($file, LOCK_UN); // Relâchez le verrouillage
} else {
echo "Impossible de verrouiller les fichiers";
}
fclose($file);
Assurez-vous que les autres processus ne tiennent pas les verrous pendant longtemps lors de l'exploitation des fichiers et évitez les fichiers bloqués.
Lorsque vous utilisez FOPEN , une mauvaise sélection de modes peut également causer des problèmes. Par exemple, essayez d'ouvrir un fichier en lecture seule en mode écriture ou d'ouvrir un fichier existant en mode W , qui effacera le contenu du fichier.
L'utilisation du mode d'ouverture de fichiers inapproprié peut entraîner une perte de données inattendue.
Le mauvais mode (comme le mode R ) a été utilisé pour ouvrir le fichier qui aurait dû être écrit.
Lorsque vous utilisez FOPEN , assurez-vous de sélectionner le mode d'ouverture correct:
Le mode W effacera le fichier et l'écrira.
Un mode ajoutera du contenu à la fin du fichier.
Les modes W + et A + permettent des opérations de lecture et d'écriture, mais le premier efface le contenu du fichier.
Lorsque vous ne savez pas si le contenu du fichier existe, vous pouvez utiliser le mode A + pour une écriture sûre.
Si vous essayez d'écrire dans des fichiers très volumineux, en particulier dans le cas d'une mémoire insuffisante, vous pouvez rencontrer des restrictions sur le débordement de la mémoire ou le téléchargement de fichiers PHP.
Les limites de mémoire dans le serveur ou la configuration PHP sont trop faibles.
La limite de configuration de PHP est dépassée lors de l'écriture de fichiers volumineux.
Ajuster la limite de mémoire et la taille maximale de téléchargement / écriture dans le fichier php.ini :
memory_limit = 256M
post_max_size = 50M
upload_max_filesize = 50M
Pour les écritures de fichiers importantes, envisagez d'utiliser le streaming (Linear Writs ou Block Writes) pour éviter de charger trop de contenu à la fois.
Dans certains cas particuliers, le système de fichiers lui-même peut avoir des problèmes, tels que l'espace disque insuffisant, la corruption du système de fichiers, etc. Ces problèmes entraîneront que FOPEN ouvrira le fichier normalement.
Espace disque insuffisant.
Système de fichiers Corrupter ou Lire Erreur.
Vérifiez régulièrement l'espace disque du serveur pour assurer la santé du système de fichiers.
Avant l'opération, utilisez disk_free_space () pour vérifier l'espace du disque pour éviter les échecs d'écriture en raison du disque complet:
if (disk_free_space("/") < 1000000) { // Moins que1MB
echo "Espace disque insuffisant";
}
Lors de l'écriture dans un fichier, la position du pointeur de fichier affecte le résultat de l'écriture. Si le pointeur de fichier n'est pas au bon emplacement, il peut entraîner l'échec ou les données d'écriture.
Le pointeur de fichier n'est pas en position de lecture / écriture correcte.
Utilisez FTell pour vérifier la position du pointeur de fichier.
Utilisez Fseek pour ajuster la position du pointeur de fichier en cas de besoin.
Étiquettes associées:
fopen