2010-05-16 6 views
4

저는 현재 매일 cron으로 실행되는 PHP 스크립트를 통해 CURL을 사용하여 사이트의 관리 영역에서 CSV 형식의 제품 데이터를 내보내고 있습니다.CURL 요청이 불완전하고 시간 초과가 의심 스럽지만 확실하지 않습니다.

데이터를 내보내는 일반적인 방법은 브라우저의 내보내기 페이지로 이동하여 구성을 설정 한 다음 "데이터 내보내기"버튼을 클릭하는 것입니다. 그러나 내가 수출하는 제품의 수가 매우 많고 데이터를 내보내는 데 5-10 분 이상이 걸리므로 PHP의 컬 기능을 사용하여 cron을 통해 매일이를 모방합니다.

이전에는 정상적으로 작동했지만 최근에 저장소의 제품 수가 500+ 이상으로 늘어남에 따라 스크립트는 내 보낸 데이터를 반환하지 않습니다. 브라우저에서 "내보내기"버튼을 클릭하여 수동으로 테스트하면 데이터가 올바르게 반환됩니다. 따라서 브라우저에서 수동으로 내보내기를 실행하면 "시간 초과"문제가 발생하지 않습니다.

필자는 테스트 한 제품의 수를 줄이거 나 늘여 (필요한 시간이 필요함) php-curl 스크립트가 cron에서 실행될 때 다시 제대로 작동합니다.

그래서 시간 초과 문제, 특히 PHP의 컬 기능과 관련이 있다고 생각합니다.

시도 할 때마다 CURLOPT_TIMEOUT 및 CURLOPT_CONNECTTIMEOUT을 모두 '0'으로 설정했습니다. php-curl 스크립트에서 "set_time_limit (3000)"도 설정했습니다. 그러나 여전히 작동하지 않으며 요청이 시간 초과되어 스크립트가 완전한 csv 데이터 집합과 함께 반환되지 않습니다.

이 문제를 해결하는 데 도움이되는 도움을 주시면 매우 감사하겠습니다.

편집 됨 : 컬 스크립트가 내보내기 기능을 호출하는 코드의 일부를 추가했습니다.

$interface = new StoreInterface(); 
echo "Start exporting at " . date('l jS \of F Y h:i:s A') . "\n"; 
set_time_limit(3000); 
$result_html = $interface->exportProducts(); 
//parse $result_html to only retain the csv format 
preg_match('/<pre>(.*)<\/pre>/s',$result_html[0],$output); 
if(strlen($output[1])<10) { //debugging for now 
echo "Export did not happen correctly. Quit\n"; 
    die('Export unsuccessful'); 
} 
file_put_contents($output_path,$output[1]); 
echo "Script completed. Thank you! \n"; 
+0

"스크립트 시간 초과"란 무엇을 의미합니까? 특정 오류 메시지가 있습니까? 부분적인 결과 만 얻었습니까? – Artefacto

+0

특정 오류 메시지가 없습니다. Yeap, 부분적인 결과 만. 스크립트는 "내보내기"기능이 컬 스크립트로 저장 스크립트 내에서 호출 될 때 서버의 임시 파일로 csv 데이터를 출력합니다. 성공하면 임시 파일의 전체 내용을 처리 할 컬 스크립트로 리턴해야합니다. 그러나 현재의 경우에는 임시 파일의 내용이 갑자기 중지되고 curl 스크립트가 반환되어 데이터가 완전하지 않음을 나타냅니다. – girlygeek

+0

오류 로그를 확인 했습니까? –

답변

2

다음 컬 옵션을 사용하여 모든 컬링 전송 세부 사항을 로그 파일에 기록하고 문제점을 확인할 수 있습니다.

$fp = fopen('./debug/transfer.log'); 
curl_setopt($curl, CURLOPT_VERBOSE, TRUE); 
curl_setopt($curl, CURLOPT_STDERR, $fp); 

또한 나는 CURLOPT_TIMEOUT 옵션이 무기한 시간 초과 "0"값을 지정 지원하지 않습니다 믿습니다. 여기서 최대 시간 초과 값을 지정해야합니다.

+0

나는이 방법을 시도하고 어떻게 볼 것이다. 고맙습니다. – girlygeek

관련 문제