2012-03-14 4 views
3

입력 파일 html 요소를 작성하기 위해 PHP 응용 프로그램에서 Zend_Form을 사용하고 있습니다. 이 요소의 '대상'을 설정할 수 있으며 receive()를 호출하면 파일이 지정된 위치에 저장됩니다.PHP는 Zend_Form을 사용하여 파일을 바이트 배열로 수신합니다.

우리는 파일을 디스크에 전혀 저장할 수 없지만 파일을 바이트 배열로 잡고 그 밖의 다른 작업을 수행하려고합니다.

이것이 가능합니까? Zend_Form()으로 가능하지 않다면 다른 방법으로도 할 수 있습니까?

편집 : 우리가 디스크에 쓸 수없는 이유는 응용 프로그램이 Azure에서 실행되기 때문이며 임시 폴더에도 쓰기 액세스 권한이없는 것 같습니다. Zend는 '주어진 대상은 쓰기 가능하지 않습니다.'라는 예외를받습니다.

+0

적어도 임시 디렉토리에 옵션을 저장 하시겠습니까? –

+0

아니요. 디스크의 어느 위치에도 저장할 수 없습니다. –

답변

1

모든 PHP 업로드는 Zend를 사용하는지 여부에 관계없이 파일 시스템에 작성됩니다 (upload_tmp_dirPOST method uploads 참조).

다른 위치가 php.iniupload_tmp_dir 지시어를 지정하지 않는 한 파일은 서버의 기본 임시 디렉토리에 저장됩니다. 대신, 업로드를 처리하는 바로 당신이 file_get_contents() 또는 유사한 기능을 사용하여 문자열로 파일을 읽을 수 있도록 할 것 $_FILES 배열을 사용하여 접근 시도 receive을 사용

. 그러나 일반적으로 Zend_Form을 사용하여 양식을 작성하고 처리 할 수는 있습니다.

업로드 된 파일이 저장된 메모리에 파일 시스템을 매핑하기 위해 공유 메모리 upload_tmp_dir을 설정할 수 있습니다. 누군가가 매우 큰 파일을 업로드하려고 시도 할 때 성능이나 서비스 비용에 영향을 미칠 수있는 메모리를 차지하는 것처럼주의하십시오.

궁극적으로 Zend_File_Transfer_Adapter_Http::receive()move_uploaded_file()을 호출하여 임시 위치에서 영구 위치로 파일을 이동합니다. 또한 업로드가 유효한지 필터링하고 수신 된 것으로 표시하여 다시 이동할 수 없습니다 (실패 할 수 있음).

2

실현 가능한 유일한 방법은 php://memory 프로토콜을 사용하여 파일을 저장하는 것입니다.

구현할 이유가 없었지만 파일 저장 위치를 ​​php://memory으로 설정하면 간단 해 보입니다. 수동 페이지 PHP I/O Wrappers에 대한 링크가 있습니다.

관련 문제