[php] 래퍼 “https”를 찾을 수 없습니다. PHP를 구성 할 때 랩퍼를 활성화하는 것을 잊었습니까?

문제는 문제입니다. 나는 이것과 관련하여 해결책을 철저히 조사했으며 이것에 관한 주제가 있다는 것을 알고 그것을 따라 갔으며 아무것도 효과가 없었습니다. 그것은 지금까지 내가 한 모든 것을 정확하게 나열하겠다고 말하고 있습니다. Windows XP 컴퓨터의 최신 Eclipse 버전에서 Zend Debugging으로 PHP 5.2.14를 실행하고 있습니다. 1GB의 RAM이 있습니다. Apache, MySQL 및 FileZilla가 설치된 XAMPP가 설치되어 있습니다.

XAMPP에서 다음을 수행했습니다 (이 변경 중에 Apache가 꺼져 있음). XAMPP 제어판 에서 관리자 를 클릭 하고로 이동했습니다 https:// localhost/xampp/. 거기에서 나는 환영 페이지 의이 줄의 인증서를 수락했습니다.

OpenSSL 지원을 위해서는 https : // 127.0.0.1 또는 https : // localhost와 함께 테스트 인증서를 사용하십시오.

같은 섹션에서 확인했습니다 phpinfo(). ‘환경’에서 SERVER["HTTPS"]입니다 on. ‘Apache Environment’에서 HTTPS입니다 On. ‘PHP 변수 아래에서 _SERVER["HTTPS"]입니다 On. ‘의 Phar’에서 OpenSSL support한다 disabled(내선 / openssl을 설치). Phar를 활성화하는 방법을 모르겠습니다.

이제 C : \ xampp의 파일 자체에 관해 PHP 폴더로갔습니다. (죄송합니다보다 안전한) 모두 생산 및 개발의 php.ini 파일에서, 내가 가진 allow_url_fopen=On, allow_url_include=On그리고 그 때문에 나는, 세미콜론을 제거되지 extension=php_openssl.dll더 이상 주석. 심지어 .dll이 PHP 폴더의 ext 폴더에 있음을 확인했습니다. libeay32.dll 및 ssleay32.dll은 모두 PHP 및 Apache 폴더에 있습니다. Apache 폴더에는 생산적이거나 개발적인 php.ini 파일이 없습니다.

안전한 측정 을 위해 http://www.slproweb.com/products/Win32OpenSSL.html로 이동 하여 Win32 OpenSSL v1.0.0d를 설치했습니다.

이제 retrieve_website.php에서 문제의 코드 줄은 다음과 같습니다.

$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);

쿼리하는 두 개의 다른 웹 사이트가 있지만 HTTP를 통해 제공되며 제대로 작동합니다. 스크립트 끝 근처에 다음 코드 줄을 입력했습니다.

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_dump($w);

Eclipse에서 PHP 스크립트로 실행하면 모든 결과가 다음과 같이 원하는 방식으로 완벽하게 출력됩니다.

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(10) {
  [0]=>
  string(5) "https"
  [1]=>
  string(4) "ftps"
  [2]=>
  string(3) "php"
  [3]=>
  string(4) "file"
  [4]=>
  string(4) "data"
  [5]=>
  string(4) "http"
  [6]=>
  string(3) "ftp"
  [7]=>
  string(13) "compress.zlib"
  [8]=>
  string(14) "compress.bzip2"
  [9]=>
  string(3) "zip"
}

이러한 모든 변경 사항에도 불구하고 (Apache를 시작한 후) http : //localhost/tutorial/retrieve_website.php 를 통해 Eclipse 및 Firefox에서 PHP 스크립트에 처음 액세스 할 때 여전히 동일한 오류가 발생 합니다 .

경고 : file_get_contents () [function.file-get-contents] : 래퍼 “https”를 찾을 수 없습니다. PHP를 구성 할 때 활성화하는 것을 잊었습니까? C : \ xampp \ htdocs \ tutorial \ retrieve_website.php 29 행

경고 : file_get_contents (https : // www.googleapis.com/customsearch/v1?key= 제거 된 API ID & cx = 제거 된 검색 ID & q = The + Devil + went + down + to + Georgia & alt = atom & num = 5) [function.file-get-contents] : 스트림을 열지 못했습니다 : 29 행의 C : \ xampp \ htdocs \ tutorial \ retrieve_website.php에 해당 파일 또는 디렉토리가 없습니다.

경고 : DOMDocument :: loadXML () [domdocument.loadxml] : 33 행의 C : \ xampp \ htdocs \ tutorial \ retrieve_website.php에 입력으로 제공된 빈 문자열

openssl : 아니요 http 래퍼 : 예 https 래퍼 : 아니요 래퍼 : array (10) {[0] => string (3) “php”[1] => string (4) “file”[2] => string (4 ) “글로브”[3] => 문자열 (4) “데이터”[4] => 문자열 (4) “http”[5] => 문자열 (3) “ftp”[6] => 문자열 (3) ” zip “[7] => 문자열 (13)”compress.zlib “[8] => 문자열 (14)”compress.bzip2 “[9] => 문자열 (4)”phar “}

내가 간과하거나 실패한 것은 무엇입니까? 내 자신의 지식으로, 나는 HTTPS와 OpenSSL에 관해 내가 연구 한 모든 것을 다했다.



답변

내가 주석 처리 XAMPP에서 그것을 해결 ;extension=php_openssl.dll/apache/bin/php.ini 불구하고 은 phpinfo () 나에게 말하고 /php/php.ini로드 INI 파일이었다.

편집 : Ezra 답변은 적절한 ini 파일에 확장 줄을 직접 추가하는 가장 좋은 솔루션이라고 생각합니다.


답변

에있는 파일에 추가 extension=php_openssl.dll해야 php.ini했습니다 xampp/php/php.ini. 어떻게 든 추가하고 Apache를 다시 시작한 후 모든 것이 제대로 작동했습니다.


답변

php.ini 파일에 두 줄을 추가하십시오.

extension=php_openssl.dll
allow_url_include = On

나를 위해 일하고 있습니다.


답변

Apache가 SSL 지원으로 컴파일되지 않았을 수 있습니다. 어쨌든 file_get_contents 대신 cURL을 사용하십시오. 이 코드를 사용해보십시오. 실패하면 옳습니다.

function curl_get_contents($url)
{
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
  $data = curl_exec($curl);
  curl_close($curl);
  return $data;
}


답변

openssl 확장을 활성화했으며 나를 위해 작동합니다 🙂

; extension = php_openssl.dll

extension = php_openssl.dll


답변

필자의 경우이 문제는 Apache와 CLI에 다른 php.ini를 사용하는 WAMP로 인해 발생했기 때문에 WAMP 메뉴를 통한 설정은 CLI에 적용되지 않습니다. CLI php.ini를 수정하면 작동합니다.


답변

OpenSuse 12.1에서 필요한 것은 다음과 같습니다.

zypper in php5-openssl