web-dev-qa-db-ja.com

PHP Ubuntu 16.04のアップグレード後にテキストとしてレンダリングされる

Apacheは、Ubuntu 16.04のアップグレード後にPHPファイルをテキストとしてレンダリングしています。

Apacheがインストールされ、実行されています。 PHP7が実行されています。次のコマンドを実行すると、正しい出力が得られます。

php -r 'echo "\n\nYour PHP installation is working fine.\n\n\n";'

ただし、 http://localhost/info.php またはその他のphpファイルにアクセスすると、ページではなくファイルの内容が取得されます。

オンラインヘルプのほとんどは、UbuntuとPHPの両方の古いバージョンを対象としているため、信頼できるかどうかはわかりません。

更新:libapache2-mod-php7.0をインストールしてphp7.0を有効にすると、Apacheは起動しません。出力を参照してください:

douglas@douglas-Acer:~$ Sudo service Apache2 restart
douglas@douglas-Acer:~$ Sudo apt-get install libapache2-mod-php
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libapache2-mod-php
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/2.960 B of archives.
After this operation, 15,4 kB of additional disk space will be used.
Selecting previously unselected package libapache2-mod-php.
(Reading database ... 263897 files and directories currently installed.)
Preparing to unpack .../libapache2-mod-php_1%3a7.0+35ubuntu6_all.deb ...
Unpacking libapache2-mod-php (1:7.0+35ubuntu6) ...
Setting up libapache2-mod-php (1:7.0+35ubuntu6) ...
douglas@douglas-Acer:~$ Sudo service Apache2 restart
douglas@douglas-Acer:~$ Sudo a2enmod php7.0
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
  service Apache2 restart
douglas@douglas-Acer:~$ Sudo service Apache2 restart
Job for Apache2.service failed because the control process exited with error code. See "systemctl status Apache2.service" and "journalctl -xe" for details.
douglas@douglas-Acer:~$ Sudo apt-get purge php5
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'php5' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

systemctl status Apache2.serviceの出力:

● Apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/Apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/Apache2.service.d
           └─Apache2-systemd.conf
   Active: failed (Result: exit-code) since Dom 2016-04-24 08:21:35 BRT; 14s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 9216 ExecStart=/etc/init.d/Apache2 start (code=exited, status=1/FAILURE)

Abr 24 08:21:35 douglas-Acer Apache2[9216]:  * The Apache2 configtest failed.
Abr 24 08:21:35 douglas-Acer Apache2[9216]: Output of config test was:
Abr 24 08:21:35 douglas-Acer Apache2[9216]: [Sun Apr 24 08:21:35.235583 2016] [:crit] [pid 9226:tid 140666367190912] Apache is running a threade
Abr 24 08:21:35 douglas-Acer Apache2[9216]: AH00013: Pre-configuration failed
Abr 24 08:21:35 douglas-Acer Apache2[9216]: Action 'configtest' failed.
Abr 24 08:21:35 douglas-Acer Apache2[9216]: The Apache error log may have more information.
Abr 24 08:21:35 douglas-Acer systemd[1]: Apache2.service: Control process exited, code=exited status=1
Abr 24 08:21:35 douglas-Acer systemd[1]: Failed to start LSB: Apache2 web server.
Abr 24 08:21:35 douglas-Acer systemd[1]: Apache2.service: Unit entered failed state.
Abr 24 08:21:35 douglas-Acer systemd[1]: Apache2.service: Failed with result 'exit-code'.

journalctl -xeの出力

