Apacheはphpファイルを表示する代わりにダウンロードしています


92

OSおよびサーバー情報:

  • CentOS 6.4(最終)
  • Apache 2.2.15
  • PHP 5.5.1

以前にphp 5.3.xをインストールしていましたが、アップグレードすることにしました。最初にphp 5.3.xをアンインストールしてからphp 5.5.1をインストールしましたが、インストールが完了した後、apacheはphpファイルを解析せず、ダウンロードしただけです。ここで、stackoverflowで同様の質問を確認しましたが、これまでのところ、どれも役に立たなかった。

ちなみに、httpd.confとphp.confに次の行があると、phpは機能しますが機能しません。

AddHandler application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php-source .phps
AddHandler php5-script .php

私は本当に助けていただければ幸いです。ありがとうございました。

編集:

私はphp.confにこれらの行を持っています

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

編集:

を削除することによって

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

apacheはファイルをダウンロードしなくなりました。現在、Apacheはソースコードを表示していますが、すべてが一部にすぎません。追加した

AddType text/html .php

しかし運はありません。


さて、どうやってインストールしましたか?どのSAPIですか?どのapacheモジュールが有効化/インストールされているかを確認する方法
マリオ

2
phpモジュールが実行されていません。
Sithu 2013

1
httpd.conf
PHP

1
質問を編集しました。モジュールは終了し、明らかにロードされています
Anthony Gainor 2013

インストール後にApacheを再起動しましたか?
アフマド

回答:


79

PHPの正しいAddTypeはapplication / x-httpd-phpです。

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

また、phpモジュールがロードされていることを確認してください

LoadModule php5_module        modules/mod_php55.so

Apacheを構成しているときに、別のブラウザーからページを表示してみてください。私は、Chromeが頑固に結果をキャッシュし、別のブラウザーで問題なくソースコードをダウンロードし続ける日がありました。


私の場合、モジュールパスはありません
shamaseen

2
これらの行を配置する場所に情報を追加できますか?
セーレン

6
これらの行を配置する場所を探している人のために。 /etc/httpd/conf/httpd.conf
Siraj Alam

私の場合、Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

今日この問題に遭遇しましたが、説明されている解決策はどれもうまくいきませんでした。したがって、別の考えられる原因は次のとおりです。

あなたのようなものがあれば

AddHandler x-mapp-php6 .php3 .php4 .php .phtml

.htaccess、あなたのWebコンテンツフォルダのファイル、それはあなたのPHPスクリプトが動作を停止する可能性があります。私の場合、サーバーはx-mapp-php6タイプを知りませんでした。.htaccessファイルは、Webサイトのコンテンツを転送するときに別のWebホストからインポートしたものだったからです。

ファイルAddHandlerから行を削除するだけで.htaccess解決しました。


完璧です。私の場合、それはAddHandler application/x-httpd-php54 .php54 .php削除されなければならなかったということでした。
Old McStopher 2014年

私はいくつかの問題を抱えていましたが、犯人の.htaccessファイルをホームディレクトリ( "public_html" Webディレクトリの1つ上のディレクトリ)で見つけました。他の誰かが同じ問題を抱えている場合は、親ディレクトリでも.htaccessを探します(設定カスケード)。
Wireblue 2014

私はWebホスティングサーバーからプルしたこのような.htaccessファイルを持っていました。ローカルマシンにインストールされていないバージョンのPHPを強制していました。したがって、仮想ホストはPHPファイルを適切に実行していませんでした。
BrightIntelDusk 2014年

一部のサイトが機能し、他のサイトが機能しない場合、これはほぼ間違いなく問題です。Joomla .htaccessにはAddHandlerが含まれていましたが、WordPressには含まれていませんでした。
Peter Wooster

これは私にとってはうまくいきました、その行をpublic / .htaccessファイルから削除し、インデックスをロードしました。
PA-GW

16

たくさん苦労した後、ようやく問題を解決しました。

.phpファイルを実行するのではなくダウンロードするように求められた場合は、次の方法が最適です。私は、PHP5をすでにインストールしているにもかかわらず、このエラーが発生することを想定しています。

$ sudo su
$ a2enmod php5

これだよ。

しかし、それでもエラーが発生する場合:

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it

次に、以下を実行します。

