質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

837閲覧

PHPの$_SERVERが表示されません。

rude_rockers

総合スコア32

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/06 02:24

編集2018/12/07 01:00

phpで「$_SERVER」を使ったコードが表示されません。

ローカル環境
VagrantにLAMP環境

php

1<?php 2echo $_SERVER['PHP_SELF']; 3echo $_SERVER['HTTP_HOST']; 4echo $_SERVER["REQUEST_URI"]; 5?>

としても何も表示されません。

どなたか原因がわかる方いらっしゃいますか?

フォルダ階層は、
/var/www/html/index.php
で、
DocumentRoot "/var/www/html"
です。
実行環境はブラウザ(Google Chrome)です。

var_dump($_SERVER);

とすると「array(0) { }」とでます。

「php.ini」を変えたら動きました。
原因はこれから調査します。
ありがとうございました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/06 02:28

実行はどのようにされていますか?コマンドでしょうか、ブラウザからでしょうか。
m.ts10806

2018/12/06 02:31 編集

エラー表示をOnにしてみてください。https://qiita.com/shotets/items/3c95aef631b2c5eadae5 あとvar_dump($_SERVER);ではどうでしょうか。もしNoticeのindexエラーが出ている場合、定義されていない(実行環境により参照できない)ということになります。コマンドから実行した場合にはありそうです。
m.ts10806

2018/12/06 15:05

そこをもっと詳しく書いていただかないと再現確認とれませんので。アクセスURLとか
m.ts10806

2018/12/06 15:07

エラー表示の確認とvar_dumpもお忘れなく。回答もついてしまってますけど
rude_rockers

2018/12/06 18:35

で、実行結果が「array(0) { }」となりました。どうゆうことでしょうか?中身がない?
rude_rockers

2018/12/06 18:39

エラーとvar_dumpのアドバイスありがとうございます。それこそ基本なんですね!!
rude_rockers

2018/12/06 18:40

これ空ってことですよね?一回表示されたんですが、急にエラーになりました。心当たりは全くありません・・・
rude_rockers

2018/12/06 18:51

エラー表示をしたところ、「Notice: Undefined index: PHP_SELF in /var/www/html/hello.php on line 29 Notice: Undefined index: HTTP_HOST in /var/www/html/hello.php on line 30 Notice: Undefined index: REQUEST_URI in /var/www/html/hello.php on line 31」とでました。これはちょうど「echo $_SERVER['PHP_SELF']; echo $_SERVER['HTTP_HOST']; echo $_SERVER["REQUEST_URI"];」のところです。「未定義のインデックス」ということですが、なぜ現在空なのかわかりません・・・
rude_rockers

2018/12/06 22:52 編集

空である場合はエラーになる・・・? なぜ空?
m.ts10806

2018/12/06 23:10

頑なに実行URLを提示しないのはなぜでしょうか。むしろそちらのほうが大事です。あと細かいですが、ChromではなくChromeです。
m.ts10806

2018/12/06 23:11

PHPのバージョンも関係するかもしれませんけど。それも「実行環境」のうちです。
rude_rockers

2018/12/07 00:30

URLはローカル環境なのですが、見れるのですか?PHPはPHP 5.4です。あれ?7.1をインストールしたはずなんですが・・・www
m.ts10806

2018/12/07 00:32 編集

そこはphpinfo()の結果を以てご提示ください。「見れるのですか?」が何を聞きたいのか分かりませんが、あなたの環境を私のPCから確認するのではなく、同じような環境を私の方で用意して確認するという意味です。
m.ts10806

2018/12/07 00:33

あくまで「ブラウザからどのように実行しているか」の確認です。あとは私の回答の通りです
guest

回答3

0

ベストアンサー

こういうときはPHPマニュアル確認ですね。

$_SERVER は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列です。この配列のエントリは、Web サーバーにより 生成されます。**全ての Web サーバーがこれら全てを提供する保障はありません。 サーバーは、これらのいくつかを省略したり、この一覧にない他のものを 定義する可能性があります。**これらの変数の多くは、 » CGI/1.1 specification で定義されています。したがって、これらについては定義されていることを 期待することができます。

太字部分確認。
まあつまり、サーバー側の設定や何かかなと。
「全てを提供する保障がない」ということは何も提供されていなければ中身はarray{}となりますよね。
$_SERVER自体はスーパーグローバル変数なので変数自体は自動で定義されているはずですが、中身はまたWebサーバーに依存するのではないでしょうか。

もちろん「他人が再現できる」情報として

  • コード
  • サーバーの種類、バージョン(サーバー構築の手法などもあれば)
  • PHPのバージョン(マイナーバージョンまで)
  • 実行の仕方 コマンドなのかブラウザからアクセスなのか。

 →コマンドなら実行のコマンド
→ブラウザならアクセスURL

の提示は必要です(完全な再現確認にはどれか1つでも欠けてはいけません)
サーバーサイドの言語なのでブラウザの種類が関係することは基本的にありません。

PHPマニュアルに$_SERVERの定義の確認方法が書いてあるのでリンク先熟読してご自身の環境と見比べてください。
問題の切り分けに必要なことも幾つか行う必要があるかと思います。
普通にechoで文字列出力できるかとか別phpファイルがincludeできるかとか、変数を定義・出力できるかとか。
それ以前にWebサーバー(Apache)が起動しているかとかそういうことも大事です。

