J'essaie d'exécuter un fichier .sh depuis php . J'ai essayé de le faire avec Shell_exec (). mais sa ne fonctionne pas J'ai renvoyé de nombreuses questions liées à cela dans la pile de débordement, mais ne pouvait pas résoudre
mon code php est (web.php)
<?php
echo Shell_exec('/var/www/project/xxe.sh');
echo "done";
?>
seulement fait est imprimé. mais cela fonctionne depuis le terminal (php /var/www/project/web.php)
Dans xxe.sh j'appelle un fichier python
python vin.py
J'ai également changé l'autorisation de fichier à 777 pour les deux fichiers .sh n .py S'il vous plaît aide
Si cela fonctionne bien dans Shell, je pense qu’Apache est chrooté. Donc, php ne peut pas trouver/var/...
Ou l'utilisateur de l'utilisateur httpd n'a pas l'autorisation d'entrer/var/...
Si vous êtes bon en PHP. Open dir/var/... Et readdir () et check dir existent et vérifient que le fichier existe.
Cette question pourrait vous aider. numérisation/accueil/avec opendir ()
Si vous dites que cela fonctionne sur le terminal et non sur Apache, le fichier php.ini
d'Apache peut désactiver l'utilisation de Shell_exec()
.
Voir http://www.php.net/manual/fr/ini.core.php#ini.disable-functions
Le fichier php.ini
de votre Apache peut ressembler à quelque chose comme
disable_functions=exec,passthru,Shell_exec,system,proc_open,popen
Supprimez Shell_exec
de cette liste et redémarrez le serveur Web, bien que cela pose un risque pour la sécurité et que je ne le recommande pas.
Tout en essayant d'exécuter un script déclenché par github post-receive webhook.
Voici où se trouve mon répertoire de projet (repo git cloné):
/var/www/html/my-repo
Je crée un script dans le répertoire ci-dessus appelé webhook.php:
<?php
#webhook.php
$cmd = Shell_exec("git pull 2>&1");
#for debugging
echo $cmd;
?>
Exécutez la commande suivante dans/var/www/html
Sudo chown www-data:www-data -R my-repo/
Testez-le en allant sur http://www.myserver.com/my-repo/webhook.php
Ajoutez le chemin à votre script pour github webhooks.
Le problème est généralement que lorsque vous exécutez du code à partir de php, il est exécuté en tant qu'utilisateur des serveurs Web www-data dans beaucoup de distributions Linux. Normalement, cet utilisateur n’a pas d’environnement configuré, et à cause de cela, pas de PATH. En utilisant des chemins complets dans vos fichiers, vous pouvez généralement surmonter cela.
xxe.sh
/usr/bin/python /path/to/script/vin.py
Je suis coincé dans ce problème depuis plusieurs heures.
J'ai réfléchi à une solution . 1. déplacez votre script dans un fichier python "script.py" et placez ce fichier à la racine de votre serveur . 2. Shell_exec ("script python.py");
De toute façon, ça marche pour moi.
Sur mon hôte, je devais donner un chemin différent pour que mon fichier php soit exécuté à partir de Shell_exec (). Cela n'a pas fonctionné Shell_exec('/usr/bin/php backgroundtask.php');
.
Bien que cela ait eu Shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');
.
Vous pouvez visiter this Reference.
J'ai eu le même problème parce que PHP barre oblique inverse.
PHP échappe aux barres obliques inverses, donc la commande qui atteint le shell
'COPY E:path1\path2\file.prn /B \127.0.0.1\"PRINTER NAME"'
alors j'ai donné le commandement comme ça
'COPY E:\\path1\\path2\\file.prn /B \\\\127.0.0.1\"PRINTER NAME"'.
Vous devez échapper deux fois aux barres obliques inverses: une fois pour PHP et une fois pour le shell.