Ошибка `No such file` после загрузки больших файлов с помощью php - PullRequest
2 голосов
/ 25 июня 2010

Существует сервис для загрузки больших файлов (более 500 МБ) с помощью php / apache.Ход загрузки отслеживается расширением uploadprogress pecl.Эта схема прекрасно работает только для небольших файлов.

Однако при загрузке больших файлов возникает проблема.После завершения загрузки в массиве $ _FILES появляется стандартная информация, показывающая, что ошибок нет.Проблема в том, что сам файл / tmp / phpXXXX к этому времени не существует.

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

Хостинг-провайдер говорит, что нет сценариев обслуживания, которые удаляют файлы tmp.Также в нем говорится, что такие tmp-файлы доступны в файловой системе почти до конца загрузки, а затем исчезают.

Может ли это быть вызвано конфигурацией apache / server / php?Есть ли в ОС что-то, что может повлиять на эти файлы tmp?

ОС - это Ubuntu 8 LTS

Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

1 голос
/ 24 марта 2012

Существует несколько причин, по которым загруженные файлы могут не работать.

  • upload_max_filesize
  • post_max_size - должно быть больше, чем upload_max_filesize
    $POST_MAX_SIZE = ini_get('post_max_size');
    $unit = strtoupper(substr($POST_MAX_SIZE, -1));
    $multiplier = ($unit == 'M' ? 1048576
        : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));

    if (isset($_SERVER['CONTENT_LENGTH'])) {
        if ((int) $_SERVER['CONTENT_LENGTH'] > $multiplier * (int) 
          $POST_MAX_SIZE && $POST_MAX_SIZE) {
            $error = 'POST exceeded maximum allowed size.';
        }
    }
  • $_FILES['myfile']['error']> 0 (см .: http://php.net/manual/en/features.file-upload.errors.php)
  • У файла слишком длинное имя / имя файла (значение $_FILES['myfile']['name'])
  • Попытка прочитать не-составную частьзагрузка с использованием многокомпонентных функций (EG move_uploaded_file / is_uploaded_file возвращает false)
  • upload_tmp_dir недоступен для записи (по умолчанию это / tmp в linux)
  • назначение не доступно для записи !is_writable($targetDir)
  • Диск заполнен (хотя обычно это приводит к ошибке UPLOAD_ERR_CANT_WRITE)
0 голосов
/ 25 июня 2010

Вы проверили настройки php upload_max_filesize и post_max_size?(в вашем файле php.ini)

0 голосов
/ 25 июня 2010

После завершения загрузки, есть стандартная информация в $ _FILES массив, показывающий, что ошибок нет.

Я предполагаю, что вы проверили элемент error? Это целое число, соответствующее одной из констант ошибки загрузки , например UPLOAD_ERR_INI_SIZE.

Насколько я понимаю, UPLOAD_ERR_NO_FILE также может быть возвращено, если размер файла превышает PHP post_max_size или некоторое ограничение Apache (Arkh упомянул LimitRequestBody)

Примечание: Ubuntu 10.04 LTS вышла

0 голосов
/ 25 июня 2010

Вы проверили ваш сервер LimitRequestBody параметр?Возможно, он недостаточно высок для файлов, которые вы пытаетесь загрузить.

...