Ok, après avoir tapé la tête pendant des heures, j'ai décidé de demander de l'aide. J'ai un Windows Server 2008 exécutant Apache 2.4 et PHP 7.1. Mon application doit exécuter un script PHP sur le serveur lorsque l'utilisateur clique sur un bouton du navigateur.PHP exec() sous Apache renvoie null et 255 lors de l'exécution d'un script
Cela fonctionne très bien sur mon bureau avec Windows 10. Toutefois, sur le serveur, exec() retourne « null » et un code de sortie de 255.
Je lis tout ce que je pouvais trouver sur les questions exec() et j'ai essayé ce qui suit:
exec("C:\\PHP7\\php.exe -v", $output);
J'ai obtenu la bonne réponse contenant les informations de version de PHP.
Alors j'ai décidé de vérifier les fichiers de configuration:
exec("C:\\PHP7\\php.exe --ini", $output);
Tous les fichiers étaient en place.
Puis j'ai décidé d'effectuer une vérification de syntaxe sur mon script:
exec("C:\\PHP7\\php.exe -d display_errors=1 -l C:\\Apache24\\htdocs\\script.php", $output);
Aucune erreur n'a été trouvé.
Enfin j'ai décidé de vérifier le compte utilisateur:
exec("whoami", $output);
obtenu "NT AUTHORITY \ SYSTEM" comme prévu. Pour vous assurer que le script a pu exécuter sous le compte SYSTEM je Sysinternals PsExec:
psexec -s C:\PHP7\php.exe C:\Apache24\htdocs\script.php
Tout se déroule bien. En d'autres termes, le script ne présente aucun problème lorsqu'il est exécuté à partir de la ligne de commande, que ce soit sous un compte d'utilisateur ou dans le compte système. J'ai également prouvé que PHP est correctement appelé par exec().
Alors, je décidé de vérifier les erreurs « cachées » dans mon code en ajoutant les deux lignes suivantes au début du script:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Mais, pas de joie. Et je n'ai plus d'idées.
Une bonne âme peut-elle m'aider?
Merci beaucoup,
Miguel.