16.04にアップグレードします。php7がブラウザーで機能しない


69

14.10から16.04にアップグレードしたばかりで、ApacheでPHP 7を構成する方法がわかりません。php7.0.confファイルを変更して、最後の行のコメントを外し、apache2を再起動しましたが、変更はありませんでした。

phpを許可するには、apache2セットアップを変更する必要がありますか?

PHPはコマンドラインから機能するため、PHPが正しくインストールされていると確信しています。

さらに、phpstringでmbstringが欠落しているというエラーが表示されます。


1
稼働中のCLI SAPI(phpコマンド)は他のPHP SAPI(apache2、FPM、CGIなど)と直交しているため、稼働中のコマンドラインPHPは、HTTPサーバーでの稼働中のPHPについて何も述べていません。
oerdnj

2
mbstringがない場合:(sudo apt-get install php-mbstringだれが考えていたでしょうか?)
oerdnj

「php7 not browser in browser」とはどういう意味ですか?Apacheが起動しないという話ですか?PHPはクライアント側の言語ではありません。
アンドレアラザロット

これらすべての回答がmpm-preforkとmod-phpを有効にするようユーザーに指示するのを見るのは本当に憂鬱です。これは大きな後退です。
アンドリューエンスリー

回答:


81

前と同じように、Apache用のPHPをインストールする必要があります。

サーバーガイドから:

sudo apt install php libapache2-mod-php

このコマンドは、PHPおよびApache 2 PHPモジュールをインストールします。以前のようにApacheを設定するだけです(sudo a2enmod php7.0、私は思う、モジュールをオンにします)。


あなたのmbstring問題は似ています-その拡張機能をインストールする必要があります:

sudo apt install php7.0-mbstring

他の欠落モジュールについても、同様にインストールする必要があるものがあります。


phpモジュールは、インストール時にデフォルトで有効になっている必要があります。そうでない場合、それがいっぱいにする必要がありsudo a2enmod php7.0、興味深い、私が得たこのメッセージ(またはので、私は自分のコンピュータ上で無効にして再有効化によって決定。):Considering conflict php5 for php7.0: Enabling module php7.0.
ダグSmythies

@DougSmythiesモジュールを有効にする必要があると言った箇所を読んでいないと思います...
トーマスウォード

1
はい、私はそうしました、それが私がコメントをした理由です。sudo a2enmod php動作しません、私はそれを試しました。しかし、sudo a2enmod php7.0動作します。
ダグスミティーズ16

1
これは正解としてマークする必要があります。Ubuntu 16.04の新規インストールには、デフォルトでこのapache2モジュールは含まれていません。
セロシンディス

@Selosindis絶対に同意しました!それでも、迷惑なのは、Ubuntu 16.04では、標準のインストールプロセスが古いバージョンと比較して変わったことです。
ソクラテス

40

サーバーで実行するようにphp7を構成するには、いくつかの構成を行う必要があります。

1.の痕跡をすべて削除してください。 php/php5

ターミナルを開いてCtrl+ Alt+ Tおよび:

cd /etc/apache2/mods-enabled
ls -la

出力にはor が含まれていてはなりませんが、含まれている場合は以下を実行します。php5.confphp5.load

# this is the proper way of disabling modules
sudo a2dismod php5

# run this only if the above command didn't remove the php5 sym-links
sudo rm php5.load
sudo rm php5.conf

次にphp7.0.confphp7.0.load代わりにand を追加します。

# this is the proper way of enabling modules
sudo a2enmod php7.0

# run this only if the above command didn't create the php7.0 sym-links
sudo ln -s php7.0.conf ../mods-available/php7.0.conf
sudo ln -s php7.0.load ../mods-available/php7.0.load

の出力は次のls -la php*ようになります。

lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.conf -> ../mods-available/php7.0.conf
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.load -> ../mods-available/php7.0.load

モジュールを処理した後、/etc/apache2/conf-enabledディレクトリに移動します。ここでもphp / php5の痕跡を削除します。sudo rm <name>

次に、必要に応じて以下を実行します。

# the proper way of enabling configs
sudo a2enconf php7.0-cgi
sudo a2enconf php7.0-fpm

# do those commands only if the above didn't work out
sudo ln -s php7.0-cgi.conf ../conf-available/php7.0-cgi.conf
sudo ln -s php7.0-fpm.conf ../conf-available/php7.0-fpm.conf

の出力は次のls -la php*ようになります。

lrwxrwxrwx 1 root root 33 Apr 21 17:00 php7.0-cgi.conf -> ../conf-available/php7.0-cgi.conf
lrwxrwxrwx 1 root root 33 Apr 21 17:01 php7.0-fpm.conf -> ../conf-available/php7.0-fpm.conf

2. Apache2の再起動

Apacheを再起動する前に、Apacheを削除してerror.logから再起動してください。

sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

