web-dev-qa-db-ja.com

curl_init()関数が機能しない

こんにちは、私は PHPポストリクエストをPOSTリクエスト 内で試します。

$sub_req_url = "http://localhost/index1.php";

$ch = curl_init($sub_req_url);
$encoded = '';

// include GET as well as POST variables; your needs may vary.
foreach($_GET as $name => $value) {
  $encoded .= urlencode($name).'='.urlencode($value).'&';
}

foreach($_POST as $name => $value) {
  $encoded .= urlencode($name).'='.urlencode($value).'&';
}

// chop off last ampersand
$encoded = substr($encoded, 0, strlen($encoded)-1);

curl_setopt($ch, CURLOPT_POSTFIELDS,  $encoded);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_exec($ch);
curl_close($ch);

index.phpファイルを作成し、index2.phpは同じディレクトリ内の別のファイルであり、ページを開くとerror.logファイルに次のエラーが表示されます

[Sat Dec 18 15:24:53 2010] [error] [client ::1] PHP Fatal error:  Call to undefined function curl_init() in /var/www/testing1/index.php on line 5

私がしたいのは、投稿リクエストを送信する予約フォームがあり、投稿値を処理してPaypalに投稿リクエストを再度送信することです

54
Santosh Linkha

PhpのCURLサポートをインストールする必要があります。

Ubuntuでは、次の方法でインストールできます

Sudo apt-get install php5-curl

Apt-getを使用している場合、PHP設定を編集する必要はありませんが、Apacheを再起動する必要があります。

Sudo /etc/init.d/Apache2 restart

それでも問題が解決しない場合は、 phpinfo() を使用して、CURLがインストール済みとしてリストされていることを確認してください。 (そうでない場合は、パッケージがインストールされない理由を尋ねる別の質問を開く必要があるかもしれません。)

PHP CURL documentation にインストールマニュアルがあります。

124
RusAlex

Windowsでは、誰かが興味を持っている場合は、php.iniから次の行のコメントを外します(;を削除して)。

;extension=php_curl.dll

Apacheサーバーを再起動します。

23
Kanda

Ubuntuの場合:extension=php_curl.so必要に応じてphp.iniを有効にします。その後、Sudo service Apache2 restart

これは一般的に自動的に処理されますが、共有開発環境など、状況によってはcanが必要になります手動で再度有効にします。

Thumb印は、次の3つの条件すべてに一致します。

  1. Curl_init()呼び出しでの致命的なエラー
  2. php_infoに、curlモジュールの作成者が表示されます(curlがインストールされ、使用可能であることを示します)
  3. php_infoにもcurl configブロックは表示されません(curlがロードされなかったことを示します)
6
Kevin Ard

私はそれをubuntu 16.04で手順に従って動作させました。私のPHPバージョンは7.0でした

Sudo apt-get install php7.0-curl

SudoサービスのApache2の再起動

詳細についてはこちらのリンクをチェックしてください

5
Jose Kj

ステップ1

C:/(path to php folder)/php.ini
enable extension=php_curl.dll

(行末の;を削除します)

ステップ2

これをApache/conf/httpd.confに追加します(libeay32.dll、ssleay32.dll、libssh2.dllはphp7フォルダーで直接検索します)

# load curl and open ssl libraries
 LoadFile "C:/(path to php folder)/libeay32.dll"
 LoadFile "C:/(path to php folder)/ssleay32.dll"
 LoadFile "C:/(path to php folder)/libssh2.dll"
3
Hiruna De Alwis

私の場合、Xubuntuでは、libcurl3 libcurl3-devライブラリをインストールする必要がありました。このコマンドですべてが機能しました:

Sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
3
lightbyte

PHPの複数のバージョンがシステムにインストールされており、php-curlパッケージ、まだApacheは同じエラーを与えています。

php 7でphp-curlが有効になっていても、curl_init()は未定義

2
ultrajohn

このバグを修正するために、次のことを行いました。

  1. php.iniファイル、この行のコメントを外します:extension=php_curl.dll
  2. php.iniファイル、この行のコメントを外します:extension_dir = "ext"
  3. 組み込みサーバーを使用していたため、NETBEANSを再起動しました
2
Rajat26

WindowsプラットフォームでPHP7/Apache 2.4を使用してこのエラーが発生しました。 curl_init CLIからは機能しましたが、Apache 2.4では機能しませんでした。 libeay32.dllとssleay32.dllにLoadFileディレクティブを追加して解決しました。

