GNU/Linux >> Tutoriels Linux >  >> Linux

file_put_contents ne crée pas de fichier txt

J'ai eu le même problème récemment et je suis tombé sur cette question. Malheureusement, choppyfireballs, l'OP a déclaré dans un commentaire qu'il avait trouvé sa propre solution et qu'il avait simplement accepté une réponse qui n'aidait aucun d'entre nous... Puis, après une recherche et un succès pour créer file_put_contents travailler à nouveau, j'ai décidé de partager ma solution.

Les autorisations de mes fichiers et répertoires étaient correctes pour accepter toute écriture (assurez-vous que vos répertoires sont chmod 757 cela donnera la racine et autres la subvention pour écrire des fichiers dans l'emplacement). Si cela ne fonctionne toujours pas comme pour moi, c'est que votre système est probablement SELinux (Security Enhanced Linux).

Si vous voulez vous assurer d'écrire setenforce 0 cela transformera selinux en mode permissif, exécutez à nouveau votre script, si cela fonctionne, cela signifie que le problème est bien décrit.

Dans ce cas, activez selinux setenforce 1 et essayez ls -Zl dans le répertoire où se trouve le répertoire de votre projet. cela vous donnera une ligne comme

drwx---r-x.  9  root   root  system_u:object_r:httpd_sys_content_t:s0  4096  Dec  8  00:25  project

ou quelque chose de différent mais httpd_sys_content_t si vous avez utilisé chcon pour transférer le contexte d'un répertoire à celui-ci. mais si vous n'avez pas httpd_sys_content_t ce n'est pas grave car nous devons changer le contexte de ce répertoire de toute façon.

vous devez d'abord accepter n'importe quel public_content_rw_t contextes pour écrire le fichier. Saisissez

setsebool -P httpd_anon_write on

Cela définira (P)ermanentement SELinux booléen httpd_anon_write à vrai et tout contexte doublé comme public_content_rw_t aura le droit d'écrire n'importe quel fichier dans son propre emplacement.

Maintenant, vous devez dire à SELinux que votre répertoire de projet est public_content_rw_t ou vous ne pourrez toujours pas écrire de fichiers. Saisissez :

semanage fcontext --add --type public_content_rw_t "/project(/.*)?"

et restorecon -RvF /project dire à selinux pour appliquer les spécifications ci-dessus.

Maintenant, votre répertoire est public_content_rw_t et vous devriez pouvoir écrire des fichiers.


Votre problème est probablement dû au fait qu'Apache n'est pas autorisé à écrire à l'emplacement du fichier que vous avez spécifié. Accédez à ce répertoire et vérifiez les autorisations et la propriété du groupe avec le ls commande :

cd "My working file location"
ls -l .

Il y a trois colonnes dans la sortie qui affichent les autorisations, le propriétaire et le groupe pour le répertoire. Très probablement, ils appartiennent à root et n'ont pas les autorisations pour apache pour écrire dans le répertoire.

Si c'est le cas, alors vous verrez une erreur apparaître dans votre journal apache lorsqu'il essaiera de créer le fichier. Essayez de suivre vos journaux tout en exécutant le script dans votre navigateur :

tail -f /var/log/apache2/error.log

Linux
  1. Supprimer tous les fichiers d'un répertoire dont le nom ne correspond pas à une ligne dans une liste de fichiers ?

  2. Exclure le répertoire dans Rechercher ?

  3. Pourquoi Nullglob n'est-il pas par défaut ?

  4. Écrire tout le défilement Tmux dans un fichier ?

  5. fichier :commande introuvable

Bash :Écrire dans un fichier

Tar :Extraire un seul fichier dans un répertoire sans créer de sous-dossiers ?

Erreur :Tcl.h introuvable (aucun fichier ou répertoire de ce type) ?

pip install pickle ne fonctionne pas - aucun fichier ou répertoire de ce type

xauth ne crée pas de fichier .Xauthority

shebang ou pas shebang