70

私は、POSTリクエスト内で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

私がやりたいのは、POSTリクエストを送信する予約フォームを用意することです。次に、POST値を処理し、PayPalにPOSTリクエストを再度送信します。

4

24 に答える 24

141

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

Ubuntuでは、経由でインストールできます

sudo apt-get install php5-curl

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

sudo /etc/init.d/apache2 restart

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

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

于 2010-12-18T09:48:58.190 に答える
27

Windows の場合、関心のある方は、php.ini から次の行のコメントを外してください (; を削除してください)。

;extension=php_curl.dll

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

于 2013-06-30T15:39:56.997 に答える
2

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

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"
于 2016-02-08T11:12:40.667 に答える
2

この回答は、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 で機能しない

于 2017-02-17T08:58:44.720 に答える
1

(Windows で PHP と Apache を介して Curl を動作させようとしています...)

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

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

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

私はフォーラムで他の人が言ったことすべてを行っていましたが、私の phpinfo() への呼び出しに curl が表示されず、上記と同じエラーが発生し続けました。

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

それを理解するのに永遠にかかったので、他の誰かに役立つ場合に備えて投稿すると思いました.

于 2014-07-04T03:50:28.117 に答える
0

関数 curl_int(); サーバーエラーを引き起こし、sudo apt-get install php5-curlをインストールし、apache2サーバーを再起動します..それは魅力のように機能します

于 2016-03-12T08:21:21.923 に答える
0

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 したがって、アイドル状態のphp5-をすべて強制終了する必要がありましたcurlモジュールが実際にロードされるように、fpmプロセスはphp5-fpmを再起動できるようにします

sudo kill <Process Id of php5-fpm Process)
于 2014-07-20T02:15:53.593 に答える