2017-02-15 3 views
0

Я запускаю скрипт PHP на сырые электронные письма, которые записывают вложения на диск. Каждый раз, когда приходит электронное письмо, необработанные данные электронной почты перенаправляются на скрипт, который анализирует данные электронной почты и извлекает вложения из него.PHP скрипт не пишет большие файлы на диск

Теперь это отлично подходит для небольших приложений. Однако, когда размер вложений составляет около 3 мб или более, сценарий не записывает файлы на диск или записывает только около 700 кб данных. Я попытался изменить настройки конфигурации PHP в php.ini, но это бесполезно. Что еще более расстраивает, так это то, что тот же самый сценарий работает на моем локальном компьютере, и он отлично извлекает вложения из необработанных данных электронной почты.

Я использую 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, поэтому вы можете различать проблему с диском (flush/sync (маловероятно), перезаписать (может быть, возможно, сценарий запускается дважды)) из задачи stream_get_contents() (проблема с библиотекой, скрипт заканчивается слишком рано, двоичная строка ошибочно управляется - возможно, запись файла заканчивается на первый байт '\ 0') – Jack

ответ

0

Я понял. Проблема была в каталоге моего сервера /tmp, у которого было всего 1 Мб. Я изменил sys_temp_dir в php.ini на другой каталог, и теперь скрипт работает.

Смежные вопросы