25
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPの$_SERVER['SERVER_NAME']が取れなかったので調べた

Last updated at Posted at 2015-07-05

10年以上PHPやってるくせに最近知ったのでメモ


PHPで開発しててローカルのテスト環境と本番環境での振り分けをしたいのはよくあると思います。

割と王道なやり方は

php
if($_SERVER['SERVER_NAME']==="***.localhost")

等でしょうか。

これうっすらと気が付いてましたが、今回ちょっとトラブルになって調べました。
考えれば当たり前だったんですがCRONやforward等のApacheを経由しないPHP動作の際は取れない訳です。

$_SERVER自体が「WEBサーバーより情報を生成します」とあります。

ですので代替えを調べました。
execのやり方もあるようですがPHPではないですし、ちょっと邪道な気もしますので、

php
php_uname('n')

で、php_uname自体でPHPが動作しているPCの情報が取れ(OSやバージョンが取れます)
「n」パラメータでホスト名が取れる事がわかりました。

ドメイン返さないじゃん・・・と思いましたが、WEBサーバではない(Apacheではない)情報を返すので当たり前か。

当方でテストしたところ、

ローカル
$_SERVER['SERVER_NAME']→「****.localhost」
php_uname('n')→「PC名」

実際のレンタルサーバ上(ここではさくらインターネットのスタンダード)

さくら
$_SERVER['SERVER_NAME']→「ドメイン名」
php_uname('n')→「www***.sakura.ne.jp」

うん、コードはちょっと書き換える必要が出ますが、$_SERVERが使用できない場合はこれでいけそうです。

25
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?