ここでerror.log発行して確認しますcat /var/log/apache2/error.log | less(lessをパイピングすると、簡単に上下にスクロールできq、出力が終了します)。

あなたのerror.log多くが含まれている場合(そして私は文字通りヒープを意味します)、いくつMIBS not foundかは次のことを行います:

sudo apt install libsnmp-dev
sudo net-snmp-config --snmpconfpath
sudo apt-get install snmp snmp-mibs-downloader
sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

もう一度チェックすると、error.log3行のみになります。

[Sat Apr 23 01:39:07.504005 2016] [mpm_prefork:notice] [pid 1647] AH00169: caught SIGTERM, shutting down
[Sat Apr 23 01:39:08.685774 2016] [mpm_prefork:notice] [pid 9590] AH00163: Apache/2.4.18 (Ubuntu) mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Sat Apr 23 01:39:08.685938 2016] [core:notice] [pid 9590] AH00094: Command line: '/usr/sbin/apache2'

これで、php7.0を使用したApacheが適切に構成されます。


2
使用a2enmoda2dismodの代わりに手動でリンクいじりコマンドmods-available/ mods-enabled(同様に、a2enconfそしてa2disconfためconf-{available,enabled})。
ムル

1
入力に応じて私の答えを修正しました。
Videonauth

リンクをいじるには、のように有害であるa2enmoda2dismodので、リンクを手動でアップグレード・スクリプトは、この内部データベースの状態を見て、あなたのシステムが将来のアップグレードのために壊れて作るかもしれません削除/作り、内部のapache2パッケージレジストリ内のモジュールの状態を覚えています。
oerdnj

@oerdnj:オムレツは、卵を破ることがあります...作る ;-)
Fabby

1
@David Wright-ユーザーディレクトリからPHPスクリプトを実行しようとしている可能性があります-これらはデフォルトで無効になっています。その場合、php7.0.confを開き、最後の部分をコメントアウトする必要があります。もっとここdevplant.net/2010/05/04/...
xcxc

12

この問題もありました。

すべてのPHPを削除してphp7を再インストールするのに役立ちました。

必要だったのは次のとおりです。

sudo apt-get purge php*

php7は削除され、その後再インストールするだけです:

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

1
私は以前にいくつかのことを試しましたが、この方法はうまくいきます。ありがとうございました!!!
スリカントポナパリ

1
ああ、神様。あなたは私を救いました。
plhn

これは私のために働いた唯一のソリューションです。乾杯!
-geevee

これは私を助けてくれました。Ubuntuのアップグレード後、conf-avaliableにphp7.0-cgiが見つかりませんでした。ただし、実行sudo apt-get purge php*するとphpMyAdminも削除されます(ある場合)。
ArturCzyżewski

8

私の場合、phpが機能していなかっただけでなく、phpmyadminも私はそのようなステップバイステップでした

sudo apt install php libapache2-mod-php
sudo apt install php7.0-mbstring
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

そして次に:

gksu gedit /etc/apache2/apache2.conf

最後の行に追加します Include /etc/phpmyadmin/apache.conf

それはすべての問題に対処する


7

この問題の解決策は、short_open_tagのデフォルトのPHP.INI設定です。デフォルトでは、これは「オフ」に設定されています。私のPHPコードは

   <?

の代わりに

   <?php

(php.iniで 'Off'を 'On'に変更することにより)short_open_tagを有効にし、Apacheサーバー(sudo service apache2 restart)をリセットすると、PHPが生き返ります。


OMMFG!もちろん、私にとって最終的に機能したのは、賛成票を含む最後のコメントです!本当にありがとうございます、@ patrick !!!
-hyperGeoMetric

0

https://wiki.archlinux.org/index.php/Apache_HTTP_Server

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

注:libphp7.sowith php-apacheはwith では機能せずmod_mpm_event、代わりにのみ機能する ため、上記が必要ですmod_mpm_prefork。(FS#39218

そうしないと、次のエラーが表示されます。

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1

別の方法として、以下mod_proxy_fcgi使用できます(下記のphp-fpmおよびmod_proxy_fcgiの使用を参照)。


0

私も、Ubuntu 16.04ではコマンドラインからphpスクリプトを正常に実行できましたが、どのブラウザーでも実行できませんでした。この問題を解決するために、php7.0とapache2の両方の既存のコピーを削除しました。その後、apache2のphpライブラリを含むコマンドラインから両方を再インストールしました。「a2enmod php7.0」を実行しようとすると、フラストレーションが続きました。これは、コマンドラインからphpスクリプトを再度実行できるにもかかわらず、php7.0モジュールが存在しないことを通知しました。本能が作動しました。Synapticを開いて、コマンドラインからapache2 phpライブラリをインストールしたとき、libapache2-mod-php7.0のみをインストールし、「ラッパー」libapache2-mod- php、これがないと前者は機能しません。


1
「ラッパー」の名前は何ですか?
EKons
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.