2009-03-09 2 views
31

Есть ли способ определить имя сервера, на котором запущен скрипт PHP из командной строки?Имя сервера PHP из командной строки

Существует множество способов сделать это для доступа к PHP через HTTP. Но для CLI не существует способа сделать это.

Например:

$_SERVER['SERVER_NAME'] 

не доступен из командной строки.

+1

Я думаю, что я, наконец, получил полу-приличный ответ: $ server = system ('echo $ HOSTNAME'); У кого-нибудь есть что-то лучше? – Justin

+0

@Uwe Mesecke: Я не могу голосовать вверх или вниз. Ваш ответ лучший. Хотя, это не на 100% переносимо, потому что некоторые хосты отвечают за это лишним мусором. Mac OS X Leopard и OpenSolaris отвечают только именем хоста. RHEL3 (содрогание) отвечает на все виды мусора. – Justin

+0

У вас даже нет возможности проверить галочку рядом с выбранным вами ответом? – random

ответ

74
+2

Я не могу голосовать вверх или вниз. Ваш ответ лучший. Хотя, это не на 100% переносимо, потому что некоторые хосты отвечают за это лишним мусором. Mac OS X Leopard и OpenSolaris отвечают только именем хоста. RHEL3 (содрогание) отвечает на все виды мусора. – Justin

+0

Будет ли он работать, если у вас есть 2 доменных имени на одном сервере (IP)? – Genjo

+0

Имя хоста машины и разрешение обратного адреса - разные вещи ... uname возвращает имя хоста и AFAIK, должно быть только одно на машину. Если вам нужен обратный адрес, вы должны использовать клиент DNS. –

1

Возможно, потому что, если вы запускаете скрипт из командной строки, сервер не задействован?

+1

Нет сервера в том смысле, что не задействован WEB-сервер. Тем не менее, я хочу, чтобы имя сервера выполнялось на самом скрипте. – Justin

3

Try:

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

это похоже совершенно неправильно. отделка удаляет только пробелы. как, черт возьми, это должно работать со статической строкой в ​​качестве входных данных? – Umingo

+0

в этом случае он выполняет команду linux 'hostname', тогда возвращаемая строка обрезается ... этот трюк будет работать только в среде linux/unix. Попробуйте этот пример: echo \ 'hostname'; –

10

Имени сервер не доступен при запуске PHP из командной строки для этой же самой причины.

Когда вы запускаете PHP из CLI, вы начинаете свой собственный PHP-инспектор, который запускает любой код, который вы ему передали, без какого-либо сервера. Таким образом, из CLI PHP ничего не знает о вашем веб-сервере, о котором вы явно не говорите.

2

Вызвать CLI и использовать команду gethostname:

php -r "echo gethostname();" 

распечаток:

your_hostname 
-5

Один из них может иметь имя сервера:

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

дает мне имя из сервер.

+4

Это не работает на CLI. – cweiske

+1

-1 не работает на cli – Sebastian

2

Чтобы получить имя хоста из командной строки , вам также нужно будет запустить php -r. В Linux я использовал:

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

На окнах я использовал:

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

Кроме того, при обращении к ним с помощью консоли PHP не предусматривает многие из классических значений _SERVER $, но на сервере я доступен только имеет следующие ключи:

[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

Это помогло мне сейчас, большое время. Престижность! –

+0

Мне нужно: php -r 'echo php_uname ("n"). "\ N";' – zzapper

1

Вы можете добавить скрипт в командную строку, которая будет устанавливать $ _SERVER [ «SERVER_NAME»] для вас. Вот как я использую его:

C: \ SDK \ PHP-5.5.25-Win32-VC11-x86 \ PHP.ехе -S локальный: 8080 -t D: \ Projects \ сайтов \ MySite router.php

router.php

<?php 
$_SERVER['SERVER_NAME'] = 'localhost:8080'; 
return false; // serve the requested resource as-is. 
?> 
Смежные вопросы