12
votes

Comment puis-je trouver l'exécutable PHP actuellement en cours d'exécution?

de l'intérieur d'un programme PHP, je veux connaître l'emplacement de l'exécution binaire. Perl a $ ^ x à cette fin. Y a-t-il un équivalent dans php?

Ceci est donc afin qu'il puisse exécuter un processus PHP enfant à l'aide de lui-même (plutôt que du code dur, un chemin ou supposez "php" est correct).

mise à jour

  1. J'utilise Lightpd + FastCGI, pas Apache + Mod_PHP. Alors oui, il y a un binaire PHP.
  2. eval / Inclure n'est pas une solution car je reproche un serveur qui doit vivre au-delà de la demande.

    choses que j'ai essayées et ne fonctionnent pas:

    • $ _ Server ['_'] ressemble à ce que je veux de la ligne de commande, mais sa variable d'environnement définie par la coque du dernier programme exécuté. Lorsqu'il est exécuté à partir d'un serveur Web, il s'agit du serveur Web Binary.
    • Quel php ne fonctionnera pas car le binaire PHP n'est pas garanti d'être identique à celui que dans le chemin du path du serveur Web .

      Merci d'avance.


0 commentaires

7 Réponses :


3
votes

Ouais, $ _ Server ['_'] est de ce dont vous parlez, ou aussi près d'exister. La raison pour laquelle vous obtenez un serveur Web binaire quand il est exécuté à partir du Web est que / usr / bin / php n'a rien à voir avec l'exécution du serveur Web; Ce qu'il est courant est un SAPI séparé. Il n'y a rien de sur l'instance PHP Web pour pointer vers / usr / bin / php car il n'y a aucune raison pour qu'il y ait.


7 commentaires

Aucune raison ... à l'exception de celle indiquée dans ma question.


@schwern: Mais si l'exécutable est le serveur Web et PHP est juste utilisé comme une bibliothèque, pourquoi il y aurait une raison de pointer sur un binaire PHP si elle n'est pas utilisée. Il y a une différence avec la manière dont les serveurs Web utilisent Perl car dans la plupart des cas, l'interface est CGI et que signifie exécuter l'exécutable Perl (il existe des exceptions). Je dirais que votre meilleur pari est une chaîne de configuration ou utilisez EVAL () si cela est suffisant pour vos besoins.


@Schwern: Si vous supprimé / usr / bin / php , votre serveur Web continuerait à traiter des fichiers PHP tout à fait. Je ne sais pas comment vous dire pourquoi il n'y a pas technique une raison pour un lien entre eux plus clairement que cela.


Il y a un monde au-delà d'Apache. J'utilise Lightpd + FastCGI. PHP n'est pas incorporé dans le serveur Web. En fait, ce n'est pas même sur la même machine!


La chose est que l'utiliser comme ça est l'exception. Ce n'est pas "au-delà de Apache", plus ou moins chaque serveur utilise PHP de la même manière que Apache le fait comme le moyen le plus efficace. Bonne chose que vous avez édité votre message pour indiquer que ce n'était pas une solution standard, mais une installation très spécifique que vous étiez après.


Apparemment, il est tellement standard que votre mise en œuvre de votre LightPD + FastCGI ne se reconnaît même pas comme étant autre chose, s'il s'agit de signaler le processus de serveur Web comme $ _ serveur ['_'] .


+1 pour le _ _ serveur ['_'] Conseil qui a travaillé pour moi en utilisant Cygwin, tandis que php_bindir était l'impression C: \ php mais ceci le dossier n'existe pas.



16
votes

La constante php_bindir vous donne le répertoire où le binaire PHP est


6 commentaires

Pourtant, certaines personnes me votent, probablement parce qu'elles ne l'ont pas testé :) Content d'aider.


J'utilise cela dans ma console IPHP. A été fiable pour moi.


Oui cela fonctionne. J'ai les deux / usr / bin / php et XAMPP PHP et exécutant chacun d'eux donne leur chemin correct sur le binaire.


D'après ce que j'ai vu, php_bindir donne un mauvais chemin en cas de wamp.


Donne un mauvais chemin en utilisant Cygwin . J'ai dû utiliser $ _ serveur ['_'] à la place.


Php_bindir donne le chemin que les fichiers binaires PHP ont été placés lors de la compilation, pas de l'emplacement des fichiers binaires au moment de l'exécution. Ils seront souvent les mêmes mais pas toujours.



0
votes

Selon la façon dont PHP est installé, vous ne pouvez pas trouver l'exécutable PHP. Si PHP fonctionne comme module pour le serveur Web comme le module Apache, il n'y a pas de binaire que vous pouvez appeler. Vous pouvez jeter un oeil à php_info () il répertorie tout. peut aussi le chemin d'accès à PHP. Dans ce chemin, vous pouvez assumer un binaire PHP.

Mais pourquoi voulez-vous appeler un processus supplémentaire? Vous pouvez exécuter d'autres fichiers PHP en incluant la commande ou l'évaluation. Il n'y a aucune raison d'apparaître un nouveau processus.


1 commentaires

Peut-être que je veux frayer un serveur?



-2
votes

Qu'en est-il de:

Mais, c'est UNIX / Linux uniquement: D


1 commentaires

Il n'y a absolument aucune garantie que le binaire PHP qui a exécuté le programme est le même que le binaire PHP sur votre chemin. Dans ma situation, cela n'est pas explicitement.



1
votes

Le php_bindir code> constante est probablement la chose la plus facile à utiliser; La prochaine meilleure chose que je puisse créer est de recréer essentiellement du chemin Binder à partir du paramètre de configuration code> Extension_Dir CODE>:

$phpbin = preg_replace("@/lib(64)?/.*$@", "/bin/php", ini_get("extension_dir"));


0 commentaires

1
votes

dans php5.4 Vous pouvez utiliser la constante php_binary, elle ne fonctionnera pas via mod_php ou similaire mais via CGI, etc.

pour les versions antérieures de PHP readlink ('/ proc / self / exe'); ira probablement bien, il ne fonctionnera à nouveau via mod_php.


0 commentaires

-1
votes

Je cherche l'exécutable PHP7 sur mon Mac (OSX El Capitan) afin de configurer et d'installer XDEBUG (nécessaire pour trouver la version appropriée de PHPIZE à exécuter). Aucune des solutions que j'ai trouvées n'a travaillé pour moi, alors je viens de terminer la recherche de la recherche:

find / -name php -print


1 commentaires

Merci, mais cela ne répond pas à la question. Un programme ne peut pas interpréter la liste comme une boîte humaine. L'humain devine juste qui est la bonne (une source de nombreuses heures de frustration). Et cela ne cherche que des fichiers nommés "php", l'interprète étant exécuté pourrait être nommée quoi que ce soit.