Impossible d'exécuter le script PHP en utilisant PHP exec
Je suis en train d'appeler un script qui prend plusieurs secondes (web services avec le 3e partie) à l'aide de PHP exec appel. Après beaucoup de difficultés, j'ai réduit ce pour le classique hello world exemple. Le script d'appel ressemble:
exec('/usr/bin/php /home/quote2bi/tmp/helloworld.php > /tmp/execoutput.txt 2>&1 &');
Lorsque je l'exécute, la sortie execoutput.txt
contient une copie de l'invocation du script de la page, pas hello world
comme je m'y attendais.
Pourquoi ne puis-je pas obtenir ce script PHP à exécuter à l'aide de exec? Notez que lorsque je passe la commande pour quelque chose comme ls -l
la sortie est une liste de répertoires, comme prévu. btw, en cas de questions, j'ai fait un chmod du script appelé à 755...
Mise à jour - j'ai déplacé le exec appel à la fin du script d'appel et au moins maintenant, je ne vois pas l'appel de script exécuté dans la sortie. Thx pour les affiches et je vais essayer certaines de ces idées.
Aider!
Merci
Steve
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce problème aussi et il s'avère que c'est un bug dans php (#11430). La solution est d'utiliser php-cli lors de l'appel à un autre script php dans un script php. Vous pouvez toujours utiliser exec mais plutôt que d'utiliser php php-cli lors de l'appel dans le navigateur:
Cela a fonctionné pour moi.
Ce que exec est en train de faire est de prendre la plus à droite de commande et en l'ajoutant à votre destination. Si vous avez la ligne shebang dans votre script php, vous ne devriez pas besoin d'inclure les binaires de la directive de l'interprète php.
si vous voulez juste le script de sortie, essayez:
toutefois, si vous ne voulez pas que les erreurs dans le fichier, vous devez rediriger STDERR avant la sortie vers le fichier. Comme:
le ci-dessus ne doit la sortie du "Hello World" à l'execoutput.
Edit:
Intéressant que vous obtenez ce comportement. Vous avez déclaré la commande "ls" travaillé. Essayez de faire un alias pour ce et de le transmettre à un fichier comme ceci:
alias pexec='php /home/quote2bi/tmp/helloworld.php'
puis
il semble y avoir un problème avec la façon dont exec poignées d'entrée, par opposition à l'enveloppe elle-même.
-Jean
Le problème est avec PHP lui-même, il traite tout ce que $argv dans le script. Il ne marche pas rediriger la sortie vers un fichier ou vers /dev/null.
J'ai été confronté au même problème il y a quelques temps. Ce que j'ai fait est de créer un
runscript.php
dans /opt/php-bin et puis à l'intérieur de ce script à exécuter ce qu'Elle devrait être en cours d'exécution. Quelque chose comme ceci:Et puis vous l'appeler à l'aide:
C'est le seul moyen que j'ai réussi à le faire fonctionner.
si vous êtes tout simplement l'exécution d'un script php un moyen possible d'exécuter l'ensemble du code est d'utiliser la fonction include() qui va exécuter le fichier php et de sortie des résultats. Vous ne pouvez pas diriger la sortie vers un fichier texte, mais il doit apparaître dans la fenêtre du navigateur, si vous êtes Hello World script php ressemble
puis il va cracher que dans le navigateur. Ainsi, votre deuxième code devrait ressembler à
résultant en une page pourrait ressembler,
Bonjour tout le monde! PHP ROCHES
Pour éviter les problèmes de PHP dans ce domaine, pourquoi ne pas mettre cela à l'intérieur d'un script shell? PHP peut ensuite exécuter le script shell qui a toutes les redirections géré en interne.
Si vous avez besoin de modifier dynamiquement les choses, alors pourquoi ne pas écrire le script shell, et puis l'exécuter (et bien sûr, nettoyer après)?
Fonctionne comme si vous exécutez le script à partir du navigateur.
Cela est venu à travers, tout en travaillant sur un projet de plate-forme linux.
Espérons que cette aide!!