web-dev-qa-db-ja.com

ApacheはHTMLを実行しますが、PHPは実行しません。 PHP CLIは機能します

Apache 2.2.15を搭載したrhel 6.2でphp 5.3.3を実行していて、Apacheによって解釈されるPHPコードを取得できません。

エラーはありません(システムログ、httpd/error_log、またはphp_errors.log)-php.iniでエラー報告を有効にしました:

error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On
log_errors = On
error_log = /var/log/php_errors.log

しかし、次のコードを含むindex.phpをブラウザー(myserver.com/index.phpなど)から直接表示すると、白い画面しか表示されません。

<?php echo 'Hello php World'; ?>

コマンドラインでphpによって実行されると、ターミナル( "Hello php World ")。

次のように、HTMLをindex.phpに追加します。

<html>
    <p>Hello from within html</p>
    <?php echo 'Hello php World'; ?>
</html>

ブラウザで表示すると、「Hello from within html。 "ただし、コマンドラインから実行すると、次のようになります。

<html>
    <p>Hello from within html</p>
    Hello php World</html>

したがって、PHPは、ApacheではなくCLIを介して解析および解釈されます。

Index.phpとその親ファイル構造がApache:apacheによって所有されており、Apacheモジュールのselinuxコンテキストがあることを確認しました。

chcon -t httpd_sys_script_exec_t  /usr/lib/httpd/modules/*
chcon -t httpd_sys_script_exec_t  /usr/lib/php/modules/*

解析する.phpファイル:

chcon -R -h -t httpd_sys_content_t /export1

は正しい。権限エラーが発生せず、selinuxを一時的に無効にしたため、selinuxが問題だとは思わないecho 0 >/selinux/enforce Apacheによって解釈されるphpの結果としての成功はありません。

Phpモジュールはその設定で読み込まれ、.php拡張子はhttpd.confで設定されていると理解されています:

LoadModule php5_module /usr/lib/httpd/modules/libphp5.so
AddType application/x-httpd-php .php .phtml
PHPIniDir /etc/

そして、Apacheはindex.phpを探すことを知っています:

DirectoryIndex index.html index.html.var index.php

httpd.confで設定されているとおり。

私は私の問題がどこにあるかについての考えを使い果たしました-PHP-でも再インストールしてみました-そして確かにどんな考えにも感謝します。それが役に立つ場合、ここに/ var/log/httpd /の内容がありますApacheを起動したときのerror_log:

[Fri Feb 03 13:44:53 2012] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Fri Feb 03 13:44:53 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 03 13:44:53 2012] [warn] module php5_module is already loaded, skipping
[Fri Feb 03 13:44:53 2012] [notice] Digest: generating secret for digest authentication ...
[Fri Feb 03 13:44:53 2012] [notice] Digest: done
[Fri Feb 03 13:44:54 2012] [warn] mod_wsgi: Compiled for Python/2.6.2.
[Fri Feb 03 13:44:54 2012] [warn] mod_wsgi: Runtime using Python/2.6.6.
[Fri Feb 03 13:44:54 2012] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips mod_wsgi/3.2 Python/2.6.6 mod_Perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

助けてください!

4
geoweaser

php5_moduleはすでに自分でロードされており、後でデフォルトのrhel6構成によってロードされたか、rhel6の構成がモジュールphp5_moduleをロードしています...入力している構成がデフォルトのrhel6構成によって上書きされていることを除いて、問題はありません。

Danのサイト からステップ11を見てください。これは、過去に忘れてしまい、簡単なリマインダーが必要なときはいつでもうまくいきました。

# Make sure there's only **1** line for each of these 2 directives:

# Use for PHP 4.x:
#LoadModule php4_module modules/libphp4.so
#AddHandler php-script .php

# Use for PHP 5.x:
LoadModule php5_module modules/libphp5.so
AddHandler php5-script .php 

# Add index.php to your DirectoryIndex line:
DirectoryIndex index.html index.php

AddType text/html .php

# PHP Syntax Coloring
# (optional but useful for reading PHP source for debugging):
AddType application/x-httpd-php-source phps
1
user00265

私にとって、問題はmodがApache2で有効になっていないことでした。

Debianのクリーンインストール、Apache2およびphp7

デフォルトで有効になっているmpm_event modを最初に無効にする必要がありましたが、その理由はわかりません。ちなみに、mpmはPHPを使用するための非常にクリーンな方法です。Apache2modの代わりにそれを検討する必要があります;)しかし、すばやく作業するには:

# a2dismod mpm_event
# a2enmod php7.0
# systemctl restart Apache2

トリックをした:)

楽しい

0
snolahc

同様の問題があり、short_open_tag = On/etc/php.iniを設定することで最終的に修正しました。アップグレード時にはデフォルトの設定ファイルに注意してください!

0
Frank

私の目には明らかなことを述べたが、サンプルファイルへのアクセス方法を述べたことは一度もない。 index.phpに直接アクセスしていますか(つまり http://example.com/folder/index.php

そうでない場合は、index.htmlがある場合、ディレクトリインデックスの順序が原因で代わりに呼び出されることに注意してください。

DirectoryIndex index.html index.html.var index.php

最後に、これはここではなくserverfault.comで確認する必要があります。

0
user00265