web-dev-qa-db-fra.com

la commande php Shell_exec () ne fonctionne pas

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

13
user3018038

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 ()

3
Jason Heo

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.

3
SamV

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.

2
Jack

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
1
Jesper Blaase

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.

1
xchangcheng

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.

0
lastlink

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.

0
Nithiyakumar K