web-dev-qa-db-ja.com

php7で有効になっている場合でも、未定義の関数curl_init()を呼び出します

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
38
Sab

XX(16.04)へのアップグレード後にcurlで同様の問題が発生しました。次を使用してcurlを再インストールした後:

Sudo apt-get install php-curl

サーバーの再起動

Sudo service Apache2 restart

すべてが正常に戻りました:)

82
Deus777

仮定

使用している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サイトの問題のあるページを更新すると、エラーはなくなりました。

17
ultrajohn

上記のすべてを実行しましたが、問題は解決しませんでした。

環境: Ubuntu、php7.1、Laravel 5.6

ソリューション

Sudo add-apt-repository ppa:ondrej/php
Sudo apt-get install php7.1-curl
5
Sheraz Ahmed

私にとっての解決策は、次のコマンドでapt-getを更新し、php7.0-curlをインストールすることでした。

Sudo add-apt-repository ppa:ondrej/php
3
Kevin Hill

ファイルパスが間違っている可能性が高い

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
3
leopold

おそらく、ページはCLI SAPIで生成されません。 Webサーバーから実行したときにphpinfo()が返すものを確認します(おそらく、間違ったiniファイルを読み取ろうとしています)。

1
symcbean

私は非常に遅い答えを知っていますが、同じ問題に直面し、上記のすべての解決策を試しましたが、うまくいかなかったので、私は有用だと思います。それから私は次のコマンドを押して、今完璧に動作しています:

apt-get install php7.0-curl
1
  • ステップ1:Php 7をダウンロード
  • ステップ2:libeay32.dllとssleay32.dllをコピーして、C:\ Windows\System32に貼り付けます.
  • ステップ3:C:\ php\extのphp_openssl.dllとphp_curl.dllを最新のdllに置き換えます。 Apacheを再起動します

これは私の問題の問題を修正しました、誰かが利益をもたらすことを願っています

0
Mark Wandatha