>  기사  >  백엔드 개발  >  PHP와 HTTPS

PHP와 HTTPS

巴扎黑
巴扎黑원래의
2016-11-11 11:47:581482검색

최근 Hacker News API를 조사하는 동안 HTTPS 문제가 발생했습니다. 모든 Hacker News API는 일반 HTTP 프로토콜과 다른 암호화된 HTTPS

프로토콜을 통해 접근하기 때문에 PHP에서 file_get_contents() 함수를 사용하여 API

데이터 입력시 오류가 발생했습니다. 사용된 코드는 다음과 같습니다.

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

print=pretty");

......

위 코드를 실행하면 다음과 같은 오류 메시지가 나타납니다.

PHP 경고: file_get_contents(): 래퍼 "https"를 찾을 수 없습니다.

PHP를 구성할 때 활성화하는 것을 잊으셨나요?

왜 이런 오류가 발생하나요?

인터넷에서 검색한 결과 많은 사람들이 이 오류를 발견했습니다. 문제는 매우 직접적입니다.

이 PHP 구성 파일에서 활성화되어 있지 않기 때문입니다. .

매개변수를 활성화합니다. 내 컴퓨터에서는 /apache/bin/php.ini에 있습니다. 확장자=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 '래퍼: ', var_dump($ w);

위 스크립트 조각을 실행하면 내 컴퓨터의 결과는 다음과 같습니다.

openssl: no

http 래퍼: 예

https 래퍼: 아니요

래퍼: array(10) {

[0]=>

string(3 ) "php"

[1]=>

string(4) "파일"

[2]=>

string(4) " glob"

[3]=>

문자열(4) "데이터"

[4]=>

문자열(4) "http"

[5]=>

string(3) "ftp"

[6]=>

string(3) "zip"

[7]=>

문자열(13) "compress.zlib"

[8]=>

문자열(14) "compress.bzip2"

[9]=>

string(4) "phar"

}

대안

매우 간단합니다. 오류를 찾아서 수정하는 것 어려운 점은 오류를 찾은 후에는 수정할 수 없다는 것입니다. 원래는 이 스크립트 메소드를 원격 호스트에 넣고 싶었지만 원격 호스트의 PHP 구성을 수정할 수 없었습니다. 결과적으로 이 솔루션을 사용할 수 없었는데 동일한 서버에서는 할 수 없습니다. .

이 길은 작동하지 않습니다.

PHP에서 콘텐츠를 가져오는 데 자주 사용하는 또 다른 함수는 컬입니다. 이 함수는 file_get_contents()보다 강력하고 많은 옵션을 제공합니다

매개변수를 선택합니다. HTTPS 콘텐츠에 액세스하는 문제의 경우 사용해야 하는 CURL 구성 매개변수는 다음과 같습니다.

cur_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

보실 수 있습니다 의미상으로 SSL 보안 확인을 무시/건너뛰는 것입니다. 어쩌면 이것은 좋은 습관이 아닐 수도 있지만 일반적인 시나리오에서는

이면 충분합니다.

다음은 HTTPS 콘텐츠에 액세스할 수 있는 Curl로 캡슐화된 함수입니다.

function getHTTPS($url) {

$ch = 컬_init();

컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

컬_setopt($ch, CURLOPT_HEADER, false);

컬_setopt($ch , CURLOPT_FOLLOWLOCATION, true);

컬_setopt($ch, CURLOPT_URL, $url);

컬_setopt($ch, CURLOPT_REFERER, $url);

컬_setopt($ch , CURLOPT_RETURNTRANSFER, TRUE);

$result =curl_exec($ch);

curl_close($ch);

return $result;

}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.