Ceci est une question sur la configuration de mon système et sur la façon dont apache/php peut être affecté par cela. Le code qui fonctionnait sur mon serveur de développement échouait lorsque je passais en production et voici le problème que j'ai résolu. Je veux utiliser file_put_contents dans php pour simplement créer un fichier sur mon système. Voici le code très simple que j'utilise:file_put_contents php permissions
print file_put_contents("testfile.txt","this is my test")?"made file":"failed";
Aucune erreur n'est levée mais elle affiche toujours "Échec". Quand je l'exécute dans le répertoire normal, aucun fichier n'est créé, mais quand je le déplace dans un répertoire avec 777 permission, il crée le fichier mais imprime toujours "échoué" et n'enregistre rien. Si je change le fichier php lui-même pour avoir l'autorisation 777, rien ne change. Si je change le fichier cible (testtext.txt) pour avoir l'autorisation 777, rien ne change.
Lorsque je change le propriétaire du fichier php pour qu'il soit le même que le fichier testfile.txt créé, rien ne change. Quand j'essaie des chemins relatifs ou absolus, rien ne change. Pour une raison quelconque, je peux avoir php faire le fichier mais il est toujours vide et en utilisant file_put_contents je ne peux rien écrire.
Le fichier créé est dans le propriétaire et le groupe de 'www-data' alors que j'agis comme root si cela aide. Que puis-je faire pour que cela fonctionne? Je pense que ma version de php utilise l'extension suhosin si cela peut avoir quelque chose à voir avec ça (ou si vous pensez qu'il y a un moyen de résoudre ce problème dans les fichiers php ou suhosin ini, je peux le faire aussi). Je chasse ça depuis des heures depuis quelques jours.
EDIT: mises à jour basées sur les commentaires ci-dessous. Lorsque je l'exécute en mode CLI cela fonctionne mais comme je dois le faire fonctionner avec Apache, comment puis-je utiliser ce fait? Est-ce que cela nous dit quelque chose sur où ou quoi arrête l'écriture du fichier? De plus, l'appel file_put_contents retourne effectivement "false" et non nul.
a l'utilisateur www-data + w et + x droits sur le dossier qui contiendra ce fichier? pouvez-vous su comme www-data et essayez d'écrire dans ce fichier? – jolivier
file_put_contents() renvoie le nombre d'octets écrits en écriture réussie. Si c'est la création d'un fichier vide, c'est vraisemblablement 0 octets, ce qui donnerait une fausse note. C'est pourquoi vous voyez le message "échoué". Essayez la route 'fopen()'/'fwrite()' à la place. Je ne prévois aucun changement mais bon à vérifier. – Utkanos
Le script fonctionne-t-il lorsque vous l'exécutez CLI? – Tucker