Ответ 1
Проблема, описанная здесь, была решена мною довольно давно, но я действительно не помню, что было основной причиной того, что загрузки не работали. Было много вещей, которые нуждались в исправлении, чтобы загрузка могла работать. Я создал контрольный список, который может помочь другим, имеющим аналогичные проблемы, и я отредактирую его, чтобы сделать его максимально полезным. Как я уже говорил в чате, я работал над встроенной системой, поэтому некоторые точки могут быть пропущены на не встроенных системах.
-
Проверьте
upload_tmp_dir
в php.ini. Это каталог, в котором PHP хранит временные файлы при загрузке. -
Проверьте
open_basedir
в php.ini. Если определено, он ограничивает права чтения/записи PHP указанному пути и его подкаталогам. Убедитесь, чтоupload_tmp_dir
находится внутри этого пути. -
Проверьте
post_max_size
в php.ini. Если вы хотите загрузить 20 Мбайт файлов, попробуйте что-то немного больше, напримерpost_max_size = 21M
. Это определяет наибольший размер сообщения POST, которое вы, вероятно, используете во время загрузки. -
Проверьте
upload_max_filesize
в php.ini. Это указывает самый большой файл, который можно загрузить. -
Проверьте
memory_limit
в php.ini. Максимальный объем памяти a script может потреблять. Совершенно очевидно, что он не может быть ниже размера загрузки (если честно, я не совсем уверен в этом - PHP, вероятно, буферизуется при копировании временных файлов). -
Убедитесь, что вы проверяете правильный файл php.ini, который используется PHP на вашем веб-сервере. Лучшим решением является выполнение script с директивой, описанной здесь http://php.net/manual/en/function.php-ini-loaded-file.php (
php_ini_loaded_file
function) -
Проверьте, как работает пользователь php (см. здесь, как это сделать: Как проверить, какой пользовательский php работает как?). Я работал над разными дистрибутивами и серверами. Иногда это
apache
, но иногда это может бытьroot
. Во всяком случае, убедитесь, что этот пользователь имеет права на чтение и запись во временном каталоге и каталоге, в который вы загружаете. Проверьте все каталоги на пути в случае, если вы загружаете в подкаталог (например,/dir1/dir2/
-check какdir1
, так иdir2
. -
На встроенных платформах вам иногда необходимо ограничить запись в корневую файловую систему, потому что она хранится на флеш-карте, и это помогает продлить срок действия этой карты. Если вы используете скрипты для включения/отключения записи файлов, убедитесь, что вы включили запись перед загрузкой.
-
У меня были серьезные проблемы с PHP > 5.4 загрузкой мониторинга на основе сеансов (как описано здесь http://phpmaster.com/tracking-upload-progress-with-php-and-javascript/) на некоторых платформах. Сначала попробуйте что-то простое (например: http://www.dzone.com/snippets/very-simple-php-file-upload). Если он работает, вы можете попробовать более сложные механизмы.
-
Если вы внесете какие-либо изменения в php.ini, забудьте перезагрузить сервер, чтобы конфигурация была перезагружена.