Установка PHP tmp dir – загрузка PHP не работает

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

Файлы должны храниться в каталоге /upload а не в каталоге system /tmp по умолчанию, поскольку /tmp монтируется на RAM-диске, размер которого ограничен 4 МБ, и пользователь будет загружать файлы размером около 10 МБ.

Я искал множество веб-страниц, но ни один из решений не работал. Я установил каталог temp в php.ini :

 upload_tmp_dir =/upload 

Я установил разрешения для /upload dir, и apache является владельцем файла, поэтому каталог определенно доступен для записи через PHP.

Я установил целевой путь в загрузчик файлов в /upload , потому что я хочу, чтобы файлы сохранялись после загрузки также в этом каталоге. Конечный результат – небольшие файлы загружаются успешно, но файлы размером более 4 МБ не загружаются – единственная причина такого поведения, которая приходит мне на ум, заключается в том, что файлы хранятся в /tmp во время загрузки. Разумеется, я проверил его с помощью sys_get_temp_dir() и результат был /tmp -so PHP игнорирует мою директиву php.ini или есть другой способ установить, где файлы хранятся во время загрузки.

О, и последняя информация: open_basedir не установлен, поэтому доступ PHP к диску ограничен только правами на файл.

Related of "Установка PHP tmp dir – загрузка PHP не работает"

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

  • Проверьте 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. Это максимальный объем памяти, который может потреблять сценарий. Совершенно очевидно, что он не может быть ниже размера загрузки (если честно, я не совсем уверен в этом – PHP, вероятно, буферизуется при копировании временных файлов).

  • Убедитесь, что вы проверяете правильный файл php.ini, который используется PHP на вашем веб-сервере. Лучшим решением является выполнение скрипта с директивой, описанной здесь http://php.net/manual/en/function.php-ini-loaded-file.php (функция php_ini_loaded_file )

  • Проверьте, как работает пользователь 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, забудьте перезагрузить сервер, чтобы конфигурация была перезагружена.

Я долгое время боролся с этой проблемой … Мое решение состояло в том, чтобы изменить файл php.ini в папке, содержащей скрипт php. Это было важно, так как изменение php.ini в корне не помогло решить проблему (у меня есть php.ini в каждой папке для детального управления). Соответствующие записи в моем php.ini были похожи на это …. (для этой проблемы не требуется output_buffering)

 output_buffering = On upload_max_filesize = 20M post_max_size = 21M