Не могу загрузить файл - PullRequest
       5

Не могу загрузить файл

1 голос
/ 20 февраля 2012

Я сделал CMS для клиента.Он может загрузить файл PDF.Мы тщательно проверили это и не обнаружили никаких ошибок.Тем не менее, он не может загрузить что-либо вообще.Файл никогда не загружается.Его браузер просто продолжает загружаться.

Мой клиент использует Firefox (не уверен, какая версия, но я думал, что это не имеет значения), и PDF-файлы, которые он пытается загрузить, имеют размер около 5 МБ, ничего особенного.

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

Я не думаю, что проблема заключается в моем сценарии ... но все же стоит опубликовать:

if(!empty($_FILES['pdf'])) {
    $path = '../pdf/';
    $filename = $_FILES['pdf']['name'];

    if(!empty($assoc['pdf'])) {
        $oldfile = $path.$assoc['pdf'];

        if(file_exists($oldfile)) {
            unset($oldfile);
        }
    }

    $success = move_uploaded_file($_FILES['pdf']['tmp_name'], $path.$filename);
}

Редактировать: Онотправил мне PDF, который он пытается загрузить.Загрузка заняла около 10 секунд ... Я предоставляю ему ссылку для теста скорости, смеется.

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

У меня могут быть две проблемы, которые, как я вижу, могут быть не совсем вашими, но могут привести к вашему ответу.

# 1.POST_MAX_SIZE или UPLOAD_MAX_FILESIZE недостаточно велики

Есть две конфигурации, о которых часто забывают программисты php, и это, вероятно, ваша самая очевидная проблема.Ваши тесты были выполнены, но были ли они сделаны с большими файлами?

Используя htaccess или php.ini (в зависимости от конфигурации вашего сервера), вы можете переопределить настройки php для

  1. upload_max_filesize
  2. post_max_size

И дать им 20M, например:

/*.HTACCESS*/
php_value upload_max_filesize 20M
php_value post_max_size 20M

/*PHP.INI*/
upload_max_filesize = 20M
post_max_size = 20M

Вы не можете использовать ini_set (), потому что эти переменные используются ДО того, как php начнет обработку итаким образом, станет бесполезным в контексте.

# 2.enctype не является multipart / form-data

Хотя это очень непросто, вы, возможно, забыли установить свойство enctype в форме на «multipart / form-data», и, таким образом, на сервер ничего не отправляетсясовсем.Но я сомневаюсь, что это ваша проблема, так как вы сказали, что тщательно ее протестировали.

НО, иногда, мы перемещаем вещи и забываем тестировать (это происходит со мной тоже), и я был уверен, что что-то работало раньше, а теперь этонет, так что проверь это, чтобы убедиться:)

Удачи

0 голосов
/ 11 апреля 2016

Пусть клиент попытается загрузить файл в браузер, отличный от Firefox. Если он работает в других браузерах, попробуйте удалить (или переименовать / переместить, в целях тестирования) файл MimeTypes.rdf в папке профиля клиента Firefox .

.

Если загрузка PDF работает позже, вы столкнулись с ошибкой Firefox , о которой впервые сообщили в 2007 году ( в основном то же самое здесь , о которой сообщалось в 2006 году). Короче говоря, любой веб-сайт, с которого пользователь когда-либо загружает файл, может повредить файл MimeTypes.rdf в отношении расширения загружаемого файла - злонамеренно или случайно / неосознанно.

Что вы можете сделать:

  1. Проголосуйте за ошибку Firefox!
  2. Быстрое исправление, чтобы заставить его работать на клиента прямо сейчас: попросите пользователей удалить их файл MimeTypes.rdf. Firefox создаст новый, «свежий» при следующем запуске, но это очистит все ассоциации типов / приложений MIME, которые пользователь создал со временем. Кроме того, это поможет только до тех пор, пока пользователь не загрузит следующий файл PDF с какого-либо другого веб-сайта, который снова повреждает файл MimeTypes.rdf.
  3. Используйте заголовок «user agent», чтобы определить, загружен ли файл из Firefox. Если это так, а тип MIME не соответствует тому, что вы хотите принять, дважды проверьте расширение имени файла и в любом случае примите файл, если расширение соответствует принятым типам файлов (".pdf" в вашем случае).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...