ホームページ  >  記事  >  バックエンド開発  >  PHP と HTTPS

PHP と HTTPS

巴扎黑
巴扎黑オリジナル
2016-11-11 11:47:581480ブラウズ

最近、Hacker News API を調査中に HTTPS の問題に遭遇しました。すべての Hacker News API は、通常の HTTP プロトコルとは異なる暗号化された HTTPS

プロトコルを介してアクセスされるため、API で提供されるデータを取得するために PHP の関数 file_get_contents() を使用すると、エラーが発生します

使用されるコードは次のとおりです:

$data = file_get_contents("https://hacker-news.firebaseio.com/v0/topstories.json?

print=pretty " );

....

上記のコードを実行すると、次のエラー メッセージが表示されます:

PHP 警告: file_get_contents(): ラッパー "https " が見つかりません- PHP を設定したときに有効にするのを忘れましたか?

このエラーはなぜ発生しますか?

インターネットで検索したところ、多くの人がこのエラーに遭遇していることがわかりました。私のマシンでは、PHP 設定ファイルに

enabled パラメータがないためです。 /apache/bin/php.ini の項目 ;extension=php_openssl.dll では、その前のセミコロンを削除する必要があります。次のスクリプトを使用して、PHP 環境の構成を確認できます:

$w = stream_get_wrappers();

echo 'openssl: ', extension_loaded ('openssl') 'yes':'no', " n";

echo 'http ラッパー: ', in_array('http', $w) ? 'yes':'no', "n";

echo 'https ラッパー: ', in_array('https', $ w) ? 'yes':'no', "n";

echo 'wrappers: ', var_dump($w);

上記のスクリプト スニペットを実行すると、私のマシンでの結果は次のようになります:

openssl: no

http ラッパー: はい

https ラッパー: いいえ

wrappers: array(10) {

[0]=>

string(3) "php"

[1]= >

string(4) "ファイル"

[2]=>

string(4) "glob"

[3]=>

string(4) "データ"

[4]=>

string( 4) "http"

[5]=>

string(3) "ftp"

[6]=>

string(3) "zip"

[7]=>

string (13) "compress.zlib"

[8]=>

string(14) "compress.bzip2"

[9]=>

string(4) "phar"

}

代替手段

Itエラーを見つけて修正するのは非常に簡単ですが、難しいのは、エラーを見つけた後に修正できないことです。当初はこのスクリプト メソッドをリモート ホストに配置したかったのですが、リモート ホストの PHP 構成を変更できなかったので、このソリューションは使用できませんでしたが、ツリーにハングアップすることはできません。 、この道は死んでいます。別の道があるかどうか確認してください。

PHP でコンテンツをキャプチャするためによく使用するもう 1 つの関数は、file_get_contents() よりも強力で、多くのオプションのパラメーターを提供します。 HTTPS コンテンツへのアクセスの問題については、使用する必要がある CURL 構成パラメーターは次のとおりです:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

セマンティクスから、SSL セキュリティ検証を無視/スキップすることがわかります。これは良い習慣ではないかもしれませんが、通常のシナリオ

では、これで十分です。

以下は、HTTPS コンテンツにアクセスできる Curl によってカプセル化された関数です。

function getHTTPS($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;

}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。