Retourne TRUE si le fichier existe et est accessible en écriture. L'argument filename peut être un nom de répertoire vous permettant de vérifier si un répertoire est accessible en écriture.
Le truc, c'est que vous ne pouvez pas spécifier un fichier qui n'existe pas encore dans le dossier que vous voulez vraiment tester - il suffit de spécifier le dossier.
Vous avez peut-être l'envoi d'un chemin de fichier complet à la is_writable() fonction. is_writable() retourne false si le fichier n'existe pas déjà dans le répertoire. Vous devez vérifier que le répertoire lui-même avec le nom de fichier supprimé, si c'est le cas. Si vous le faites, is_writable correctement vous dire si le répertoire est accessible en écriture ou non. Si $file contient votre chemin de fichier ce faire:
$file_directory = dirname($file);
Ensuite utiliser is_writable($file_directory) pour déterminer si le dossier est accessible en écriture.
J'ai écrit un petit script (je l'appelle isWritable.php) qui détecte tous les répertoires dans le même répertoire que le script est en et écrit sur la page que chaque répertoire est accessible en écriture ou non. Espérons que cette aide.
<?php
//isWritable.php detects all directories in the same directory the script is in//and writes to the page whether each directory is writable or not.
$dirs = array_filter(glob('*'),'is_dir');foreach($dirs as $dir){if(is_writable($dir)){
echo $dir.' is writable.<br>';}else{
echo $dir.' is not writable. Permissions may have to be adjusted.<br>';}}?>
Un peu comme un système de stat, mais en PHP. Ce que vous voulez faire est de vérifier les valeur de mode, un peu comme vous le feriez de toute autre appel à stat dans d'autres langues (I. E. C/C++).
créer un fichier avec file_put_contents() et vérifier la valeur de retour, si elle est positive (nombre d'écrits en Octets), alors vous pouvez aller de l'avant et faire ce que vous avez à faire, si elle est FAUSSE, alors il n'est pas accessible en écriture
$is_writable = file_put_contents('directory/dummy.txt',"hello");if($is_writable >0) echo "yes directory it is writable";else echo "NO directory it is not writable";
vous pouvez ensuite supprimer le fichier fictif en utilisant unlink()
unlink('directory/dummy.txt');
Bien que cette technique fonctionne, il n'est certainement pas la méthode recommandée. Opérations de système de fichiers sont relativement lente et engager beaucoup de frais généraux, de sorte que la création d'un fichier factice et puis en supprimant/dissociation, c'est beaucoup plus lent que la plupart des autres méthodes.
Oui, il ne fonctionne pas pour les dossiers....
c'est le code 🙂
dirname($new_file_name)
, c'est plus simple que ce que j'allais faire. J'allais utiliserpathinfo($new_file_name,PATHINFO_DIRNAME)
. Merci.être plus précis pour le propriétaire/groupe/monde
la paix...
0777
.Vous avez peut-être l'envoi d'un chemin de fichier complet à la
is_writable()
fonction.is_writable()
retourne false si le fichier n'existe pas déjà dans le répertoire. Vous devez vérifier que le répertoire lui-même avec le nom de fichier supprimé, si c'est le cas. Si vous le faites,is_writable
correctement vous dire si le répertoire est accessible en écriture ou non. Si$file
contient votre chemin de fichier ce faire:Ensuite utiliser
is_writable($file_directory)
pour déterminer si le dossier est accessible en écriture.J'espère que cela aide quelqu'un.
Selon la documentation pour is_writable, il devrait fonctionner - mais vous avez dit "dossier", ce qui pourrait être un problème Windows. Les commentaires suggèrent une solution de contournement.
(Un précipité de lecture plus tôt m'a fait penser que les barres obliques sont importants, mais qui s'est avéré être spécifiques à ce travail autour).
J'ai écrit un petit script (je l'appelle isWritable.php) qui détecte tous les répertoires dans le même répertoire que le script est en et écrit sur la page que chaque répertoire est accessible en écriture ou non. Espérons que cette aide.
stat()
Un peu comme un système de stat, mais en PHP. Ce que vous voulez faire est de vérifier les valeur de mode, un peu comme vous le feriez de toute autre appel à stat dans d'autres langues (I. E. C/C++).
http://us2.php.net/stat
Selon le manuel PHP is_writable devrait fonctionner sur les répertoires.
c'est comment je le fais:
créer un fichier avec
file_put_contents()
et vérifier la valeur de retour, si elle est positive (nombre d'écrits en Octets), alors vous pouvez aller de l'avant et faire ce que vous avez à faire, si elle est FAUSSE, alors il n'est pas accessible en écriturevous pouvez ensuite supprimer le fichier fictif en utilisant unlink()
Dans mon cas,
is_writable
retourné vrai, mais lorsqu'on l'a essayé d'écrire le fichier - une erreur s'est produite.Ce code permet de vérifier si le
$dir
existe et est accessible en écriture: