왜 대용량 파일은 항상 실패하는데, 작은 파일은 문제가 없나요? 편집자님이 도저히 알 수 없어서 인터넷으로 원인을 찾아보니, PHP가 대용량 파일을 업로드하지 못하는 이유와 해결방안에 대한 글을 모아서 모두와 공유하게 되었습니다.
다양한 이유와 해결책은 다음과 같습니다.
사례 1: 파일 업로드 시 파일이 저장되는 임시 디렉터리는 PHP 프로세스 소유자 사용자 가 열고 쓸 수 있어야 합니다. 지정하지 않으면 PHP는 시스템 기본값을 사용합니다.
php.ini 파일의 upload_tmp_dir은 PHP가 업로드한 파일이 저장되는 임시 디렉터리를 설명하는 데 사용됩니다. 파일을 업로드하려면 서버가 임시 파일을 닫지 않았는지, 해당 폴더에 대한 쓰기 권한이 있는지 확인해야 합니다.
사례 2: max_execution_time 값은 충분히 커야 합니다 . max_execution_time 변수는 PHP가 스크립트를 강제로 종료하기 전에 완료될 때까지 기다리는 시간을 초 단위로 설정합니다. 이 변수는 스크립트가 무한 루프에 들어갈 때 유용합니다. 그러나 이 기능은 완료하는 데 오랜 시간이 걸리는 합법적인 활동(예: 대용량 파일 업로드)이 있는 경우 작업이 실패할 수도 있습니다. 그러한 경우, 스크립트가 일부 중요한 프로세스(예: 90초로 설정)를 수행하는 동안 PHP가 스크립트를 종료하지 않도록 이 변수의 값을 늘리는 것을 고려해야 합니다.
max_execution_time = 90
참고php 함수에도 set_time_limit 함수가 있는데, 이는 위의 설정과 동일한 효과를 냅니다. 둘의 차이점은 위의 내용이 php.ini에 설정되어 있다는 점입니다. 그리고 set_time_limit는 php 파일에 기록됩니다. 따라서 페이지에서 set_time_limit를 사용하여 프로그램의 최대 실행 시간을 설정할 수도 있습니다(예: unlimited: set_time_limit(0);
사례 3: file_uploads = On 기본값은 on입니다. 이는 HTTP를 통한 파일 업로드가 허용됨을 의미합니다. 이 옵션은 OFF로 설정할 수 없습니다.
사례 4: upload_max_filesize = 2M 최대 파일 업로드 크기를 설정합니다. php.ini 구성 파일의 기본 파일 업로드 크기는 2M입니다. PHP 초보자들이 흔히 저지르는 실수는 파일 업로드 함수 작성 시 업로드 파일의 최대 크기, 즉 업로드가 허용되는 파일의 최대값, max_file_size에 대한 양식 영역을 설정하여 업로드된 파일의 크기를 지정하는 것입니다. (숨겨진 값 필드) 실제로 일반적으로 다른 사람들이 이 값을 무시할 수 있으므로 안전상의 이유로 php.ini 구성 파일에서 upload_max_filesize 옵션을 구성하여 파일 업로드 크기를 설정하는 것이 가장 좋습니다. 기본 upload_max_filesize = 2M, 즉 파일 업로드 크기가 2M인 경우, 20M 등 8M를 초과하는 파일을 업로드하려면 upload_max_filesize = 20M를 설정해야 합니다.
사례 5: post_max_size 이 값도 충분히 커야 합니다 . 이 변수는 양식 제출과 관련된 변수이기도 하며, 클라이언트가 POST 메소드를 통해 양식을 제출할 때 PHP 프로그램이 수신할 수 있는 최대 데이터 양을 제한합니다. 일반적으로 이 값은 upload_max_filesize보다 약간 크게 설정할 수 있습니다. 예를 들어 20MB 파일을 업로드하려는 경우 이 값을 21MB로 설정하면 됩니다.
사례 6: max_input_time 이 변수는 POST, GET 및 PUT을 통해 데이터를 수신하는 시간을 초 단위로 제한할 수 있습니다. 네트워크가 느린 환경에서 애플리케이션을 실행하는 경우 이 값을 늘려 데이터 수신에 필요한 시간을 늘려야 합니다. 예를 들어 이 값을 90초로 설정합니다.
max_input_time = 90
사례 7: memory_limit도 충분히 커야 합니다 . 메모리 사용량 제한. 단일 스크립트가 사용할 수 있는 최대 메모리 용량을 지정하려면 memory_limit 변수를 사용하십시오. 변수 memory_limit의 값은 post_max_size의 값보다 적절하게 커야 합니다.
시나리오 8: 또한 호스트가 nginx 운영 체제인 경우 위 작업이 실패하면 nginx 구성 파일에 client_max_body_size 20m를 추가하세요. 이 문장은 최대 허용 업로드 용량이 20MB임을 의미하며 이는 상황에 따라 다릅니다. 내 nginx 구성 파일의 위치는 /usr/local/nginx/conf/nginx.conf입니다.
이 기사를 읽고 나면 대용량 파일 업로드가 실패하는 이유를 알게 될 것입니다. 이 기사가 비슷한 문제를 더 잘 해결할 수 있는 몇 가지 아이디어를 제공할 수 있기를 바랍니다.