いっそ、いったん全てアンインストールして最初からインストールしなおしたらいいかもしれませんね。
どこかで何か必要な手順を抜かしてたりするかもしれませんが、それは今の情報からは何も分かりませんし。(LAMPということだけでは実は情報不足です)

投稿2018/12/06 23:23

編集2018/12/07 00:25
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rude_rockers

2018/12/07 00:52

うぐう。 ちょっとパニックです(笑) 設定を調べまして、サンプルの通りやってましたが今までダメでした。 で、サンプルに付いていた「コピペ用」のサンプル「php.ini」をそのままコピペしたら「/hello.php192.168.33.10/hello.php」と表示されました。 これは望んだとおりに動いた、と捉えて良いのでしょうか? しかし、その設定の何が違うか調べるため、前の設定の「php.ini」を再度ペーストしても同じように「/hello.php192.168.33.10/hello.php」と表示されました。 ・・・・??? とりあえず、ふたつの設定をhttp://mergely.comで調べてみようと思います。 お騒がせしました。 「設定そのもの」というアドバイスをいただいたmts10806さんをベストアンサーに選びたいと思います。 設定の開示は編集しておきます。
m.ts10806

2018/12/07 01:03 編集

たい焼きですか(マニアックなネタなので分からなければスルーしてください) > /hello.php192.168.33.10/hello.php ちょっと意味が分からないですね。 質問本文ではindex.phpの話をしていたはずが急にhello.phpと。 ひとまずphp.iniはあまり分からない段階でいじるものではないということです。設定ファイルです。1つ間違えば何も動かなくなります。 Windowsでいうとシステムの詳細設定をいじるようなものです。 Vargantということはコマンドで1つ1つインストールしていくものかと思いますが、 PHPインストール段階であるもので基本的なことは大抵出来ますので。 既にグチャグチャになってきてるようにも思いますので、最初からインストールしなおした方が良さそうに思います。
rude_rockers

2018/12/07 01:02

当たり前ですけど、php.iniを2つは貼れませんでした(笑) 自分で調査してみます。 設定やモードをしっかり理解していないことが原因ですね。 質問の仕方もまた改めます。
rude_rockers

2018/12/07 01:05

すいません。 index.phpではなかったですね。 重要ではないと判断しましたが間違いでした。 たい焼きは・・・・ 調べます(笑)
m.ts10806

2018/12/07 01:06

あいや古いゲームの話なので放置でいいです。ちょっと恥ずかしいツッコミをしてしまってますので。
rude_rockers

2018/12/07 01:11 編集

自分は39歳なので気になりまくりですが・・・・・(笑) ファミコンの「うる星やつら」で確かたい焼きを取ると得点に・・・・www
m.ts10806

2018/12/07 01:24

あら意外と私より年上の方でしたか。 とりあえず最初のコメントの1行目と「たい焼き」で調べてみたら良いかと。 まあ本件とは関係ないのでこのあたりで。
rude_rockers

2018/12/07 01:27 編集

把握しましたwww 知らないゲームだった。 今回もありがとうございましたm(_ _)m
m.ts10806

2018/12/07 01:30

解決の糸口となったようで何よりです。
guest

0

webブラウザから実行していないからじゃないですか?


php7.1を追加インストールしたところで、
apache側の定義を直さないと、
最初に設定済みのphp5.4が呼ばれるままなんじゃないですかね。

phpがどういうモードで動作しているかわかりますか?
cgiモードなのか、モジュールモードなのか。
phpinfo()で
Server APIがCGIってなってればcgiモード、
Apache 2.0 HandlerとかApacheが書いてあればモジュールモードで、
httpd.confなどでどこを直すべきかを絞りやすくなります。

apache で phpのモジュール版とcgi版の切り替えを行ってみる | レンタルサーバー・自宅サーバー設定・構築のヒント
phpの動作モードを確認する方法 - レンタルサーバの引っ越し(番外編) – コアースのブログ

これらの記事を参考に環境設定を点検してください。

その上で、apacheにどちらのバージョンをどちらの動作モードで組み込みたいかを調べてみてはいかがかと。

投稿2018/12/06 08:43

編集2018/12/07 00:49
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rude_rockers

2018/12/06 18:30

Google Chromでの使用ですm(__)m
rude_rockers

2018/12/07 00:54

「php7.1を追加インストールしたところで、 apache側の定義を直さないと、 最初に設定済みのphp5.4が呼ばれるままなんじゃないですかね。」 まさにこれな気がします。 勉強します! ありがとうございます!!
退会済みユーザー

退会済みユーザー

2018/12/07 00:56

解決していないのにBAつけていいの?
rude_rockers

2018/12/07 01:07

ブラウザ上では解決しましたので一応BAとさせていただきます。 原因を自分がわかっていないのが最悪ですが、php.iniにあることと、phpinfo()など知れたことが大変参考になりました。 ありがとうございました!
rude_rockers

2018/12/07 01:19

うわ、phpinfo()って便利ですねえ!!
guest

0

PHP

1print_r($_SERVER);

で確認するところからでしょう

投稿2018/12/06 03:16

yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rude_rockers

2018/12/06 18:33

HTTP ERROR 500 になります。。。
rude_rockers

2018/12/06 18:43

print_r($_SERVER); で、「Array ( )」となりました!! あれ?さっきはエラーだったのに・・・ すいません、自分の勘違いかもしれませんm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問