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


143

문제는 문제입니다. 나는 이것과 관련하여 해결책을 철저히 조사했으며 이것에 관한 주제가 있다는 것을 알고 그것을 따라 갔으며 아무것도 효과가 없었습니다. 그것은 지금까지 내가 한 모든 것을 정확하게 나열하겠다고 말하고 있습니다. 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에 관해 내가 연구 한 모든 것을 다했다.

답변:


183

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

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


1
당신은 반드시 그 것이 있습니까 /apache/bin/php.ini, 나는 휴대용 라이트 1.8.1 XAMPP에서 찾을 수없는 이유는 무엇입니까? 그러나 php/php.ini존재하지만 여기에서 ssl을 활성화하면 도움이되지 않습니다 :(
vine'th

1
이 답변은 openssl이 이제 비활성화되어 있기 때문에 또 다른 문제가 발생합니다.
get_file_contents

5
나를 위해 그것은 xampp/php/php.ini:) 감사했다, PS : 변경 사항을 저장 한 후 아파치를
다시 시작하는 것을 잊지 마십시오

97

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


2
php.ini에 없었기 때문에 라인을 추가해야했지만 트릭을 수행했습니다. 감사합니다!
Q Studio

33

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

extension=php_openssl.dll
allow_url_include = On

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


7
나는 wamp를 사용하고 있으며 아파치 폴더의 php.ini를 PHP 폴더의 일반적인 폴더보다 편집해야합니다 : O
Al_

고마워, 그것은 allow_url_include = On나를 위해 그것을 해결했다.
Kiee

allow_url_include를 활성화하지 마십시오. 서버가 취약 해집니다.
Pascal9x 2018

18

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;
}

1
당신이 나에게주는 컬 기능을 실행하고로 대체 $xmlresults = file_get_contents($urlquery);했습니다 $xmlresults = curl($urlquery);. PHP 스크립트는 file_get_contents ()와 같은 결과로 잘 작동했습니다. localhost / tutorial / retrieve_website.php 를 통해 PHP 웹 페이지로 실행하면 다음과 같은 오류가 발생합니다.Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M

1
SSL 지원에 문제가 있으며 phpinfo ()를 실행 하고 다음 명령 / 플래그가 있는지 확인하십시오 '--with-openssl=/usr' '--with-openssl-dir=/usr'. Windows 에서이 작업을 수행하는 방법을 모르겠습니다. 죄송합니다.
Dejan Marjanović

1
그것에 가까운 것은 phpinfo () 맨 위에있는 Configure Command이며 --with-openssl 관련 항목이 포함되어 있지 않습니다. 그것은 다른 것들을 포함합니다. 작은 업데이트 : 로컬 호스트에서 확인 된 상태이며 HTTPS (SSL)가 활성화되어 있습니다.
John M

1
를 호출 하면 다음 줄에서 실행 return curl_exec($curl);되지 못하게되지 curl_close($curl);않습니까?
Jason Plank

12

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

; extension = php_openssl.dll

extension = php_openssl.dll


6

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


1
CLI를 어디서 찾을 수 있었습니까? php.ini
botenvouwer

1
내 위치는 여기에 있습니다 :C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne

2
귀하의 답변에 감사드립니다. 여기에 여러 php.ini 파일이 있다고 생각했습니다. 검색 할 때 하나만 발견하고 주석 처리를 제거했습니다.; extension = php_openssl.dll 그러나 xammp를 사용하여 wamp와 혼동했습니다. 이제 작동합니다!
botenvouwer

6

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

zypper in php5-openssl

1
설명해 주시겠습니까?
Jason W

1
"래퍼"https "를 찾을 수 없습니다-PHP를 구성 할 때 활성화하는 것을 잊었습니까?"라는 오류 메시지가 나타납니다. 명령 행에 "zypper in php5-openssl"을 입력하여 문제를 해결했습니다. 오류가 수정되었습니다.
TheSatinKnight

5

나를 위해 php.ini에서 다음 줄의 주석을 제거해야했습니다.

extension=php_openssl.dll
extension_dir = "ext"

php_openssl.dll이 "ext"폴더에있는 경우 "ext"가 적용 가능합니다.

참고 : 두 개의 php.ini 파일에 대해이 작업을 수행해야 했습니다. 그렇지 않으면 작동하지 않습니다. 하나는 vs.php 설치 폴더에 있고 다른 하나는 PHP 폴더에 있습니다.

C:\Program Files (x86)\Jcx.Software\VS.Php\2013\Php 5.6
C:\Program Files (x86)\PHP\v5.6

출처


5

MAC AMPPS에서 php-5.5.ini를 다음과 같이 업데이트하여 작동합니다.

allow_url_include = On
extension=openssl.so

5

필자의 경우 (FastCGI 모드에서 Windows의 PHP 7.3) 주석 처리가 제거되었습니다 extension=openssl. 확장명 아님 = php_ openssl대부분의 사람들이 여기에 게시하는 것처럼 .

(동일한 내용이 여기게시 되었지만 여기서는 주요 차이점이 될 수있는 OS에 대한 세부 정보가 없습니다.)



4

