2017-04-20 2 views
0

file_put_contents으로 원격 서버에서 파일을 다운로드하려고합니다. 이 스크립트는 ajax를 통해 호출됩니다. 내가 겪고있는 문제는 파일이 클 때 스크립트 시간 초과입니다. (500MB). 나는 504 게이트웨이 시간 초과 얻을 -의 nginx = "/home/mywebsite/public_html/wp-content/channels/videos/test.mp4"PHP 장기 실행 스크립트 대안?

download.php $ 대상을;

전 전용 호스팅을 사용하고 있습니다. 나는이 스크립트는 시간 초과 유지 phpinfo();

max_execution_time 7200 max_input_time 7200 max_input_vars 1000 memory_limit -1 output_buffering 4096 post_max_size 1200M upload_max_filesize 1000M

내 php.ini 파일을 변경하고 확인했습니다. 어떻게 해결할 수있는 또 다른 해결책이 있습니까? 디렉토리를 확인하면 파일이 성공적으로 다운로드되지만 페이지가 시간 초과됩니다. 그래서 아약스 통해 모든 데이터를 반환 할 수 없습니다.

어떻게 해결할 수 있습니까?

+0

대신 PHP exex –

+0

에서 wget을 실행하는 것이 좋습니다. 서버에 파일을 다운로드하는 중이라면 그 요청에 누구에게나 도움이되는 것은 PHP가 처음부터있을 필요가 없다는 것입니다. * NIX가있는 경우 간단히 'wget http : // www.example.com/videos/movie.mp4'를 수행 할 수 있습니다. –

답변

1

또한 nginx fcgi 시간 초과 값을 변경해야합니다. PHP 스크립트는 계속 실행되지만 nginx와 PHP 시간 초과 사이의 연결은 계속됩니다.

1

비동기 다운로드. 하나의 프로세스가 다운로드 요청 및 기타 wil cosume (아마도 cron)을 가지고 DB 또는 rabbitMq를 채우는 것보다

+0

이것은 장기 실행 프로세스에서 가장 합리적인 옵션입니다. 서버를 가져 오는 것보다 데이터베이스에서 많은 요청 항목을 생성하기 때문에 DOS 공격에 대한 방어력이 상당히 좋습니다 (특정 사용자가 얼마나 많은 항목을 한꺼번에 가질 수 있는지를 제한함으로써 쉽게 차단할 수 있습니다) 장시간 실행되는 프로세스로 넘쳐 흐르게합니다. –

+0

cron 스크립트가 시간 초과됩니까? – mdnba50

+0

그 시간 제한은 당신이'ini_set ('max_execution_time', 0);에 의해 무시할 수 있습니다 nginx에서 변경하지 않고 PHP 코드에서 (whitch는 당신에 의해 유지되지 않습니다 .. 그냥 asuming) –

관련 문제