Cours PHP exécutable à l'intérieur du script?
Je veux exécuter un PHP cli programme PHP cli. Sur certaines machines, où cela va lancer, à la fois php4 et php5 sont installés. Si je lance le programme externe comme
php5 outer.php
Je veux que le script interne pour être exécuté avec la même version de php. En Perl, je voudrais utiliser $^X
pour obtenir l'exécutable perl. Il semble il n'y a pas de variable en PHP?
Maintenant, je suis en utilisant $_SERVER['_']
, parce que bash (et zsh) définir la variable d'environnement $_
à la dernière exécuter le programme. Mais, je préfère ne pas compter sur une coque spécifique de l'idiome.
Mise à JOUR: Version différences sont mais les un problème. Si PHP n'est pas dans le PATH, par exemple, ou qui n'est pas la première version trouvée dans le CHEMIN, les suggestions pour trouver les informations de version ne va pas aider.
En outre, csh
et variantes semblent pas régler la $_
variable d'environnement pour leurs processus, de sorte que la solution n'est pas applicable.
Mise à JOUR 2: j'ai été en utilisant $_SERVER['_']
, jusqu'à ce que j'ai découvert qu'il ne veut pas faire la bonne chose en vertu de xargs
(ce qui est logique... zsh
il définit à la commande qu'il a couru, qui est xargs
, pas php5
, et xargs
ne modifie pas la variable). Tombant en arrière à l'aide:
$version = explode('.', phpversion());
$phpcli = "php{$version[0]}";
Point intéressant. Dans ce cas particulier, une partie de la raison pour laquelle il est exécuté comme un sous-processus est à l'intérieur des appels de script "exit ()" à divers endroits.
OriginalL'auteur benizi | 2010-03-03
Vous devez vous connecter pour publier un commentaire.
Intéressant de noter que maintenant en PHP 5.4+ vous pouvez utiliser la constante prédéfinie - PHP_BINARY:
Remarque: dans Apache2handler retour
httpd
chemin.remarque: il renvoie la
php-cgi
et pasphp
dans mon cas (windows)Cela renvoie
C:\php
sur Windows où aucun fichier ou répertoire existe (PHP 7.1.11, Apache 2.4.29, Windows 7 Pro) - que, comme indiqué dans un commentaire sur une autre réponse, nePHP_BINDIR
.Et sur la société d'hébergement Linux il renvoie également le même que
PHP_BINDIR
. Ici, il est/usr/bin
et ne contenir unphp
exécutable, mais c'est la version 5.3 de l'exécutable de ne pas le 7.0.25 version de l'appel de l'environnement. Donc, je ne pense pas que cette réponse est utile.OriginalL'auteur Kristopher Ives
Sur mon serveur, j'ai php 5.3.14.
J'ai trouvé une constante prédéfinie:
PHP_BIN_DIR
Ensuite, en supposant que le nom de fichier du fichier exécutable est toujours 'php',
$php_cmd = PHP_BIN_DIR.'/php'
point à mon PHP fichier exécutable.PHP_BINDIR
(pas de deuxième trait de soulignement). C'est un assez décent réponse. Merci.Je upvoted la réponse et le commentaire, mais il a upvotes en arrière après l'avoir essayé dans Windows. Retournera toujours
C:\php
peu importe la réalité.OriginalL'auteur Alessandro Sturniolo
Ok, donc c'est laid, mais il ne fonctionne que sous Linux:
Je vais essayer de travailler sur une version de Windows plus tard.
MODIFIER
N'a pas l'air comme il n'y a aucun moyen facile de le faire pour Windows. Certains exécutables Windows comme
tasklist
peut vous donner le nom de l'exécutable, mais pas le chemin complet vers l'exécutable. Je n'ai pu trouver des exemples pour trouver le chemin d'accès complet donné un PID pour C++, AutoHotkey et la comme. Si quelqu'un a des suggestions sur les endroits où d'autre que je puisse voir, laissez-moi savoir.PS: Pour obtenir le PID en PHP pour Windows, vous ont apparemment appeler getmypid().
Au lieu de faffing avec
$pid
vous pouvez toujours regarder"/proc/self/exe"
J'aime cette solution btw !
OriginalL'auteur cmptrgeekken
Vous pouvez utiliser
phpversion()
pour obtenir la version actuelle de PHP avant d'exécuter le "intérieure" script.http://php.net/manual/en/function.phpversion.php
OriginalL'auteur Richard JP Le Guen
Malheureusement PHP_BINARY est de retour le binaire httpd (sur windows XAMPP), donc je suis de retour à l'aide de chemins d'accès...
Je sais que c'est un vieux de la réponse d'une personne n'a les réponses @XedinUnknown mais je confirme cela fonctionne parfaitement sur Windows XAMPP. Quelqu'un d'autre a testé ce en plus des environnements?
OriginalL'auteur ZipXap
Est-il quelque chose d'utile dans
$_ENV
?La variable d'environnement SHELL sur Unix est le chemin d'accès à la coquille qui est actuellement en cours d'exécution. Si vous ajoutez
#!/path/to/php
vers le haut de votre fichier PHP, de le rendre exécutable et le lancer directement le fichier, ne$_ENV['SHELL']
contenir/path/to/php
?$_ENV
contient les mêmes_
entrée peuplé de dans$_SERVER
, mais non,$_ENV['SHELL']
ne contient pas la bonne valeur ("/bin/zsh"
).OriginalL'auteur Andy Shellam
Cette réponse a été utile pour le suivi des php emplacement:
Comment obtenir le chemin d'accès de l'PHP BIN à partir de PHP?
Il est également windows et linux friendly 🙂
D'accord, c'est pas la meilleure méthode. Mais pour quelque chose qui est indépendant de la plateforme, c'est tout ce que j'ai pu trouver.
OriginalL'auteur SeanDowney
Vous pouvez essayer et d'analyser la fonction phpinfo() suite.
OriginalL'auteur Itay Moav -Malimovka
Je pense que le bestconstant PHP_BINARY. Avec PHP 5.5.12
OriginalL'auteur Guy Bami
Je sais que cette question est un peu vieux, mais il est venu alors que la recherche d'une façon plus simple de le faire.
Malheureusement je ne peux pas trouver un moyen plus court, mais cela fonctionne assez bien et est multi OS/PHP version compatible.
$lookIn pourrait probablement être étendu pour inclure plus d'endroits communs.
https://gist.github.com/cjsewell/39b60065ae2af677ceb1
Espère que cela aide quelqu'un
OriginalL'auteur CJSewell