2017-02-15 1 views
0

원시 이메일에 PHP 스크립트를 실행하고있어 첨부 파일을 디스크에 씁니다. 전자 메일을 수신 할 때마다 원시 전자 메일 데이터가 스크립트로 전달됩니다. 스크립트는 전자 메일 데이터를 구문 분석하고 전자 메일 데이터에서 첨부 파일을 추출합니다.PHP 스크립트가 대용량 파일을 디스크에 작성하지 않습니다.

이제 작은 첨부 파일에 대해서도 정상적으로 작동합니다. 그러나 첨부 파일의 크기가 약 3MB 이상인 경우 스크립트는 파일을 디스크에 쓰거나 약 700KB의 데이터 만 씁니다. php.ini에서 PHP 구성 설정을 변경하려고 시도했지만 아무 쓸모가 없습니다. 좀 더 실망스러운 점은 동일한 스크립트가 로컬 컴퓨터에서 정상적으로 실행되고 원시 전자 메일 데이터에서 첨부 파일을 완벽하게 추출한다는 것입니다.

원시 이메일을 구문 분석하기 위해 this library을 사용하고 있습니다. 어떻게이 문제를 해결하기 위해

... 

    $mailparser = new ZBateson\MailMimeParser\MailMimeParser(); 

    $handle = fopen($receivedfile.'.txt', 'r'); 

    $message = $mailparser->parse($handle); 

    $attachment1 = $message->getAttachmentPart(0); 
    $attachment2 = $message->getAttachmentPart(1); 

    $file1contents = stream_get_contents($attachment1->getContentResourceHandle()); 
    $file2contents = stream_get_contents($attachment2->getContentResourceHandle()); 

    file_put_contents("path/to/upload/folder/image1.jpg", $file1contents); 
    file_put_contents("path/to/upload/folder/image2.jpg", $file2contents); 

    fclose($handle); 

누구 아이디어가 있습니까 :

이 내 코드가 작은 첨부 파일 잘 작동하는 모습입니다?

+1

어떤 오류가 발생합니까? –

+0

직접 할 수없는 경우 웹 사이트 관리자에게 크기를 늘리라고 요청하십시오. – fizzi

+0

먼저 파일 내용을 구분할 수 있도록 디스크 문제를 구분할 수 있도록 $ file1contents 및 $ file2contents의 크기를 확인하십시오 (플러시/동기화 (덮어 쓰기) 스크립트가 너무 일찍 끝나면 바이너리 문자열이 잘못 관리됩니다. 아마도 파일 쓰기가 첫 번째 바이트 '\ 0'에서 끝납니다.) – Jack

답변

0

나는 그것을 알아 냈다. 문제는 내 서버의 /tmp 디렉토리 였는데 총 공간은 1MB 밖에되지 않았습니다. php.inisys_temp_dir을 다른 디렉토리로 변경했는데 이제 스크립트가 작동합니다.

관련 문제