2011-03-27 9 views
3

원격 서버에서 큰 XML 파일 (500MB에서 1GB 사이)을 다운로드 할 때 cURL을 사용하고 있습니다. 스크립트가 작은 테스트 파일에서는 제대로 작동하지만 몇 백 메가 바이트보다 큰 파일을 다운로드하려고 할 때마다 스크립트가 중단 된 것처럼 보입니다. 종료되지 않고 오류 메시지가 나타나지 않고 그냥 멈 춥니 다.큰 파일 (500MB 이상)을 다운로드 할 때 말림이 발생합니다.

나는 명령 줄 (CLI)에서 스크립트를 실행하고 있으므로 PHP 자체가 시간 초과되지 않아야한다. 나는 또한 cURL의 자세한 모드를 시도했지만, 이것은 초기 연결을 넘어서 아무것도 보이지 않습니다. 파일을 다운로드 할 때마다 정확히 같은 크기 (463.3MB)에서 멈 춥니 다. 이 시점에서 파일의 XML이 불완전합니다.

많은 아이디어가 높이 평가됩니다.

 $ch = curl_init(); 
    $fh = fopen($filename, 'w'); 

    curl_setopt($ch,CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_FILE, $fh); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 0); 

    if(curl_exec($ch) === false) 
    { 
     echo 'Curl error: ' . curl_error($ch) . "\n"; 
    } 
    else 
    { 
     echo 'Operation completed without any errors'; 
    } 

    $response = array(
     'header' => curl_getinfo($ch) 
    ); 

    curl_close($ch); 
    fclose($fh); 

    if($response['header']['http_code'] == 200) { 
     echo "File downloaded and saved as " . $filename . "\n"; 
    } 

다시 말하지만,이 스크립트는 작은 파일이 잘 작동하지만 큰 파일 난까지 오류 메시지를 인쇄로하지 않습니다 다운로드하려고합니다.

이 스크립트 (Linode의 Ubuntu 10.04)가 종료 될 수 있습니까? 내가 이해할 수있는 한, 내 웹 서버는 CLI를 통해 실행 중이므로 여기서는 중요하지 않습니다.

감사합니다,

매트

+0

이 옵션을 false로 설정해보십시오. CURLOPT_NOPROGRESS 진행률 표시 줄이 활성화되어있어 실제로 파일을 다운로드 중인지 확인할 수 있습니다. – psion

답변

0

확인이 post는, 어쩌면 당신은 부분으로 파일을 다운로드 시도 할 수 있습니다. 또는 원격 서버에 액세스 할 수있는 경우 파일을 보관하고 다운로드 할 수 있습니다. php.ini 설정도 확인할 수 있습니다. 파일 크기, 메모리 제한 및 기타 정보를보십시오.

+0

감사합니다. 그러나 RANGE 옵션은 내가 다운로드중인 서버에서 작동하지 않습니다 (제어 할 수 없음). 또한 PHP.ini에서 불길한 것을 볼 수 없습니다 - 어떤 제안입니까? – Mateo

+0

php 스크립트가 아닌 터미널에서 직접 컬을 사용하지 않는 이유는 무엇입니까? – Faraona

1

파일 다운로드가 중단되면 완료된 것처럼 보입니까? 명령에 -m 10800을 추가하면 지정된 시간 (초) 후에 전송이 시간 초과되고 전송이 종료됩니다. 전송 시간보다 오래 걸리도록 설정했지만 여전히 성가시다면이 방법이 효과적입니다.

0

저장할 파티션의 디스크 공간이 부족할 수도 있습니다. 스크립트를 실행하는 사용자에 대해 할당량을 초과하여 실행 중입니다.

관련 문제