PHP
Apache
Web
PHP7

phpのコードの部分が, コメントアウトされてしまう!スクリプトがダウンロードされてしまう!ときの対処法:

apacheでローカルサーバーを立てて, phpを埋め込んで, アクセスしたのに, phpのコードが動いていない.

chromeの検証をしてみると, phpのソースコードの部分が, コメントアウトされている!?

または, 127.0.0.1にアクセスした途端, ダウンロードが開始される.

ダウンロードされたものが, ソースコードだった.

ほとんどの記事が, 拡張子を.phpにするだけで解決する問題ばかり.

自分の場合, きちんと拡張子は, .phpになっていたので, どうしたものかと困っていました.

今回は, 自分がとった対処法を紹介します.

まず環境から

環境

OS

OS: windows 10

WSL(Windows Subsystem for linux)で, Ubuntu 18.04で, apacheを使って, ローカルサーバーを立てている

apacheのバージョン

apache2 -vで, バージョン情報を出力できる.

$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2018-04-18T14:53:04

お次に, phpのバージョン.

phpのバージョン

これも, php -vでいける.

$ php -v
PHP 7.0.30-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.30-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

解決法というか, 解決するために取った方法

まずやったこと

  • 拡張子をチェックする
  • php, apache関連のパッケージ全削除, そして入れ直すが, 状況変わらず...
  • moduleが足りていないという記事を見つけて, モジュールを入れたら直った!

なので, ubuntu16.04で同じ状況の方は, 3番目のmoduleを入れれば直ると思います.

拡張子をチェック

拡張子が, .htmlの場合は, phpのソースコードの部分は, コメントアウトされるように設定されています(セキュリティの問題).

そのため, .phpにすれば, 動きます.

僕はこれに当てはまらなかったので, 設定ファイルがおかしなことになっているのでは?と思い, php関連の全部削除して, もう一度入れ直しました.

php, apache関連のパッケージ全削除, そして入れ直す

php関連のファイルが, たくさん入っていました.

$ sudo apt list --installed | grep php

でやったら山ほど出てきました.

一気に消すには, aptのサブコマンド(?)であるpurgeを使います.

sudo apt purge 'php*'

で, php関連のファイルはすべて削除されます.

同じく,

sudo apt purge 'apache*'

を実行すれば, apache関連のパッケージも削除されます.

そして, もう一度再インストールしてみます.

インストールする前に, upgradeしておきましょう.

sudo apt upgrade

そして, もう一度インストールしましょう.

sudo apt install php apache2

そして, もう一度localhostにアクセスしてみましょう.

僕はうまくいきませんでした.

そして, aksUbuntuで解決策を見つけました!!

PHP script not executing on Apache serverで!

a2queryというコマンドがあり, これは, apach2のconfの情報を取得するコマンドです.

詳細は, man a2queryで見てください.

a2query -m php7.0

を叩くと,(-mオプションは, 引数のmoduleが動いているか確認する)

No module matches php7.0

と出て, moduleが動いてないことが判明!!!

そして, libapache2-mod-phpを入れなければいけないことが, わかりました.

sudo apt install libapache2-mod-php

そして, apache2を再起動して, もう一度, a2query -m php7.0を叩くと,

$ sudo service apache2 restart
$ a2query -m php7.0
php7.0 (enabled by maintainer script)

めでたく, enabledになっているので, localhostにアクセスすると, 正常に機能していました.

原因は, apache2のサーバーに, phpのmoduleがなく, phpのscriptをうまく解析できていないことによるエラーだったと思います.

ほかで使っているパソコンのUbuntu18.04では, このpackagelibapache2-mod-phpを入れた覚えもありませんでしたし, このエラーが起きませんでした.

Ubuntu16.04特有なのかもしれません.

参考文献

PHP script not executing on Apache server