로컬 및 서버 측면과 관련된 보안 문제로 인해 입력 유형="파일"을 기반으로 한 페이지 파일 업로드는 항상 어색한 위치에 있었습니다. 한편으로 사용자는 자신의 개인 정보가 유출되는 것을 원하지 않기 때문에 브라우저는 사용자가 업로드할 때 선택한 파일에 대해 효과적인 판단을 내릴 수 없습니다. 반면, 서버 측 보안과 전송 부담을 줄이기 위해 시스템에서는 사용자가 업로드를 시작하기 전에 불법 파일을 거부하기를 희망합니다.
시간이 지남에 따라 원래 입력 방법을 기반으로 한 업로드는 네트워크 스토리지 웹사이트에서 기피하는 레거시 문제가 되었으며, 이로 인해 온갖 종류의 이상한 플러그인과 업로드 클라이언트도 생성되었습니다.
업로드 입력방식이 그렇게 나쁜건가요? 물론 그렇지 않습니다. 파일을 업로드하는 경우에도 여전히 매우 간단하고 안정적입니다. PHP에서는
매뉴얼에 설정 방법이 자세히 설명되어 있지만, 이 방법이 여전히 불가능한 이유는 PHP 실행 스크립트가 memory_limit를 초과하면 모든 POST 데이터가 손실되고 오류도 보고되지 않기 때문입니다!
사용자가 지나치게 긴 양식을 작성하고 이를 메모리 제한을 초과하는 파일과 함께 업로드한다고 가정해 보세요. 오랜 대기 시간 후에 그는 자신이 기다리고 있는 것이 또 다른 깔끔한 빈 양식이라는 것을 알게 됩니다. 정말 인상적인 사용자 경험입니다. 아. 게다가 수십 MB의 서버 트래픽은 파일 크기 감지에만 사용되는데, 이는 현재 네트워크 환경에서 허용되지 않습니다.
Javascript를 통해
Javascript는 브라우저를 기반으로 합니다. JS는 불가능해 보이는 많은 작업을 수행할 수 있지만 브라우저가 할 수 없는 작업은 JS가 할 수 없습니다. 본질적인 단점으로 인해 이 작업은 Javascript만으로는 불가능합니다. 그러나 일부 IE 전용 방법은 참조용으로 여전히 존재합니다.
플래시를 통해
Flash의 FileReference 클래스는 비교적 포괄적인 파일 처리 방법 세트를 제공합니다. 이제 대부분의 대용량 파일 업로드에는 Flash 기반 솔루션이 사용됩니다. Flash를 사용하여 Js와 상호작용하는 경우 클라이언트가 파일 크기를 감지할 수 있습니까? 대답은 '예'입니다.
먼저 플래시 파일에서 FileReference 클래스를 인스턴스화합니다.
var fr = new FileReference();
이 클래스를 기반으로 Flash에서 제공하는 파일 탐색 및 SelectFile 이벤트를 사용하여 브라우저 이벤트를 대체할 수 있습니다. 필요한 것:
1. 선택 파일 바인딩
fr.addEventListener(Event.SELECT, onSelectFile);
2. 플래시에서 얻은 파일 정보를 저장하기 위한 Js 액세스용 개체를 만듭니다
var s = { size:0, name:'', type:'' }
3. 파일 찾아보기 방법 생성
function browseFile():void {<br> fr.browse();<br> }
4. SelectFile 이벤트가 발생하면 파일 정보를 전달합니다
function onSelectFile(e:Event):void {<br> s.size = fr.size;<br> s.name = fr.name;<br> s.type = fr.type;<br> }
5. J가
를 호출할 수 있도록 browserFile 메소드를 공개하세요.
ExternalInterface.addCallback("browseFile", browseFile);
6. 획득한 파일 정보를 Js에 전달
ExternalInterface.call("onSelectFile",s);
이제 Js를 통해 플래시가 전달한 파일 크기 정보를 얻을 수 있습니다. 자세한 내용은 데모를 참조하세요.
결론
이제 문제가 해결된 것 같습니다. 파일 크기를 성공적으로 확인했습니다. 그렇죠? 하지만 이 글의 최종 결론은 플래시 기반의 파일 크기 검증은 여전히 가능하지 않다는 것입니다.
파일 크기 확인의 유일한 목적은 업로드입니다. 위의 데모에서는 성공적으로 검증된 파일 이름이 입력 상자에 표시되는 것을 볼 수 있습니다. 업로드에 익숙한 학생들은 뭔가 부족하다고 생각하지 않나요? 그렇죠, 플래시를 통해서만 파일명을 얻을 수 있지만, 파일의 전체 경로를 얻을 수는 없고, 파일 경로는 입력으로 업로드하기 위한 필수 조건입니다. 따라서 Flash와 JS 상호 작용을 통해 파일 크기를 성공적으로 확인할 수 있지만 나중에 업로드하려면 계속해서 Flash만 사용할 수 있습니다.
플래시 개발이 보안상의 이유로 파일의 전체 경로를 차단하는 것은 이해할 수 있습니다. 그러나 파일 업로드, 특히 PHP 환경의 파일 확인 업로드 솔루션은 여전히 최상의 솔루션이 없습니다.
물론 이를 보완할 수 있는 방법은 다양합니다.
Perl 기반 프로젝트 FileChucker, XUpload, Uber-Uploader
플래시 기반 프로젝트 SWFUpload
PHP를 직접 사용하여 서버에 멋진 소켓 링크를 생성하는 프로그램도 있습니다
하지만 결국에는 HTML만을 기반으로 구현할 수 있는 엄격하고 강력한 업로드 솔루션을 볼 수 있는 날이 멀지 않았으면 좋겠습니다.
마지막은 이 코드 다운로드입니다.
PHP 파일 업로드 크기 설정에 대한 자세한 설명
PHP를 사용하여 파일을 업로드할 때 가장 일반적인 문제는 대용량 파일을 업로드할 때 발생하는 오류입니다. 여기에는 PHP 구성 파일-php.ini
가 포함됩니다.
이 구성 파일에는 파일 업로드와 밀접하게 관련된 여러 값이 있습니다.
업로드하는 파일 크기가 8m 미만(보통)인 경우 위 설정을 수정하면 요구 사항을 충족할 수 있습니다.
하지만 8m를 초과하려면 위의 값 외에도 다른 두 값에 특별한 주의를 기울여야 합니다.
이 두 값을 더 크게 만들어 보세요. 일반적으로 이렇게 하면 대부분의 문제를 해결할 수 있습니다.
이를 통해 업로드되는 파일의 크기가 무한할 수 있음을 유추할 수 있습니다. 그러나 네트워크 상황 등도 고려하십시오.
php.net에서는 이 방법을 적용한 후에도 100m가 넘는 파일을 사용하면 여전히 오류가 발생한다고 하는 사람들이 있는데, 이것이 PHP 자체의 문제인지 궁금합니다.
이 문제에 대한 첫 번째 소개입니다. PHP 파일 업로드 문제를 해결하는 데 도움이 되기를 바랍니다.