HTTPS에서 작동하도록 file_get_contents ()를 얻으려면 어떻게해야합니까?
카테고리 없음HTTPS에서 작동하도록 file_get_contents ()를 얻으려면 어떻게해야합니까?
저는 신용 카드 처리를 설정 중이며 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);
}
해결법
-
==============================
1.
다음 스크립트를 사용하여 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) { [...] }
-
==============================
2.
https 래퍼 허용 :
php.ini 파일에 존재하지 않으면이 줄을 추가해야합니다 :
extension=php_openssl.dll allow_url_fopen = On
-
==============================
3.
다음을 시도하십시오.
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; }
-
==============================
4.
$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));
이렇게하면 URL에서 HTTPS인지 여부에 관계없이 콘텐츠를 가져올 수 있습니다.
-
==============================
5.
이는 대상 서버가 유효한 SSL 인증서를 가지고 있지 않기 때문인 것 같습니다.
-
==============================
6.
그냥 php.ini 파일에 두 줄을 추가하십시오.
extension = php_openssl.dll
allow_url_include = 설정
나를 위해 일하고.
-
==============================
7.
나에게는 같은 오류가 있었다. php.ini 파일에서 allow_url_include = On으로 설정해주었습니다.
-
==============================
8.
HTTPS는 OpenSSL에 대한 지원으로 컴파일 된 PHP 4.3.0부터 지원됩니다. 또한 대상 서버가 유효한 인증서를 갖고 있는지, 방화벽이 아웃 바운드 연결을 허용하고 php.ini의 allow_url_fopen이 true로 설정되어 있는지 확인하십시오.
-
==============================
9.
제 경우에는 WAMP가 Apache와 다른 php.ini를 사용하기 때문에 WAMP 메뉴를 통한 설정은 CLI에는 적용되지 않습니다. CLI php.ini를 수정하면 제대로 작동합니다.
-
==============================
10.
때때로 서버는 HTTP 요청 헤더 (예 : 적절한 사용자 에이전트)에서 보거나 보이지 않는 것을 기반으로 응답하지 않도록 선택합니다. 브라우저에 연결할 수 있으면 브라우저에서 보낸 헤더를 가져 와서 스트림 컨텍스트에서 그대로 흉내낼 수 있습니다.
-
==============================
11.
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); }
from https://stackoverflow.com/questions/1975461/how-to-get-file-get-contents-to-work-with-https by cc-by-sa and MIT lisence