Windows의 https 요청에 대한 file_get_contents 문제 는 php.ini 파일에서 다음 행의 주석을 해제하십시오.

extension=php_openssl.dll
extension_dir = "ext"

4

curl이 시스템에 설치된 경우이 기능을 대신 사용할 수 있습니다.

function get_url_contents($url){  
  if (function_exists('file_get_contents')) {  
    $result = @file_get_contents($url);  
  }  
  if ($result == '') {  
    $ch = curl_init();  
    $timeout = 30;  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
    $result = curl_exec($ch);  
    curl_close($ch);  
  }  

  return $result;  
}

2

하루 종일 스누핑 한 후이 안내서 덕분에 답을 찾았습니다. http://piwigo.org/forum/viewtopic.php?id=15727

기본적으로 Eclipse-> Windows-> 환경 설정-> PHP 실행 파일 아래에 .exe 및 .ini가 참조되는 섹션이 있습니다. 도움말 메뉴의 Eclipse 새 소프트웨어 설치에서 PHP 개발 도구 SDK 기능을 설치할 때 기본 디렉토리는 Eclipse 디렉토리에있었습니다.

그 대신, PHP 5.3.5 (CGI)라는 새로운 실행 파일을 추가하고 xampp의 php 폴더에서 cgi.exe와 .ini를 참조했습니다.

도와 주셔서 감사합니다.


2

opsenSUSE Leap을 사용하고 있는데 같은 문제가 있습니다. OpenSSL을 지원하지 않는다는 의미입니다. 이것이 내가 해결 한 방법입니다.

  1. YaST를 엽니 다.
  2. 소프트웨어 관리로 이동하십시오.
  3. 왼쪽 분할 창의 검색 상자에 'php5-openssl'을 입력하고 리턴 키를 누르십시오.
  4. 오른쪽 창에서 'php5-openssl'옆에있는 확인란을 클릭하여 선택하고 'Accept (허용)'를 클릭하십시오 (OpenSSL 지원 추가).
  5. Apache를 다시 시작하십시오. sudo service apache2 restart

그게 다야, 끝났어.


1

이 오류도 발생했습니다. 내 PHP 버전에 openssl이 컴파일되지 않았으므로 php.ini에 확장 지시문을 추가하는 것만으로는 충분하지 않습니다. 나는 당신이 당신의 특정한 경우에 이것을 어떻게 해결해야할지 모르겠지만, 저에게는 macports를 사용하고 명령은 다음과 같습니다.

sudo port install php5-openssl

1

Winginx (Apache 기반이 아닌 nginx 기반)를 사용하는 사람들을 위해 다음 4 단계로 수정했습니다.

  1. 도구 메뉴가 히트 Winginx PHP5 구성을 합니다 (신경 쓰지 5 ... 이름 인치) :

    Winginx PHP5 설정

  2. php.ini 에서 변경할 PHP 버전을 선택하십시오 :

    PHP 버전 선택

  3. PHP 확장 탭을 선택 php_openssl의 확장과 충돌 저장 버튼을 :

    php_openssl 선택

  4. 작업 표시 줄을 통해 적절한 PHP 서비스를 다시 시작하십시오 ( Stop and Start ).

    PHP 서비스 재시작


1

이 시도:

function curl($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);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $buffer = curl_exec($curl);
    curl_close($curl);
    return $buffer;
}


2
이 질문에 이미있는 이 답변 과 어떻게 다른 가요?
HPierce

@HPierce에는 2 줄이 있어 그 줄의 시작과 끝에서 지수 연산자 로 인해 구문 오류가 발생합니다 ... 삭제 플래그가 지정되었습니다.
CPHPython

@CPHPython 나는 그들이 코드 블록 안에 대담한 스타일 을 사용하려고 생각

1
@CPHPython, 굵은 코드를 사용할 수 있지만 다른 구문을 사용해야합니다 ... <code> <pre> 일반 코드 ... *의 </ pre> </ code>가있는 굵은 코드를 사용하면 얻을 수 있습니다 :-). 분명히 나는 ​​2016 년에 이것을 알지 못했거나 이것을 편집했을 수도 있습니다. 어쨌든 삭제 된 것을 보게되어 기쁩니다.
HPierce

1
@Nick, 대담한 코드를 만들 수 있습니다! 나는 그것이 어디에나 문서화되어 있다고 생각하지 않습니다. 여기에서 예를 들어 보았지만 여전히 삭제 될 것이라고 생각합니다.
HPierce

0

wamp 서버를 사용하는 경우 아이콘으로 이동하십시오. wamp server icon 이것을 클릭하십시오

그런 다음 PHP로 이동 한 다음 PHP 확장을 클릭하십시오 .php_openssl이 거기에서 활성화되고 wamp 서버를 다시 시작해야합니다. 여기에서 활성 php_openssl


-1

내부의 simple_html_dom.php 변화의 값 $offset에서 변수 -10. 이 오류는 일반적으로 PHP 7 로 마이그레이션 할 때 발생합니다 .

HtmlDomParser::file_get_html기본 오프셋 인을 사용하여 -1전달 0하면 문제가 해결됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.