Voici la commande que j'ai essayé d'exécuter, sans succès:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess');
Quand vous ajoutez un die () à la fin, il y a une erreur:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!');
Pour l'instruction exec () ci-dessus, un problème d'autorisations est à l'origine de l'erreur, mais PHP ne l'affiche pas. Comment affichez-vous de PHP quelle erreur se produit?
Vous pouvez recevoir le résultat de la fonction exec en transmettant un second paramètre facultatif:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output);
var_dump($output);
Le paramètre $ output ne semble pas fonctionner si le programme appelant génère une sortie vers STDERR.
Une meilleure solution consiste à rediriger la sortie de exec vers un fichier, puis à afficher le contenu de ce fichier en cas d'erreur.
Si $ cmd détient la commande exec, ajoutez quelque chose comme ceci:
$cmd.=" > $error_log 2>&1"
Ensuite, examinez le contenu de la spécification de fichier dans $ error_log pour obtenir des informations détaillées sur la raison de l'échec de la commande.
Notez également que si vous supprimez ceci avec un & à la fin de la commande, une vérification immédiate du contenu de $ error_log peut ne pas révéler les informations du journal - le script peut vérifier/traiter le fichier avant la fin du système d'exploitation.
Le code suivant va capturer à la fois la sortie normale (de StdOut) et la sortie d'erreur (de SdtErr).
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess' . '2>&1',$output);
var_dump($output);
cela a fonctionné pour moi: Ajoutez 2> & 1 à la fin de votre commande.
Vu ici: php exec () ne renvoie pas de message d'erreur lors de l'exécution de la commande svn
À votre santé
Cela a fonctionné pour moi dans plusieurs scénarios:
ob_start();
exec($cmd . " 2>&1", $output);
$result = ob_get_contents();
ob_end_clean();
var_dump($result);
L'espace entre "2 est important
Si vous ne trouvez pas l'erreur dans ce deuxième paramètre, vous pouvez rechercher le journal des erreurs d'Apache, par exemple dans Ubuntu Server 12.10, via la commande $ tail /var/log/Apache2/error.log. J'exécutais un script python. de php, dont l'erreur a été seulement imprimée là, et donc j'ai pu le diagnostiquer. Meilleures salutations.
Ceci n'est pas une réponse directe à votre question, mais est très utile si vous voulez savoir ce qui s'est passé exactement avec le code d'erreur renvoyé.
Si code d'erreur ($ res), renvoyé par la commande:
exec('command', $out, $res);
était compris entre 1-2, 126-165, 255, par rapport au résultat renvoyé par Shell (par exemple, BASH) invoquée à partir de PHP (pour exécuter votre commande). Si le code renvoyé ne se trouve pas dans cette plage, il a été renvoyé par votre commande (pas Shell).
Voir (pour les descriptions des codes d'erreur BASH)
https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/exitcodes.html