2009-03-09 5 views
31

Existe-t-il un moyen de détecter le nom du serveur exécutant un script PHP à partir de la ligne de commande?Nom du serveur PHP à partir de la ligne de commande

Il existe de nombreuses façons de le faire pour PHP accessible via HTTP. Mais il ne semble pas y avoir de moyen de le faire pour CLI.

Par exemple:

$_SERVER['SERVER_NAME'] 

ne sont pas disponibles à partir de la ligne de commande.

+1

Je pense que je l'ai finalement obtenu une réponse semi-décente: $ server = system ('echo $ HOSTNAME'); Quelqu'un at-il quelque chose de mieux? – Justin

+0

@Uwe Mesecke: Je ne peux pas voter haut ou bas. Votre réponse est la meilleure. Bien que ce ne soit pas 100% portable, parce que certains hôtes répondent avec des déchets supplémentaires. Mac OS X Leopard et OpenSolaris répondent tous avec le nom d'hôte. RHEL3 (frissonnement) répond avec toutes sortes de déchets. – Justin

+0

Vous n'avez même pas la possibilité de cocher une case à côté de la réponse que vous avez choisie? – random

Répondre

74
+2

Je ne peux pas voter de haut en bas. Votre réponse est la meilleure. Bien que ce ne soit pas 100% portable, parce que certains hôtes répondent avec des déchets supplémentaires. Mac OS X Leopard et OpenSolaris répondent tous avec le nom d'hôte. RHEL3 (frissonnement) répond avec toutes sortes de déchets. – Justin

+0

Cela fonctionnera-t-il si vous avez 2 noms de domaine sur le même serveur (IP)? – Genjo

+0

Le nom d'hôte et la résolution d'adresse inverse de la machine sont des choses différentes ... uname renvoie le nom d'hôte et AFAIK il devrait y avoir un seul par machine. Si vous avez besoin d'une recherche inversée, vous devez utiliser un client DNS. –

1

Peut-être parce que si vous exécutez un script à partir de la ligne de commande, aucun serveur n'est impliqué?

+1

Aucun serveur dans le sens où aucun serveur WEB n'est impliqué. Cependant, je veux le nom du serveur sur lequel le script fonctionne. – Justin

3

Essayez:

$servername = trim(`hostname`); 
+1

cela semble tout simplement faux. La garniture ne supprime que les espaces blancs. comment diable cela devrait-il fonctionner avec une chaîne statique en entrée? – Umingo

+0

dans ce cas il exécute la commande linux 'hostname', alors la chaîne retournée est rognée ... cette astuce ne fonctionnera que dans un environnement linux/unix. Essayez cet exemple: echo \ 'hostname'; –

10

Nom_du_serveur n'est pas disponible lorsque vous exécutez PHP à partir de la CLI, pour cette même raison. Lorsque vous exécutez PHP à partir de l'interface de ligne de commande, vous lancez votre propre interpréteur PHP qui exécute le code que vous lui avez transmis, sans aucun type de serveur. Ainsi, depuis la CLI, PHP ne sait rien de votre serveur web que vous ne lui dites pas explicitement.

2

Appelez le CLI et utilisez la commande gethostname:

php -r "echo gethostname();" 

Prints:

your_hostname 
-5

L'un d'eux peut avoir le nom du serveur:

print_r($_SERVER) 
var_dump($_SERVER) 
echo $_SERVER['HOSTNAME'] 

me donne le nom du serveur.

+4

Cela ne fonctionne pas sur CLI. – cweiske

+1

-1 ne fonctionne pas sur cli – Sebastian

2

Afin d'obtenir le nom d'hôte de la ligne de commande , vous devez également utiliser php -r. Sur linux j'ai utilisé:

~#php -r 'echo php_uname("n");' 
hostname 

Sur les fenêtres, j'utilisé:

D:\xampp\php>php -r "echo php_uname('n');" 
MB-PC 

De plus, quand on y accède via le PHP console ne fournit pas beaucoup des valeurs _SERVER de $ classiques, mais sur le serveur d'accédés a les clés suivantes:

[email protected]:~# php -r 'foreach($_SERVER as $key =>$value){echo $key.",";}' 
TERM,SHELL,SSH_CLIENT,SSH_TTY,USER,LS_COLORS,MAIL,PATH,PWD,LANG,SHLVL,HOME,LOGNAME,SSH_CONNECTION,LESSOPEN,LESSCLOSE,_,PHP_SELF,SCRIPT_NAME,SCRIPT_FIL 
ENAME,PATH_TRANSLATED,DOCUMENT_ROOT,REQUEST_TIME,argv,argc 
+1

Cela m'a aidé tout à l'heure, beaucoup de temps. Gloire! –

+0

J'avais besoin de: php -r 'echo php_uname ("n"). "\ N";' – zzapper

1

vous pouvez ajouter votre script php pour commander en ligne qui établira $ _SERVER [ « SERVER_NAME »] pour vous. Voici comment je l'utilise:

C: \ SDK \ php-5.5.25-Win32-VC11-x86 \ php.exe -S localhost: 8080 -t D: \ projects \ Sites \ monsite router.php

router.php

<?php 
$_SERVER['SERVER_NAME'] = 'localhost:8080'; 
return false; // serve the requested resource as-is. 
?> 
Questions connexes