Exécution de l'interpréteur de script à l'aide de php
J'ai un script shell deploy.sh
qui a le contenu suivant:-
echo "0 Importing the code"
eval "git pull -u origin master"
echo "1 Backing up existing data in database.."
//-- other code follows here
Quand j'execute le script directement à l'aide du terminal, j'obtiens le résultat suivant:-
0 à Importer le code
à distance: le Comptage d'objets: 5, fait. distance: la Compression des objets: 100% (2/2), c'est fait. distance: Total 3 (delta 1), réutilisé 0 (delta 0) Déballage des objets: 100% (3/3), c'est fait. De bitbucket.org:utilisateur/repo * la branche master -> FETCH_HEAD La mise à jour de db13xxx..6705xxx
1 Sauvegarde des données existantes dans la base de données..
C'est correct. Cependant, j'ai écrit un script PHP avec qui je peux invole l'deploy.sh script sur http. Le contenu de cette page php comme suit:-
$output = `./deploy.sh`;
echo '<pre>', $output, '</pre>';
Quand j'ai appeler ce fichier php via le navigateur, le script shell est en fait appelée et j'obtiens le résultat suivant:-
0 à Importer le code 1 Sauvegarde des données existantes dans la base de données..
Le problème est que le eval "git pull -u origin master"
commande n'a pas exécuté et sa sortie n'est pas indiquée. Aucune idée de quel est le problème?
Est le
après tu dit, j'ai essayé de supprimer les eval. Il s'exécute toujours lorsque invoquées directement, mais même résultat lorsqu'il est exécuté par page php.
Avez-vous essayé d'ajouter
eval
nécessaire? Ne pourriez-vous exécuter echo '0'; git pull -u origin master
; echo '1" etc.après tu dit, j'ai essayé de supprimer les eval. Il s'exécute toujours lorsque invoquées directement, mais même résultat lorsqu'il est exécuté par page php.
Avez-vous essayé d'ajouter
#!/bin/bash
en haut du script?OriginalL'auteur Sparky | 2013-02-25
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne
Avant que assurez-vous que le fichier a chmod 777 autorisation.
OriginalL'auteur Swetha
Une chose que vous pouvez faire avec le
exec()
fonction est de passer deux valeurs optionnelles pour plus de perspicacité.Voici un code que j'utilise pour tester les scripts shell à partir d'une interface web.
Fichier à l'aide de la restituable classe du projet-je utiliser, mais vous pouvez mettre la chaîne de sortie où vous l'utilisez ou
echo/print_r()
tout aussi bien. Assurez-vous également que vous n'êtes pas en mode sans échec à l'exécution de la fonction phpinfo(); beaucoup de gens ayant ce problème.En outre, il n'y a aucune raison que vous devriez éviter d'utiliser des scripts shell en PHP. PHP étant un langage de script, il est très économe à l'agrégation de nombreux scripts shell pour permettre à de plus haut niveau de l'administration.
PHP n'est pas seulement pour les sites web. Même alors, exposer des scripts d'administration à l'interface web est très utile dans et de lui-même; parfois c'est même une exigence.
OriginalL'auteur Garet Claborn
Vous devriez essayer d'éviter d'exécuter des commandes shell en php.
Ayant dit cela, essayez ceci:
Par: http://www.php.net/manual/en/function.shell-exec.php
Mise à jour du code, est-il un message d'erreur quand vous essayez d'exécuter le script php en ce moment?
nope, pas de message d'erreur (j'ai essayé avec ur de code mis à jour)
Toutes mes excuses, essayez avec la mise à jour de la fonction de celui-ci doit donner une sorte de feed-back. Probablement ne peut pas courir, mais encore peut vous rapprocher. (le problème je pense est un cheminement d'erreur)
OriginalL'auteur ChrisK
ipconfig
.OriginalL'auteur Vikash Jha