LoadFile "C:/path/to/Php7/libeay32.dll"
LoadFile "C:/path/to/Php7/ssleay32.dll"
LoadFile "C:/path/to/Php7/php7ts.dll"
LoadModule php7_module "C:/path/to/Php7/php7Apache2_4.dll"
2
fishbone

この回答はhttpsリクエスト用です:

Curlにはルート証明書が組み込まれていません(最新のブラウザーのように)。 cacert.pemファイルを明示的に指す必要があります。

  curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/file/cacert.pem');

これがないと、curlはSSL経由で返送された証明書を検証できません。 curlでSSLを使用するたびに、この同じルート証明書ファイルを使用できます。

Cacert.pemファイルは次の場所から入手できます。 http://curl.haxx.se/docs/caextract.html

参照 PHP cURLがHTTPSで機能しない

1
Amit Garg

Ubuntu 18.04では、これら2つのコマンドでこの問題を解決できます。

Sudo apt-get install php5.6-curl //install curl for php 5.6
Sudo service Apache2 restart //restart Apache
0
Atul Baldaniya

RusAlexの答えは、Apacheの場合、curlをインストールして有効にし、Apacheサービスを再起動する必要があるという点で正しいです。

Sudo apt-get install php5-curl
Sudo service Apache2 restart

Nginxとphp5-fpmを使用したUbuntuサーバーではしかし、次の問題に遭遇しました。私はnginxとphp5-fpmを次のように再起動する必要がありました:

Sudo service nginx restart
Sudo service php5-fpm restart

しかし、動作していないphp5-fpmプロセスがぶらぶらしていました。これは明らかにubuntuのバグです https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376 curlモジュールが実際にロードされるように、すべてのアイドル状態のphp5-fpmプロセスを終了してphp5-fpmを再起動できるようにしなければなりませんでした

Sudo kill <Process Id of php5-fpm Process)
0
Pascal Klein

関数curl_int();サーバーエラーを引き起こし、Sudo apt-getをインストールし、php5-curlをインストールし、Apache2サーバーを再起動します..チャームのように動作します

0
Rajesh Kumar

Linuxの場合は、次の方法でインストールできます

Sudo apt-get install php5-curl

Windowsの場合(;を削除)php.iniから

;extension=php_curl.dll

Apacheサーバーを再起動します。

0
Mohsen Zamani

(PHPおよびWindows上のApache ...経由でCurlを動作させようとしています...)

「未定義関数 'curl_init()'の呼び出し」というエラーが引き続き表示されます

Php.iniファイルで次の行を使用してcurlを有効にしていたことを確認しました:extension = php_curl.dll

次のように、extension_dir変数が適切に設定されていることを確認しました:extension_dir = "ext"

私は他のみんながフォーラムで言ったことをすべてやっていましたが、phpinfo()への呼び出しにカールが表示されず、上から同じエラーが発生し続けました。

最後に、ApacheはデフォルトでC:\ Windowsフォルダーでphp.iniを探すことを発見しました。 PHPインストールフォルダーでphp.iniを変更していました。php.iniをC:\ Windowsにコピーすると、すべてが機能しました。

それを理解するために永遠に私を連れて行ったので、他の人に役立つ場合に備えて投稿すると思いました。

0
jessejuicer

PHP 7およびWindows x64

libeay32.dll、libssh2.dll、およびssleay32.dllはApache/binにあるべきではなく、phpディレクトリにのみ存在し、システム環境変数にphpディレクトリを追加する必要があります。これは私のために働きます。

Php.iniでは、php_curl.dllも有効にする必要があります。

0
Wasim A.

この問題がありましたが、ここで答えが見つかりました: https://askubuntu.com/questions/1116448/cannot-enable-php-curl-on-ubuntu-18-04-php-7-2

する必要がありました:

Sudo a2dismod php7.0

そして:

Sudo a2enmod php7.2

次に:

Sudo service Apache2 restart

これは、システムをUbuntuの次のバージョンにアップグレードした後のものです。私が見つけた他のすべての答えは古いものでした。PPAの証明書は明らかに悪いので、ほとんどの人が指摘しましたが、おそらくうまくいかなかったでしょう。本当の問題は、明らかに古いバージョンのphpを無効にすることでした。

ここで解決策を見つけました:

https://askubuntu.com/questions/1116448/cannot-enable-php-curl-on-ubuntu-18-04-php-7-2

0
jdmayfield