Apache VirtualHosting環境でPHPが動作しない

Apache VirtualHosting環境でPHPが動作しない

DigitalOcean クラウド サーバーの下に新しく作成された CentOS ノードで、PHP を使用して Apache VirtualHosting 環境をセットアップしようとしています。

問題は、仮想ホスティング自体は機能しているが、PHPは機能していない

サーバーのセットアップ:

  • Web サーバー: CentOS 6.5 (Apache/2.2.15 搭載)
  • PHP バージョン: 5.3.3 (Apache モジュールとして使用)

実行された手順:

ログインユーザー、

  • Apache と PHP のインストール:yum -y install httpd php
  • 以下のような新しい仮想ホスト構成ファイルを作成します。

ファイル:/etc/httpd/conf.d/vhosts.conf

NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.org
     ServerAlias www.example.org
     DocumentRoot /srv/www/example.org/public_html/
     ErrorLog /srv/www/example.org/logs/error.log
     CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
  • 仮想ホストサイトの新しいディレクトリを作成する

以下のように、

mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
  • .php以下のようにテストファイルを配置します.html

/srv/www/example.org/public_html/(DocumentRoot)下のファイル

echo "<HTML>It work's</HTML>"      > /srv/www/example.org/public_html/index.html
echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php

次に、ブラウザで にアクセスするとindex.html、動作します。しかし、ブラウザをポイントするとindex.php空白ページが表示されます

トラブルシューティング

(すでに実行/確認したがうまくいかなかったこと)

  • Apacheが稼働しておりDocumentRootアクセス可能であることを確認
  • すべてのディレクトリ755とファイルは644
  • Apache アクセス ログを確認しました。HTML ページ リクエストはステータス コード 200 で存在しますが、.phpアクセス ログにはページ リクエストが存在しません。
  • ApacheまたはPHPのエラーログにエラーはなく、/var/log/messages
  • php_admin_flag engine onvhost設定ファイルに追加してみました

以下の内容もご覧ください/etc/httpd/conf.d/php.conf

<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php

答え1

私の経験では、PHP は重大な根本的なエラーが発生すると空白ページをレンダリングします。通常は簡単に修正できますが、残念ながら Apache ログ、PHP ログ、または syslog に何も記録されないため、トラブルシューティング プロセスが困難になります。

次のコマンドを使用して php.ini 設定ファイルを見つけます。

php -i | grep "php.ini"

次のような結果が生成されるはずです:

Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

この設定ファイル (この場合は /etc/php.ini) を好みのテキスト エディターで編集し、エラーと起動エラーの表示がオンになっていることを確認します。エントリは次のようになります。

display_errors = On
display_startup_errors = On

最後に、Apache を再起動して、新しい PHP 設定を読み取り、curl またはブラウザ経由でページにアクセスできるようにします。これにより、トラブルシューティング プロセスに役立つエラー メッセージが生成されます。

答え2

最初に行うべきことは、Apache 設定で設定した Apache エラー ログを確認することです。以下にコピーします。

NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.org
     ServerAlias www.example.org
     DocumentRoot /srv/www/example.org/public_html/
     ErrorLog /srv/www/example.org/logs/error.log
     CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>

PHP は Apache で実行されるため、ポップアップするエラーはすべてサーバー ログに表示されます。サーバーにログインしてtail次のように使用することをお勧めします。

tail -f -n 200 /srv/www/example.org/logs/error.log

しかし、それは一般的な Apache ログですか? それとも DigitalOcean の設定ですか? そのパスは/srv/www/example.org/logs/かなり奇妙に思えます。標準的な Linux では、次の場所になります。

tail -f -n 200 /var/log/apache2/error.log

ログが実際にどこに送信されているかに関係なく、それがサーバー上の PHP と Apache で何が起こっているか (または起こっていないか) を知る鍵となります。

関連情報