-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit Apache2.service has finished shutting down.
Abr 24 08:37:59 douglas-Acer systemd[1]: Starting LSB: Apache2 web server...
-- Subject: Unit Apache2.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit Apache2.service has begun starting up.
Abr 24 08:37:59 douglas-Acer Apache2[10261]:  * Starting Apache httpd web server Apache2
Abr 24 08:37:59 douglas-Acer Apache2[10261]:  *
Abr 24 08:37:59 douglas-Acer Apache2[10261]:  * The Apache2 configtest failed.
Abr 24 08:37:59 douglas-Acer Apache2[10261]: Output of config test was:
Abr 24 08:37:59 douglas-Acer Apache2[10261]: [Sun Apr 24 08:37:59.748900 2016] [:crit] [pid 10271:tid 139911432607616] Apache is running a threa
Abr 24 08:37:59 douglas-Acer Apache2[10261]: AH00013: Pre-configuration failed
Abr 24 08:37:59 douglas-Acer Apache2[10261]: Action 'configtest' failed.
Abr 24 08:37:59 douglas-Acer Apache2[10261]: The Apache error log may have more information.
Abr 24 08:37:59 douglas-Acer systemd[1]: Apache2.service: Control process exited, code=exited status=1
Abr 24 08:37:59 douglas-Acer systemd[1]: Failed to start LSB: Apache2 web server.
-- Subject: Unit Apache2.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit Apache2.service has failed.
-- 
-- The result is failed.
Abr 24 08:37:59 douglas-Acer systemd[1]: Apache2.service: Unit entered failed state.
Abr 24 08:37:59 douglas-Acer systemd[1]: Apache2.service: Failed with result 'exit-code'.
Abr 24 08:37:59 douglas-Acer Sudo[10258]: pam_unix(Sudo:session): session closed for user root
Abr 24 08:38:02 douglas-Acer Sudo[10276]:  douglas : TTY=pts/18 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
Abr 24 08:38:02 douglas-Acer Sudo[10276]: pam_unix(Sudo:session): session opened for user root by (uid=0)
Abr 24 08:38:38 douglas-Acer Sudo[10276]: pam_unix(Sudo:session): session closed for user root
Abr 24 08:39:01 douglas-Acer CRON[10297]: pam_unix(cron:session): session opened for user root by (uid=0)
Abr 24 08:39:01 douglas-Acer CRON[10299]: (root) CMD (  [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean)
Abr 24 08:39:01 douglas-Acer CRON[10297]: pam_unix(cron:session): session closed for user root
Abr 24 08:39:01 douglas-Acer CRON[10298]: pam_unix(cron:session): session opened for user root by (uid=0)
Abr 24 08:39:01 douglas-Acer CRON[10300]: (root) CMD (  [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean)
Abr 24 08:39:02 douglas-Acer CRON[10298]: pam_unix(cron:session): session closed for user root
Abr 24 08:39:51 douglas-Acer Sudo[10122]: pam_unix(Sudo:session): session closed for user root
Abr 24 08:39:53 douglas-Acer Sudo[10368]:  douglas : TTY=pts/5 ; PWD=/home/douglas ; USER=root ; COMMAND=/bin/journalctl -xe
Abr 24 08:39:53 douglas-Acer Sudo[10368]: pam_unix(Sudo:session): session opened for user root by (uid=0) 

エラーApache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHPに関して、この問題に関して https://wiki.archlinux.org/index.php/Apache_HTTP_Server でいくつかの助けを見つけましたが、ファイルパスが一致しませんでしたUbuntuで、推奨される修正を適用しようとしませんでした。

19
machadoug

phpコマンドは、Ubuntu 16.04のphp7.0-cliパッケージで提供されます。 CLIの実行は、Webサーバーの構成と直交しています。

Web SAPIのいずれか(Apache2、fpm、またはcgi)をインストールして構成する必要があります。最も簡単なのは、Apache2 SAPIをインストールすることです。

  1. Apache2 SAPIをインストールするには、apt-get install libapache2-mod-phpを実行します(これにより、デフォルトのPHPバージョン、現在libapache2-mod-php7.0が取得されます)。パッケージはそれ自体を有効にし、サポートされる唯一のMPMであるApache2 prefork MPMに切り替える必要があります。そうでない場合は、a2enmod php7.0を実行してエラーを探してください。インストールは、イベントMPMからMPMをプリフォークに自動的に切り替える必要がありますが、そうでない場合は、Sudo a2dismod mpm_eventに続いてSudo a2enmod mpm_preforkを実行することで手動で切り替えることができます。

  2. FPM SAPIをインストールするには、apt-get install php-fpmを実行し、a2enconf php7.0-fpmを実行してFPMを有効にします。 FPM SAPIはより安全ですが、正しく構成するのは困難です。

  3. CGI SAPIをインストールするには、apt-get install php-cgiを実行し、a2enconf php7.0-cgiを実行してCGIを有効にします。 CGIがPHPの実行方法として推奨されているわけではありませんが、特別な展開では便利な場合があります。

26
oerdnj

Libapache2-mod-php7.0をインストールして、再び実行しました。お役に立てれば。

1
Tommy Holt

また、私はこの問題に別の方法で噛まれました:

デフォルトでは、PHPスクリプトはユーザーディレクトリで実行されません。サーバーがユーザーのホームフォルダーでpublic_htmlをサポートし、ユーザーがその中でphpを実行できるようにする場合は、php7.0.confで無効にする部分を削除する必要があります。

0
Calmarius

最新のApache 2.0で、Ubuntu 16.04.2の場合、Apacheはスレッドを有効にして事前に設定されていますが、デフォルトのPHP 7は設定されていません。 PHPがスレッドセーフでコンパイルされていない場合、スレッドを使用しないプリフォークMPMに切り替える必要があります。

これを行うには、まず無効にします:

Sudo a2dismod mpm_event 

次に、有効にします。

Sudo a2enmod mpm_prefork 

これらは相互に排他的であるため、正しい順序で行う必要があります。

次に、Apacheを再起動します。

Sudo service Apache2 restart

あなたは今問題なく行くのが良いはずです。

0
Jeff Galbraith