2011-03-28 3 views
3

나는 아파치 사이트를 검색하는 것뿐만 아니라 인터넷 검색에 많은 시간을 할애했으며, 아파치가 파일 업로드를 처리하는 방법에 대한 문서는 찾을 수 없다. 나는 anecdotalreports을 읽었습니다. 업로드가 완료 될 때까지 PHP가 관련되어 있지 않습니다. 이것은 제가 기대했던 것입니다. 그러나 아파치가 업로드하는 동안 무엇을하는지, 나는 아무것도 찾을 수 없다.Apache가 파일 업로드를 처리하는 방법에 대한 모든 설명서가 있습니까?

내가 문서 작성에 뜨거운 이유는 아파치가 업로드를 디스크에 스트리밍하는 대신 메모리에 완전히 저장한다는 것입니다. httpd은 충돌 할 때까지 사용하고있는 서버의 사용 가능한 모든 메모리 바이트를 사용합니다. 일반적으로 소비되는 실제 메모리의 양은 업로드되는 파일의 크기의 3 배이며 5MB/s 부근 (업로드 속도가 거의 가깝지 않음)에서 증가합니다.

내가 사용중인 다른 램프 스택에서이 동일한 요청을 테스트했으며 업로드 과정에서 Apache 메모리 사용량이 전혀 변경되지 않았습니다.

다른 사람이 아파치가 동일한 업로드를 다른 두 서버에서 다르게 처리하는 방법을 설명 할 수 있습니까? 어떤 생각이라도 대단히 감사합니다.

+0

FileUploads를 특별히 검색 했습니까? 어쩌면 아파치가 일반적으로 들어오는 POST 요청을 처리하는 방법을 알아봐야 할 것입니다. – Raffael

+0

이걸 보셨습니까? http://stackoverflow.com/questions/5077252/php-file-upload-memory-handling-on-cgi –

+0

@ james-black 아니, 나는 그것을 보지 못했다 ... 매우 도움이된다. – JKS

답변

2

대답은 만족스럽지 않습니다. 나는 어떤 문서도 찾지 못했다.

나는 어둠 속에서 계속 파고 들었고, 마침내 mod_fcgid (2.2에서 2.3.6으로) 트릭을 한 걸음 더 나아 갔다. 아마도 2.2에 버그가있었습니다.

메모리 사용량은 여전히 ​​2.3.6으로 늘어나지 만 훨씬 덜 극적입니다. ~ 100MB 파일에 대해서만 몇 메가 바이트. (그러나 업로드가 끝나고 파일이 이동하면 메모리 사용량이 즉시 100-200MB까지 증가하지만 즉시 풀리는 것으로 보입니다.)

3

기술적으로, PHP 아파치를 대신하여 업로드를 처리하고이 완료 될 때까지 램에서 파일을 버퍼링입니다. 그러나 업로드가 완료되거나 중단 될 때까지는 스크립트가 제어되지 않습니다. 아파치 자체만으로는 디스크에 버퍼되지 않습니다. 스크립트에서 가장 먼저 투명하게 삽입되는 보이지 않는 "handle_upload()"함수 호출이라고 생각하십시오.

PHP와 같은 언어 인터프리터가 웹 서버 프로세스에 내장되어 있지 않은 "everything is cgi script"로 돌아 가면 POST 데이터가 표준 입력을 통해 CGI 스크립트로 전송됩니다. 파일은 Apache를 통해 CGI로 직접 전달됩니다 프로세스가 있고 바이트가 들어 와서 바이트 단위로 읽을 수 있습니다.

관련 문제