6
votes

Autorisations définies sur 777 et le fichier n'est toujours pas écrit

J'ai défini les autorisations de fichier sur 777, je ne peux pas écrire dans le fichier avec PHP.

Je peux clairement voir dans mon client FTP que le fichier contient 0777 autorisations et lorsque je le fais: P>

RewriteRule  ^(file).*  - [L]


7 commentaires

Avez-vous la permission d'écriture dans le dossier?


Pourriez-vous fournir la liste des répertoires du fichier? Est-il possible que vous n'êtes pas le propriétaire? En outre, il peut s'agir d'un problème de configuration du serveur FTP.


Pourquoi faites-vous l'opérateur ===?


Pouvez-vous écrire dans le fichier à l'aide d'un éditeur de texte normal ou d'une commande Terminal (Touch)?


@Daniel A. White: l'opérateur === vérifie également l'égalité de type, puisque nous savons déjà que IS_WARD renvoie un BOOL, alors il devrait être le même effet que d'utiliser ==


alors pourquoi pas is_watable ("file.txt")? 'Oui Non' ?


C'est juste mon habitude. J'essaie de faire de toutes mes affirmations conditionnelles absolument clair afin que vous puissiez voir quelle valeur et quel type de données doit être attendu simplement en regardant la condition. is_wrake renvoie le type de données booléen de sorte que c'est pourquoi j'utilise ===. L'opérateur == comprendrait 1 comme une vraie booléenne aussi.


4 Réponses :


1
votes

Vous devez chmod le fichier juste après la création.

function Doo_Chmod($path, $chmod = null)
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_file($path) === true) ? 644 : 755;

            if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
            {
                $chmod += 22;
            }
        }

        return chmod($path, octdec(intval($chmod)));
    }

    return false;
}


2 commentaires

J'ai téléchargé le fichier. Je ne l'ai pas créé à PHP.


Faites ceci: var_dump (get_current_user ()); L'utilisateur actuel est-il identique à celui de l'utilisateur FTP qui a téléchargé le fichier? Si non, c'est votre problème, vous devez le chmoder avec le client FTP, puis vous pouvez utiliser la fonction que j'ai publiée ci-dessus (ou chmods manuels pour cette affaire).



8
votes

Je suppose que Apache fonctionne comme un utilisateur / groupe différent de celui de l'utilisateur / groupe qui possède le fichier. Dans ce cas, le fichier lui-même doit être 0777 code>.

public code> ne doit être code> 0777 code> si vous envisagez d'ajouter des fichiers à la Dossier utilisant PHP. Même si le dossier lui-même n'est pas 0777 code>, si le fichier est et que le dossier a au moins 5 code> pour l'utilisateur ( lisez / exécutez code>), Vous devriez pouvoir écrire dans le fichier. P>

à la fin, votre arborescence de fichier doit ressembler à ceci: P>

> chown 0:0 file.txt


2 commentaires

En fait, il s'agit d'un environnement d'hébergement partagé, donc je n'ai pas accès à la coquille. Mais merci pour une réponse très utile quand même. J'ai décidé de modifier mon script afin qu'il utilise la base de données pour écrire les données à la place des fichiers texte. Maintenant ça marche.


Je veux juste ajouter que j'ai défini le propriétaire correct et que mes fichiers n'étaient toujours pas écrits. La cause était SELINUX comme expliqué dans cette réponse Stackoverflow.com/a/9819118/2522817



2
votes

dans OpenCart, j'ai fait face à cette erreur après avoir installé VQMod et donner toutes les autorisations nécessaires.

Après avoir recherché un peu, trouvez-le.

"Chemin de cache de mods non écrit" se réfère en réalité au dossier VQMOD lui-même. et pas le dossier de cache. xxx

dans votre répertoire racine .....


0 commentaires

-1
votes

Pas strictement lié à la question ci-dessus, je vais toujours la mettre ici pour les futurs visiteurs, alors que je suis venu ici lire le titre. De Arch Wiki :

Attributs de fichier H2>

Outre les bits de mode fichier qui contrôlent l'utilisateur et la lecture de groupe, écrivez et exécuter des autorisations, plusieurs systèmes de fichiers prennent en charge les attributs de fichiers qui permettent une personnalisation supplémentaire des opérations de fichiers admissibles. Cette La section décrit certains de ces attributs et comment travailler avec eux. P>

Avertissement strong>: Par défaut, les attributs de fichier ne sont pas conservés par CP, RSYNC, et d'autres programmes similaires. Chattr et lsattr em> p>

pour les systèmes de fichiers EXT2 et EXT3, le package E2FSPROGS contient le Programmes LSATTR et CHATTR qui énumérent et modifient les attributs d'un fichier, respectivement. Bien que certains ne soient pas honorés par tous les systèmes de fichiers, le Les attributs disponibles sont: p>

$ lsattr /etc/hosts
-------------e- /etc/hosts


0 commentaires