113

クレジットカード処理の設定に取り組んでおり、CURLの回避策を使用する必要があります。次のコードは、テストサーバー(SSL URLを呼び出さなかった)を使用していた場合は正常に機能しましたが、HTTPSを使用して動作中のサーバーでテストすると、「ストリームを開くことができませんでした」というエラーメッセージが表示されて失敗します。

function send($packet, $url) {
  $ctx = stream_context_create(
    array(
      'http'=>array(
        'header'=>"Content-type: application/x-www-form-urlencoded",
        'method'=>'POST',
        'content'=>$packet
      )
    )
  );
  return file_get_contents($url, 0, $ctx);
}
4

13 に答える 13

120

https ラッパーを許可するには:

  • php_openssl拡張機能が存在し、有効になっている必要があります
  • allow_url_fopenに設定する必要がありますon

php.ini ファイルに、存在しない場合は次の行を追加する必要があります。

extension=php_openssl.dll

allow_url_fopen = On
于 2011-09-21T12:11:47.790 に答える
94

次のスクリプトを試して、php スクリプトで使用できる https ラッパーがあるかどうかを確認してください。

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_export($w);

出力は次のようになります

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) {
  [...]
}
于 2009-12-29T17:58:22.867 に答える
63
$url= 'https://example.com';

$arrContextOptions=array(
      "ssl"=>array(
            "verify_peer"=>false,
            "verify_peer_name"=>false,
        ),
    );  

$response = file_get_contents($url, false, stream_context_create($arrContextOptions));

これにより、HTTPS であるかどうかにかかわらず、URL からコンテンツを取得できます。

于 2016-08-02T12:25:58.877 に答える
58

以下を試してください。

function getSslPage($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

注: これにより、SSL 検証が無効になります。つまり、HTTPS によって提供されるセキュリティが失われます。このコードはテスト/ローカル開発にのみ使用し、インターネットやその他の公開ネットワークでは決して使用しないでください。このコードが機能する場合は、SSL 証明書が信頼されていないか、検証できないことを意味します。これは、別の問題として修正を検討する必要があります。

于 2012-09-16T12:34:57.823 に答える
10

これはおそらく、ターゲット サーバーに有効な SSL 証明書がないことが原因です。

于 2009-12-29T16:25:34.817 に答える
6

php.ini ファイルに 2 行追加するだけです。

extension=php_openssl.dll

allow_url_include = On

それは私のために働いています。

于 2013-03-09T22:12:16.373 に答える
5

同じエラーが発生しました。設定allow_url_include = Onphp.ini私のためにそれを修正しました。

于 2011-01-28T23:25:11.753 に答える
5

OpenSSL をサポートするようにコンパイルした場合、HTTPS は PHP 4.3.0 以降でサポートされます。また、ターゲット サーバーに有効な証明書があること、ファイアウォールがアウトバウンド接続を許可していること、およびallow_url_fopenphp.ini が true に設定されていることを確認してください。

于 2009-12-29T16:26:38.887 に答える
3

私の場合、この問題は WAMP が Apache とは異なる CLI 用の php.ini を使用していたため、WAMP メニューで行った設定は CLI には適用されません。CLI php.ini を変更するだけで機能します。

于 2013-01-03T16:22:32.677 に答える
1

サーバーは、http 要求ヘッダー (適切なユーザー エージェントなど) に表示されるものまたは表示されないものに基づいて、応答しないことを選択する場合があります。ブラウザーに接続できる場合は、ブラウザーが送信するヘッダーを取得し、ストリーム コンテキストでそれらを模倣します。

于 2009-12-29T18:27:13.243 に答える
-1

URL が有効かどうかを確認するには

あなたの質問のコードは、作業バージョンに関して書き直すことができます:

function send($packet=NULL, $url) {
// Do whatever you wanted to do with $packet
// The below two lines of code will let you know if https url is up or not
$command = 'curl -k '.$url;
return exec($command, $output, $retValue);
}
于 2017-10-13T11:09:56.917 に答える