web-dev-qa-db-ja.com

空白の取得PHP Apache上のページ

新しくセットアップされたdigitalOceanクラウドサーバー(CentOS)に、phpとApacheをインストールしました。 Webサーバーは正常に動作しています。

_[root@a2m5cent01 httpd]# service httpd status
httpd (pid  11232) is running...
[root@a2m5cent01 httpd]# php --version | head -1
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) 
_

しかし、PHPページにアクセスしようとすると、ブラウザーに空白ページ(白いページ)が表示されます。

トラブルシューティングのためにこれまでに行ったことは次のとおりです。

  1. 次のコンテンツを含むページを作成しました:<?php phpinfo(); ?>。ブラウザから表示すると、空白のページが表示されます。
  2. 念のために、Apacheは正しいディレクトリを指し、そこに静的な_.html_ページを配置し、ブラウザで正常に表示されるので、Apacheは機能し、ディレクトリは正しいです。
  3. _/etc/php.ini_で、_display_errors_ディレクティブをOnに変更しました。まだ空白のページ
  4. Apache構成ファイル(_/etc/httpd/conf/httpd.conf_)でこの行_Include conf.d/*.conf_が見つかりました。 _conf.d_ディレクトリ内には、行_php.conf_を含む_LoadModule php5_module modules/libphp5.so_ファイルがあります。この.soファイルが実際にこの場所に存在することを確認しました。
  5. 同じファイルに、次の2行もあります:_AddHandler php5-script .php_および_AddType text/html .php_
  6. CLIからphpページを実行すると、正常に動作します。したがって、phpはローカルで動作します。

次に、なぜブラウザ上に常に空白のページが表示されるのですか?他に何が欠けていますか?

[〜#〜] edit [〜#〜] @Nathanからの提案に基づいて、

  1. Apacheエラーログファイルをチェックしましたが、エラーが報告されていませんでした。
  2. 私の_/etc/php.ini_によると、php error_logはsyslogとして配置されています。だから_/var/log/messages_をチェックしましたが、PHPエラーメッセージが見つかりませんでした
  3. 次に、phpinfo()呼び出しを含むphpファイルに通常のHTMLを入れます。興味深いことに、通常のHTMLテキストでさえ来ていないことがわかりました。 Itstillは空白ページを生成します。
  4. 次に、Apache accessログを確認しました。驚き! PHP私がブラウザにロードしようとしたファイルにはGETリクエストはありません。しかし[〜#〜] get [〜#〜]すべてのnon-phpファイルのリクエストは200のリターンコードであります。

Apacheはnot PHPファイルへのアクセス要求をログに記録します。なぜそれが起こるのでしょうか?

13
hashbrown

いつかはありましたが、この質問に戻って、ディレクトリ権限の設定に問題があることを更新したいと思いました。

私が使用していたFPMユーザーには、index.phpファイルはWebルートにあります。

将来これらの問題を回避するために、DigitalOceanボックスでWebサーバーを自動的に作成および構成する自動bashスクリプトを作成しました。こちらをご覧ください https://github.com/akash-mitra/fairy

このスクリプトは自動的に、

  • Nginxをインストールします
  • Nginxの仮想サーバーブロックを作成する
  • PHPをインストールします。PHP= APC、PHP Curlなど。
  • サポートPHP Fast Process Manager(php-fpm)
  • Memcachedをインストールします
  • データベースをインストールします(MariaDB/MySQL)
  • オプションでインストールPHP Composer and Laravel
  • SSHの構成と強化
  • ファイアウォールをアクティブにします
  • オプションで、DOサーバーのSWAPスペースを有効にし、ロケールの問題を修正します
0
hashbrown

phpinfo()スクリプトを確認してください。

<?php
phpinfo();
?>

最初の「?」の後ろに「php」がありません空白のページが表示されます

18
linuxmint17

Apacheでのphpインストールに問題があると思います。それがあなたのウェブサーバーにphpページを表示できない理由です。 httpd、php、php-fpm、php-cliなどの既存のアプリをすべて削除し、この順序でisntallを削除します

yum install httpd -y
yum install php php-common php-cli php-Gd php-curl php-fpm -y

その後、必ずhttpdサーバーを再起動してください。

service httpd restart

Mod_fastcgiをインストールします。

yum install  mod_fastcgi

サービスを開始します。

service php-fpm start

Apacheを再起動します。

service httpd restart

5。PHP-FPMを使用したApacheの設定

Fastcgi.confファイルを開きます。

nano /etc/httpd/conf.d/fastcgi.conf

これをファイルの最後に追加します。

<IfModule mod_fastcgi.c>
                DirectoryIndex index.html index.shtml index.cgi index.php
                AddHandler php5-fcgi .php
                Action php5-fcgi /php5-fcgi
                Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -Host 127.0.0.1:9000 -pass-header Authorization
</IfModule>

「FastCgiWrapper」の後に検索し、「off」に設定されていることを確認してからファイルを保存します。

/ usr/lib/cgi-bin /ディレクトリが存在する必要があるため、作成します。

mkdir /usr/lib/cgi-bin/ 

Mod_phpがインストールされて有効になっている場合、無効にする必要があるため、/ etc/httpd/conf.d/php.confで構成を開きます。

nano /etc/httpd/conf.d/php.conf

AddHandlerおよびAddType行をコメントアウトして、次のようにします。

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

ファイルを保存し、Apacheを再起動します。

service httpd restart
5
DeSmOnd

私は同じ問題を抱えています...問題はiptablesにあります。 (そのように思われる

で試してください:

service iptables stop
## check if it stop...
service iptables status

その後、ページを再度リロードしてください。

他のソリューションがある場合は共有してください。

[edit] iptablesサービスの再起動は機能しています。

試してください:

service iptables restart
1
wwwanaya

Phpファイルに直接移動していますか?または、単にディレクトリルートに移動しますか?

後者の場合、Apacheは.phpをディレクトリインデックスとして認識していない可能性があります。

テストするには、次の行を含むWebルートに.htaccessファイルを作成してみてください。

DirectoryIndex index.php
1
Aidan

まず、ファイルの許可を確認する必要があります。読み取り許可をパブリックに許可しない場合、Apacheはエラーを表示せずに空白のページを生成します。

1
Saemmel

古いスレッドを再投稿して申し訳ありません...これは重要です。

また、HTML応答が出力されないこれらの問題がありました

Php.iniまたはApacheのconfファイルを再確認しても出力が表示されない場合は、クラスのinclude/requireのエラーを抑制していることがわかりました。@は、コンストラクター関数。インクルードファイルに構文エラーがあり、エラーがスローされるとすべての出力が完全に停止しました。

したがって、最初にハンドラーを確認してください。最初にすべての出力をvarsに保存し、失敗するさまざまなスクリプトを最初に含める場合、それらのエラーを確認する必要があります。ファイルハンドラーのエラーを抑制した場合、ファイルに構文エラーがあると空白の画面が表示されます。

Phpコードで@のすべてのインスタンスのファイルを検索します。次に、@include "/path_to/script.php";include "/path_to/script.php";または@$foo$fooに変換します。このようなvarは、httpdエラーログまたはhttp応答。

0
Paul Latour

すべてがデフォルト状態に見えるので、確認のためにこの部分をチェックしましたか

cat /etc/php.ini | grep log_errors

Log_errorsが無効になっている場合は、有効にし、httpdを再起動した後にログの下でこれを確認します。 /var/log/httpd/error_log

-また、PHP構成からこの部分を確認します。
cat /etc/php.ini | grep error_reporting

Display_errorsが機能するように、この値はデフォルトで有効にする必要があります。
error_reporting = E_ALL

0
Allie