web-dev-qa-db-ja.com

PHPコマンドラインからのサーバー名

コマンドラインからPHPスクリプトを実行しているサーバーの名前を検出する方法はありますか?

HTTP経由でアクセスするPHPに対してこれを行う方法は多数ありますが、CLIに対してこれを行う方法はないようです。

例えば:

$_SERVER['SERVER_NAME'] 

コマンドラインからは使用できません。

35
Justin Noel
81
Uwe Mesecke
_<?php
echo gethostname(); // may output e.g,: sandie
_

参照 http://php.net/manual/en/function.gethostname.php

gethostname()はphp_uname('n')と同じように機能する便利な関数であり、PHP 5.3以降に追加されました。

20

同じ理由で、CLIからPHPを実行する場合、SERVER_NAMEは使用できません。

CLIからPHPを実行すると、自分に渡したコードを実行する独自のPHPインタプリタを起動します。サーバーの種類はありません。そのため、 CLI、PHPは、明示的に指定しない限り、Webサーバーについて何も知りません。

11
mikl

試してください:

$servername = trim(`hostname`);
3
jonstjohn

commandlineからホスト名を取得するには、php -rを使用して実行する必要もあります。 Linuxでは私が使用しました:

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

私が使用したWindowsでは:

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

さらに、コンソールからアクセスすると、PHPは従来の$ _SERVER値の多くを提供しませんが、サーバーでは次のキーしか持っていません。

root@hermes:~# 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
3
Menios

CLIを呼び出して、gethostnameコマンドを使用します。

php -r "echo gethostname();"

プリント:

your_hostname
3
trond

$ _SERVER ['SERVER_NAME']を設定するコマンドラインにphpスクリプトを追加できます。これが私がそれをどのように使っているかです:

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

router.php

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

コマンドラインからスクリプトを実行した場合、サーバーが関与していない可能性があります。

2
anon