2015-01-03 5 views
0

PHP 배열의 이미지를 읽고 로컬 컴퓨터에 쓰는 데 PHP 클래스 내부의 함수를 사용하고 있습니다. 다음과 같은PHP file_get_contents 및 cURL이 http 오류 500 내부 서버를 발생시킵니다.

뭔가 : 그것은 성공적으로 읽고 1 개 또는 2 개의 이미지를 쓰기하지만 2 차 또는 3 차 이미지를 읽는 500 Internal severs 인상

function ImageUpload($urls) 
{ 
    $image_urls = explode(',', $urls); 
    foreach ($image_urls as $url) 
    { 
    $url = trim($url); 
    $img_name = //something 
    $source = file_get_contents($url); 
    $handle = fopen($img_name, "w"); 
    fwrite($handle, $source); 
    fclose($handle); 
    } 
} 

. Apache 로그 파일에는 아무 것도 중요하지 않습니다. 또한 나는 다음의 cURL 문과 함께 file_get_contents 명령을 대체하지만 결과는 동일합니다 (은 file_get_contents보다 하나 더 많은 이미지를 읽습니다).

$ch=curl_init();   
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,500); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
$source = curl_exec($ch); 
curl_close($ch); 
unset($ch); 

은 또한 문제는 HTTP URL의 읽기위한 것입니다, 나는 지역 어딘가에 이미지가있는 경우, 읽기와 그 작성을위한 문제가 없습니다. 내가 어떤 코드로 변경 만든

+0

하지 않습니다 당신이 읽을하려고하는 서버에서 온 500? 그렇다면 오류 정보는 사용자가 아닌 해당 서버의 로그에 있어야합니다. – GolezTrol

+0

대상 서버에 액세스 할 수 없습니다. 이미지를 하나씩 읽고 화면에 울리는다면 문제가 없습니다. 하지만 루프에서 모든 내용을 읽으려고하면 오류가 발생합니다. – Amir

+0

나는 당신이 이미 답변을 게시하고 그것을 삭제했기 때문에이 질문에서 대답을 삭제했습니다. 그것이이 자료가 속한 곳이기 때문에 답을 삭제 취소하십시오. 감사! – halfer

답변

0

, 도움 :

$opts = array( 
     'http' => array( 
      'method'=>"GET", 
      'header'=>"Content-Type: text/html; charset=utf-8" 
     ) 
    ); 

$context = stream_context_create($opts); 
$image_urls = explode(',', $urls); 
foreach ($image_urls as $url) { 
    $result = file_get_contents(trim($url),TRUE,$context); 
    if($result === FALSE) { 
     print "Error with this URL : " . $url . "<br />"; 
     continue; 
    } 
    $handle = fopen($img_name, "a+"); 
    fwrite($handle, $result); 
    fclose($handle); 
} 
+0

감사. 네, 그들은 올바른 URL입니다 – Amir

+0

시도해 볼 수 있도록 URL을 줄 수 있습니까? –

+0

아니요, 작동하지 않습니다 ... 하나씩 파일을 읽을 수 있지만 문제는 루프 안에 있습니다. – Amir

0

내가 루프에서 읽을 수있는 핸들러가 표시되지 않습니다 희망, 당신의 $handle = fopen($img_name, "w"); 그냥 쓰기위한 것입니다, 당신은 또한 $handle = fopen($img_name, "r"); 필요 읽기! fopen($img_name, "w");에 대한 핸들 (fread())을 읽을 수 없기 때문입니다.

추가 답변 :

는 당신이 수정 (그것이 작동하는지 확인) 수 :

......... 
$img_name = //something 
$context = stream_context_create($image_urls); 
$source= file_get_contents( $url ,false,$context); 
..... 
..... 
+0

감사합니다. file_get_contents는 전체 파일을 문자열로 읽습니다. – Amir

+0

@Amir, 내 업데이트 –

+0

아니요, 작동하지 않습니다 – Amir