ファイルはに保存するのmods-enabledではなく、に保存する必要があることが判明しましたmods-available。次に、mods-availableに格納されているファイルを指すmods-enabledにシンボリックリンクを作成する必要があります。

最初にオリジナルを削除します。

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/

次に、シンボリックリンクを作成します。

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

あなたの問題が解決されることを望みます。


2
これはLinux(特にDebian Linux)でのみ機能することに注意してください。
Gwyneth Llewelyn 2017年

6

addtypeディレクティブをご覧ください。

Apacheがブラウザに.php5などの拡張子を持つスクリプト用のapplication / phpのドキュメントタイプを送信していることを伝えているように見えます。実際、Apacheは、スクリプトがtext / htmlを出力していることをブラウザに伝えることになっています。

これを試してください:

AddType text/html .php

上記の提案に関して、PHPスクリプトを出力していることをブラウザーに伝える必要があります。それは私には珍しい考えのように思えました。私はそれをグーグルで調べて、ウェブ上でそれについてかなりの議論があることがわかりました。どうやら、PHPスクリプトを送信していると言いたい場合があります(Apacheはスクリプトを実行してtext / htmlを出力することになっていますが)。ブラウザが特定のMIMEを認識しない場合もあります。タイプ。

ブラウザのキャッシュをクリアすることは常に良い考えです。

役に立つ場合は、CentOS 5.9を実行しているサーバーからの/etc/httpd/conf.d/php.confファイルのコピーを次に示します。

#        
# 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

これは興味深いですが、私の場合、PHPスクリプト全体を出力しますが、今回は(ASCIIのみでフォーマットされているのではなく)HTMLとしてフォーマットされているため、役に立ちません!ここでの問題は、PHPが正しく何とか実行されていない、または間違ったヘッダが送信されていることである...
グウィネスLlewelyn

最後のAddTypeディレクティブ(上記の例ではコメント化されています)により、.phpsファイルがHTMLできれいに印刷されることに注意してください。Apache設定が.phpファイルをきれいに印刷している可能性はありますか?
Sam Azer

5

これは、phpに必要なモジュールがないために発生している可能性があります。php7がインストールされていると仮定して、使用可能なphp7モジュールを検索します

sudo apt-cache search php7-*

上記のコマンドは、インストールに使用できるすべてのPHP7モジュールをリストします。次のようなモジュールのインストールを開始できます。

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json

4

あなたの.htaccessに次のようなものがある場合... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 次にコメントし、もう一度更新してみてください。


3

私は同じ問題を抱えています。Apacheは特定のWebサイトからphpファイルをロードせず、ダウンロードしただけです。私はこの投稿と回答を読み、.htaccessファイルの最後の場所にこの行があることを確認しました。

AddHandler x-mapp-php5.5  .php

私はそれにコメントしました、そして、すべてがうまくいきます。

ありがとうございます !!!


2

5.3から5.4にアップグレードした後、以前に同様の問題が発生しました。しかし、Debianを実行していて、PHP5のapache / cgiモジュールではなく、fcgidを使用してPHPページを処理しているため、私のセットアップは少し異なります。そのため、アップグレード後、php5_cgiもインストールされました。これは、私のfcgidセットアップと衝突し、PHPファイルを実行しなくなります。

Apacheモジュールを無効にしてApacheを再起動する必要がありました

a2dismod php5_cgi
/etc/init.d/apache2 restart

php5_cgiモジュールが邪魔になると、fcgidは再びPHPページを提供できるようになりました。


Awwええ、このトリッキーなcgi粗悪品^^ dotdebからphpを5.3から5.4に更新した後、私の問題を解決しました。
Emii Khaos 2014

2

同様の症状がありましたが、さらに別の解決策がありました:/etc/apache2/mods-enabled/php5.confのコメントに役立つアドバイスがありました。

# To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.

2

Linux環境でphp7を使用している場合

php7を有効にしてください

sudo a2enmod php7

mysqlサービスとApacheを再起動します。

sudo systemctl restart mysql
sudo systemctl restart apache2

2

PHPを7.3に更新した後、以前のように$ USERの代わりにwww-dataで実行されるPHPスクリプト。

PHP-FPMを再インストールしてアクティブ化する必要がありました:

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

Virtualminに問題がないことを確認するために、Vitualmin / System Settingsの下のRe-Check Configurationウィザードを使用しました。/virtual-server/check.cgi

