2014-12-23 3 views
2

file_get_contents()을 사용하여 원격 서버에서 json 응답을받는 스크립트가 있습니다. 로컬 파일에서 제대로 작동하지만, HTTP 또는 HTTPS는 나에게 다음과 같은 오류 file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 infile_get_contents(https://api.domain.com/resolve.json?url=blablabla): failed to open stream: no suitable wrapper could be found를 제공 작동하지 않습니다 file_get_contents() 동안 .. 그것은 전용 서버 내가 WHM .. 나는 allow_url_fopen = on 설정file_get_contents()가 작동하지 않습니다.

  1. 을 시도했습니다했다 WHM PHP 구성 편집기에 있지만이 작동하지 않았다.
  2. 오류가 발생한 디렉토리에서 allow_url_fopen = on으로 php.ini 파일을 만들었지 만 작동하지 않습니다.
  3. PHP 스크립트의 시작 부분에 ini_set('allow_url_fopen', 'On');이 추가되었지만 작동하지 않았습니다.

은 내가 대신 컬을 사용할 수 있습니다 알고 있지만 나는이 작동하지 않는 이유 .. 스크립트가 다른 서버와 로컬 호스트에서 제대로 작동 알고 싶은

갱신 :

phpinfo(); 

내게 준

allow_url_fopen Off 
allow_url_include Off 
always_populate_raw_post_data Off 

즉, 내 php.ini 변경 사항이 적용되지 않았다는 의미입니다. 잘못된거야?

+1

'allow_url_fopen'은 아마 당신이 그것을 켤 수 없도록 오버라이드되고 있습니다. php.ini 등을 사용하는 경우에도'phpinfo()'를 실행하여 실제로 변경되는지 확인하십시오. 나의 충고는 곱슬 곱슬 함을 사용하는 것이다. –

+0

웹 서버'service httpd restart'를 다시 시작한 후'/ etc /'에서'php.ini'를 편집하십시오. – waki

답변

2

로그인, 단순히 몇 번 검색 "ctrl + w"를 누르고 "allow_url_fopen"를 입력하고 반환, 대부분의 아마 먼저 설명을 올 것이다, 그래서 반복 . 이제 눌러 "ctrl + x"

allow_url_fopen=1

allow_url_fopen=0

에서 항목을 변경하고 "y"와 저장 파일을 확인할 수 있습니다.

그런 다음 새로운 php.ini의 구성을로드 할 수 있도록이 아파치를 다시 시작됩니다

sudo service apache2 restart 

입력합니다. 이러한 단계를 거친 후에는 외부에서 file_get_contents을 사용할 수 있어야합니다.


(!) 참고

당신이 php.ini 파일을 찾을 수없는 경우, 당신은 당신의 phpinfo()

enter image description here

의 상단 부분에로드의 php.ini 파일의 경로를 찾을 수
+0

고맙습니다 ..로드 된 설정 파일을 체크하는 걸 잊어 버렸습니다 .. 그 트릭을 만들었습니다 .. 오래된 php.ini public_html 폴더 ..하지만 하위 폴더에있는 파일을 덮어 써서는 안됩니까? –

+0

새 php.ini 파일을 넣은 하위 디렉토리 –

+0

흠, 기본로드 된 구성 파일은 항상 위에서 언급 한 위치에 있다고 생각합니다. – baao

1

루트 액세스 권한이있는 사용자는 php.ini (일반적으로 /etc/php.ini)을 편집하십시오.

루트 액세스 권한이없는 경우 ini_set('allow_url_fopen', 'On'); 또는 ini_set('allow_url_fopen', '1');을 추가하십시오.

php.ini이 보이지 않으면 PHP 스크립트에서 phpinfo()을 사용하여 php.ini 위치를 찾으십시오. 파일의 ssh를 입력

sudo nano /etc/php5/apache2/php.ini //<<<< ubuntu/debian server, might differ for you 

를 통해 서버에

1
$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)); 

이렇게하면 HTTPS인지 여부에 관계없이 url에서 내용을 가져올 수 있습니다. php ini에서 변경할 필요가 없습니다.

+1

왜 투표가 다운 되었습니까? – Daniel

+0

감사. 이 추가 구성은 정확히 우리 문제를 수정 한 것입니다. 나는 다른 질문에 답을 썼다. (그것은 문제의 근본적인 원인을 밝혀주지 않았다.) 귀하의 답변을 내 출처로 인용 : https://stackoverflow.com/a/48305167/1385429 –

+0

감사합니다 Christiaan –

관련 문제