コマンドラインから PHP スクリプトを実行しているサーバーの名前を検出する方法はありますか?
HTTP 経由でアクセスされる PHP に対してこれを行うには、さまざまな方法があります。しかし、CLI でこれを行う方法はないようです。
例えば:
$_SERVER['SERVER_NAME']
コマンドラインからは利用できません。
コマンドラインから PHP スクリプトを実行しているサーバーの名前を検出する方法はありますか?
HTTP 経由でアクセスされる PHP に対してこれを行うには、さまざまな方法があります。しかし、CLI でこれを行う方法はないようです。
例えば:
$_SERVER['SERVER_NAME']
コマンドラインからは利用できません。
echo php_uname("n");
<?php
echo gethostname(); // may output e.g,: sandie
http://php.net/manual/en/function.gethostname.phpを参照してください。
php_uname('n')
gethostname() はPHP 5.3 で追加されたものと同じ機能を持つ便利な関数です。
同じ理由で、CLI から PHP を実行する場合、SERVER_NAME は使用できません。
CLI から PHP を実行すると、任意の種類のサーバーなしで、渡されたコードを実行する独自の PHP インタープリターが開始されます。そのため、CLI からは、PHP は Web サーバーについて、ユーザーが明示的に通知しない限り何も知りません。
CLI を呼び出して、gethostname コマンドを使用します。
php -r "echo gethostname();"
版画:
your_hostname
$_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
ルーター.php
<?php
$_SERVER['SERVER_NAME'] = 'localhost:8080';
return false; // serve the requested resource as-is.
?>
コマンドラインからホスト名を取得するには、php -r を使用して実行する必要もあります。Linuxでは、次を使用しました:
~#php -r 'echo php_uname("n");'
hostname
私が使用したウィンドウで:
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
コマンドラインからスクリプトを実行すると、サーバーが関与しないためでしょうか?