その後、Apache / PHPは実行する代わりにphpファイルをダウンロードしていました。だから私は以下のように/etc/apache2/mods-available/php7.3.conf行をコメントするために編集する必要がありましたSetHandler application/x-httpd-php

<FilesMatch ".+\.ph(ar|p|tml)$">
#    SetHandler application/x-httpd-php
</FilesMatch>

Apacheを再起動した後、私の問題は解決しました。

ブラウザのキャッシュにも注意してください。

私のシステム:

Ubuntu          16.04.6 LTS
Webmin version      1.932
Usermin version     1.780
Virtualmin version  6.08
Apache version      2.4.41
PHP versions        7.3.12
PHP-FPM         7.3.12 Server

1

これを2日間追跡したところ、PHPスクリプトを間違ったディレクトリに配置していることがわかりました。

標準のUbuntuインストールでは、スクリプトをに配置していました/var/www。彼らは中にいたはず/var/www/htmlです。

私はPHPの作業を開始したばかりなので、私の解決策があなたが経験したバージョンの変更に関連しているかどうかわかりません。


1

これは私のために問題を解決しました(私はphp7をインストールしています):

sudo apt-get install libapache2-mod-php7.0

sudoサービスapache2再起動


1

私はこの問題を抱えていました。nginxとapacheの両方がインストールされており、起動時に自動的に起動していることがわかりました。問題は、nginxが最初にhttpポートにバインドしていて、apacheが起動しないことでした。


1

nginxを実行している可能性もありますが、phpはApacheで実行するように設定されています。確認するには、実行してservice nginx statusservice apache2 statusどちらが実行されているかを確認します。nginxが実行されていてapacheが実行されていない場合は、実行するだけでsudo service nginx stop; sudo service apache2 startサーバーは期待どおりにphpファイルを提供します。


1

わかりました...この質問にはすでに1,000.000の回答があることはわかっています。そして私はそれを何百回もグーグルで検索し、それに関する単一の投稿が見つかりませんでした。だから私はここに私の問題に解決策を追加すると思いました。

結論

