Comment déboguer les problèmes shell_exec
OK, nous avons ici un problème: quelque chose fonctionne dans le terminal et ne fonctionne pas dans shell_exec de php (ou exec, spawn, peu importe). Pensons: quelle est la différence entre vous et php? En voici trois:
PHP est exécuté à partir des règles du serveur HTTP
En effet, votre terminal fonctionne depuis l' yourname
utilisateur et php est exécuté depuis www-data
. Donc, la première idée est d'ouvrir le terminal depuis l' www-data
utilisateur et d'essayer la même commande. Donc....
- Ouvrez le
/etc/passwd
fichier, recherchez la ligne avec l' www-data
utilisateur et changez son shell de connexion (le dernier) de /bin/false
(ou autre) en/bin/bash
.
www-data
Terminal ouvert :su www-data
- Essayez php -v ou tout ce que vous ne pouvez pas exécuter à partir de php. Si cela ne fonctionne pas - Vous verrez de beaux journaux et pourrez déboguer le problème.
- N'oubliez pas de réparer le
/etc/passwd
fichier pendant que vous avez terminé
PHP est exécuté à partir de PHP .
PHP est enogh paranoïaque et il y a beaucoup d'options dans la configuration apache / nginx et php.ini qui peuvent briser votre tentative.
C'est un peu plus compliqué à déboguer. Il y a deux options ici:
Activez les journaux dans le navigateur et voyez le problème. Modifiez votre php.ini
, activez display_errors
et tous les autres indicateurs pour voir les erreurs dans le navigateur. Ils Vous pouvez les lire et les déboguer.
Obtenez www-data
le shell (voir la première section) et exécutez quelque chose comme
echo '<?php shell_exec("php -v"); ?>' | php
qui exécutera le même code php dans la console et vous pourrez voir les erreurs et le débogage.
PHP est exécuté à partir de SELinux / apparmor
Selinux et apparmor sont des éléments de sécurité qui interdisent aux applications d'effectuer des actions spécifiques (par exemple, la génération d'autres applications ou certaines autres applications spécifiques). Il est peut-être activé sur votre serveur.
Pour vérifier - désactivez selinux / apparmor et vérifiez si le problème existe.
Pour corriger - lisez le manuel approprié et corrigez les règles permissives d'écriture pour votre cas.