Ubuntuにphp7をインストールしました。最初は問題ありませんでした。私のWebサイトは機能していました。しかし、突然、Call to undefined function curl_init()エラーを返し始めました。現在、私のページにはカールコードが含まれていません。
Phpinfo()では、Curlが有効になっています。同様の質問がありましたが、php7で処理したものはありませんでした。私はそれが他のものとは異なるものであるべきだと思った。
編集:しようとすると
php -i | grep curl
ターミナルでは、戻ります
/etc/php/7.0/cli/conf.d/20-curl.ini,
curl
XX(16.04)へのアップグレード後にcurlで同様の問題が発生しました。次を使用してcurlを再インストールした後:
Sudo apt-get install php-curl
サーバーの再起動
Sudo service Apache2 restart
すべてが正常に戻りました:)
仮定
使用しているPHPバージョンのモジュールのバージョンをインストールしましたが、問題は解決していません。
ここで何が起こっていますか?
システムにPHPの複数のバージョンがインストールされている可能性がありますが、Apacheは使用する予定のバージョンを使用していません。
Apacheが使用しているPHPのバージョンはどのようにしてわかりますか?
これを知るための重要なアイデアは、Apacheの構成ファイルのROOTディレクトリを学習することです。コマンドラインでは、次のように入力できます。
Apache2ctl -V //sample output below
AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.7 (Ubuntu)
Server built: Jul 15 2016 15:34:04
Server's Module Magic Number: 20120211:27
Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/Apache2"
-D SUEXEC_BIN="/usr/lib/Apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/Apache2.pid"
-D DEFAULT_SCOREBOARD="logs/Apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="Apache2.conf"
私の場合、ApacheのROOT設定ディレクトリは
HTTPD_ROOT="/etc/Apache2"
Apacheが使用している設定の場所がわかったので、"mods-enabled"
ディレクトリ内にある"/etc/Apache2"
ディレクトリを調べることで、使用しているPHPのバージョンを正確に判断できるようになりました。 。
私の場合、"mods-enabled"
内でls
を実行すると、ff出力が表示されました。
access_compat.load authz_user.load filter.load php5.load
...
authz_Host.load env.load php5.conf
この時点で、Apacheが私のシステムにインストールされているPHPの'php5'
バージョンを使用していることは確かです。
次に、以下のコマンドを実行して、このバージョンのPHP(つまり、'php5'
)を使用して上記のエラーを再現しようとしました。
$ php5 -r "curl_init();"
PHP Fatal error: Call to undefined function curl_init() in Command line code on line 1
出来上がり!
Apacheが使用していると予想したPHPのバージョンは"php5.6"
であり、このバージョンで上記と同じコマンドを実行しても、上記のエラーは発生しませんでした。
ソリューション
この問題を解決するには、Apacheが使用しているPHPバージョンに対応するモジュールのバージョン(私の例ではphp5.0-curl)をインストールするか、PHP必要なバージョンにApacheで使用されています。
使用するPHPのバージョンをApacheに伝えるにはどうすればよいですか?
これは、Apache2のa2enmod/a2dismod
cliコマンドを使用して実現できます。
まず、サーバーで現在アクティブなPHPモジュールを無効にします(つまり、"php5"
):
a2dismod php5
次に、Apacheで使用するPHPのバージョンのphpモジュールを有効にしました。
a2enmod php5.6
次に、Apacheを再起動します
service Apache2 restart
Webサイトの問題のあるページを更新すると、エラーはなくなりました。
上記のすべてを実行しましたが、問題は解決しませんでした。
環境: Ubuntu、php7.1、Laravel 5.6
ソリューション
Sudo add-apt-repository ppa:ondrej/php
Sudo apt-get install php7.1-curl
私にとっての解決策は、次のコマンドでapt-getを更新し、php7.0-curlをインストールすることでした。
Sudo add-apt-repository ppa:ondrej/php
ファイルパスが間違っている可能性が高い
Apacheエラーログインを確認してください
/var/log/Apache2/error.log
呼び出されたパスまたはファイル名が実際のパスと一致する場合.
/usr/lib/php/20151012/php_curl.so
私の場合、それは同じパスでしたが、「php_」が欠落していました
/usr/lib/php/20151012/curl.so
したがって、それに応じてパス/ファイル名を変更しました
/etc/php/7.0/cli/conf.d/20-curl.ini
から
extension=php_curl.so
に
extension=curl.so
おそらく、ページはCLI SAPIで生成されません。 Webサーバーから実行したときにphpinfo()が返すものを確認します(おそらく、間違ったiniファイルを読み取ろうとしています)。
私は非常に遅い答えを知っていますが、同じ問題に直面し、上記のすべての解決策を試しましたが、うまくいかなかったので、私は有用だと思います。それから私は次のコマンドを押して、今完璧に動作しています:
apt-get install php7.0-curl
これは私の問題の問題を修正しました、誰かが利益をもたらすことを願っています