/etc/apache2/[[SERVER-NAME].conf-file 内の.conf-filesでこれらの2行をコメント化した場合:

php_admin_value engine Off
IPCComTimeout 31

彼らが何をしているのか、どうやってそこに着いたのかはわかりませんが、それは私の.confすべてのファイルにあります。そして、これらの行を削除し、-folderにシンボリックリンクがあることを確認すると/etc/apache2/sites-enabled/、index.phpがダウンロードされず、すべて正常に機能します。

ストーリー全体

VirtualMinをUbuntu 16.04 VPSにインストールしています。PHPバージョン7.2にアップグレードしました。その後まもなく、Ubuntuバージョンを更新し、「カーネルオフセット:無効」エラーを発生させました。だから私は最新のUbuntuバージョンを削除しに行かなければならなかった-そして私のOSが再起動したとき:BOOM!私は彼の投稿が述べているエラーを受け取りました:私のVPSのすべてのサイトについて、それはそれを表示する代わりに単にindex.phpをダウンロードしました。

私はあらゆるものを試しました:

  • PHP7.2を削除し、PHP5.6をインストールしました(PHPバージョンはそれとは何の関係もないことを知っています。作業が必要なのはapache構成です)。
  • 既存のインストールでApacheモジュールの有効化と無効化を試みましたが、運がありませんでした。
  • それから私はapacheを完全削除して再度インストールしましたが、その後問題はまだ残っていました!
  • VirtualMin(Webmin >> Servers >> Apache Webserver)のVirutal Serverセットアップで遊んでみました。
  • 単一の仮想サーバーの構成を確認しました(Virtualmin >>システム設定>>構成の再確認)...このステップは、Apacheのどのモジュールが欠落しているかを通知するので、とても良かったです。後に私はそれを可能にすることができましたa2enmod [MODULE_NAME]。そして、グーグルでモジュール名を見つけました。検証のそのステップを通過する前に、6〜8個のモジュールをアクティブにする必要があり、キャッシュがなくなるまでに数分かかったため、これは面倒なステップでした。
  • そして最後に、上記の結論をシンボリックリンクと合わせて考え出し、それを機能させました。ただし、VPSのすべてのサイトでこれを実行する必要がありました。

0

php5を古いバージョンからMint 17でインストールされたバージョンである5.5.9にアップグレードすると、OPと同様の問題が発生しました。

ローカルネットワーク上のマシンでLAMPセットアップを実行しています。これを使用して、実際のライブサーバーに変更をアップロードする前に、Webサイトへの変更をプレビューします。そのため、実際のサイトの完全なローカルミラーを維持しています。

アップグレード後、実際のサイトで完全に実行および表示されるファイルが表示されないか、ローカルマシンでのみhtmlが表示されます。PHPは解析されませんでした。phpinfo()コマンドが機能したので、phpが他の方法で機能していることがわかりました。ログはエラーを生成しませんでした。ページのソースを表示すると、実際のP​​HPコードが表示されました。

次のコードを含むtest.phpページを作成しました。

<?php phpinfo(); ?>

これはうまくいきました。その後、コマンドに変更<?php<?たときに機能しなくなったことを発見しました。私のすべてのphpサイトが<?代わりに使用するのは<?php理想的ではないかもしれませんが、それは現実です。/ etc / php5 / apache2に移動して「short_open_tag」を検索し、値をオフからオンに変更することで問題を修正しました。


0

上記のいずれも機能しない場合は、

行をコメントアウトしてみてください

SetHandler ....

を使用してApacheを再起動します

/etc/init.d/httpd restart

うまくいくはずです!



0

このような問題が発生しました。これは私がそれを解決する方法です。Apacheをインストールした後、このコマンドを使用してPHPをインストールしました。

sudo apt-get install php libapache2-mod-php

正しく実行されますが、Apacheから.phpファイルを要求します。PHPを実行せずに表示されます。スクリプトを。

次に、PHPが有効になっていることを確認します。

$ cd /etc/apache2
$ ls -l mods-*/*php*

しかし、結果は表示されませんでした。インストール済みのPHPパッケージを確認します。

$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

コンピューターにインストールされているさまざまな種類のPHPバージョン。次に、apt-get purgeを使用して、以前のリストからいくつかのPHPパッケージを削除します。

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

PHPを再インストールします

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

PHPモジュールがロードされていることを確認する

$ a2query -m php7.0

有効になっていない場合:

$ sudo a2enmod php7.0

Apacheサーバーを再起動します

$ sudo systemctl restart apache2

最後に、ApacheでPHPプロセスを確認します

空のファイルを作成する

sudo vim /var/www/html/info.php

このコンテンツをinfo.phpに追加して保存します。

<?php
  phpinfo();
?>

ブラウザで確認:

http://localhost/info.php

正しく表示されます。


0

私はこの問題を抱えていて、サーバー構成設定を実際にプレイしたことがない場合、問題は.htaccessファイルの90%です

.htaccessファイルをローカルで変更するか、それを削除する(ローカル)


0

virtualminがある場合は、/ etc / apache2 / sites-availableのapache構成でこれらの行をコメント化してみてください

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off

0

PHP 7.2からPHP 7.4にアップグレードすると、同じ問題が発生しました。以下を行うことによって働いた:-

  1. [domain].conf file、次のようにコメントしました:

    php_admin_valueエンジンオフ

そして追加:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. mod 7.2を無効にし、7.4を有効にします。

    a2dismod php7.2
    a2enmod php7.4

  2. /etc/apache2/mods-enabled/php7.4.conf、ファイル、次のコメント:

    SetHandlerアプリケーション/ x-httpd-php
    php_admin_flagエンジンオフ


0

ほぼ6年後(およびそれ以降)にGoogleからこの投稿を見つけた人は、Apache 2およびPHP 7でこの問題に遭遇する可能性があります。 UserDirモジュールます。

この問題の別の考えられる原因は、UserDirモジュールから「ユーザーディレクトリ」でスクリプトを実行しようとしていることです。ユーザーディレクトリでのPHPスクリプトの実行は、デフォルトでは無効になっています。スクリプトがpublic_htmlホームフォルダーのディレクトリにあり、からアクセスしようとすると、この問題が発生しますhttp://localhost/~your_username

これを修正するには、を開きます/etc/apache2/mods-enabled/php7.2.conf。下部にあるタグブロックをコメント化または削除する必要があります。

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

-1

あなたの.htaccessがこのようなものを持っているなら

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.