Преодолеть ограничение максимального размера файла хоста для данных PHP / POST при загрузке файлов? - PullRequest
3 голосов
/ 02 февраля 2011

Сейчас у меня довольно посредственный недорогой (общий) хост (как это все, что я могу себе позволить только сейчас), и я хочу реализовать на странице очень простую функцию загрузки файлов.Я хочу разрешить загрузку файлов размером до 100 МБ на сервер, но мой свободный хост ограничивает PHP_MAX_FILESIZE до 32 МБ, а POST_FILESIZE - до 64 МБ.

Есть ли способ преодолеть это, не требуя от пользователя разделения разбиениябольшие файлы на более мелкие куски?Или решение на основе JavaScript или Flash, которое могло бы каким-то образом маршрутизировать части файла через различные HTTP-запросы, или каким-либо другим способом обойти ограничение в 32 МБ?

Или есть какие-либо команды, которые я могу попытаться сделать, которые могут выйти за пределы хоста?Я уже пытался использовать .htaccess без успеха.РЕДАКТИРОВАТЬ: также попробовал ini_set.Я думаю, что единственный способ - это что-то вроде разбивки на части / разбиения / многопотоковости или другого способа решения проблемы невозможности установить более высокие значения PHP.

Любые предложения очень ценятся.Спасибо.

Ответы [ 8 ]

2 голосов
/ 27 июля 2011

Вы можете использовать Flash. Начните с этого: http://soenkerohde.com/2010/01/chunk-file-upload/

OR

использование https://github.com/moxiecode/plupload

1 голос
/ 30 июля 2011

если ваш хост разрешает java-апплет, то в sourceforge уже есть пакет для него. который позволяет вам dw файл через Java-апплет с компьютера пользователя на ваш хост через небольшие пакеты. это работает, потому что апплет обрабатывает код загрузки файла на компьютере пользователя, и на стороне сервера вы получите небольшие куски, которые вы можете связать позже, и файл любого размера можно загрузить.

Я нашел здесь ссылку, http://sourceforge.net/projects/juploader/

1 голос
/ 27 июля 2011

Если ваш «бесплатный хост» уже ограничивает вас, вы ничего не можете с этим поделать.попробуйте прочитать

http://www.php.net/manual/en/ini.core.php#ini.post-max-size

и

http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize

здесь вы можете установить его во время выполнения (ini_set) или нет

http://www.php.net/manual/en/configuration.changes.modes.php

Я предлагаю вам сделать несколько загрузок файлов.100 мб верно?планируете ли вы размещать видео и фильмы?попробуйте найти более высокооплачиваемый хост, а не бесплатный :)

1 голос
/ 02 февраля 2011

также может использовать ini_set('upload_max_filesize','100M');

Но у меня есть скрытое подозрение, что ваш хост может быть недоволен тем, что вы пытаетесь обойти их предел ...

0 голосов
/ 31 июля 2011

Аннотация:

1) Прочитать файл перед отправкой (поймать в событии onsubmit);разделить и отправить куски как поля textarea.

2) На стороне сервера восстановите чанки и создайте один отдельный файл.

Предложение:

В зависимости от среды, в которой выполняется сценарий, и места размещения файла.В вашем распоряжении следующие параметры:

 XMLHttpRequest

объект (для чтения файлов, доступных по URL на вашем веб-сайте)

 FileSystemObject

(если вы используете Windows Scripting Host или Internet Explorer вдоверенная среда) «вспомогательный» Java-апплет, который считывает файл или URL для вашего сценария.

(Извлечение из http://www.javascripter.net/faq/reading2.htm)

Если все в порядке, удалите элемент входного файла формы.

Затем разбейте строку на несколько кусков.

mySplitResult = myReadedDocument.split( 1024 * 1024 ); // 1M each

, которые составляют массив частей вашего документа:

Добавьте значения в форму (не забудьте установить то же самоеимя с [] для всех новых элементов управления.) Предположим, что идентификатор формы 'myForm':

formName = document.getElementById('myForm');

mySplitResult.forEach(function(item) {     
    ta = document.createElement('textarea');
    ta.appendChild(document.createTextNode(item))
    ta.setAttribute("name", "chunk[]" );
    formName.appendChild(ta);

});

На стороне сервера вы можете восстановить фрагменты и сохранитьв виде файла.

<?php
    $chunks = $_POST['chunk'];
    $fileContent = implode( '', $chunks );
    file_put_content( 'dirname/filename.foo', $fileContent );
?>

Вес успеха заключается в том, что вы можете прочитатьфайл на стороне клиента.

Удачи!

0 голосов
/ 30 июля 2011

Ваши пользователи могут загружать на сторонний сайт. Затем дайте вам URL с этого внешнего сайта. Если у вас достаточно места, вы можете обойти срок хранения файла внешним сайтом, загрузив его в каталог на своем сайте. Это, конечно, не лучший вариант, но у ваших пользователей будет большая квота загрузки и, возможно, более высокая скорость загрузки (общие серверы и сочетание скорости, например, масло и вода).

0 голосов
/ 30 июля 2011

Поскольку ini_set, похоже, не работает, вы можете попробовать установить его через файл .htaccess. Я не уверен насчет точного синтаксиса, но это что-то, связанное с php_flag. Я не удивлюсь, если это тоже не сработает.

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

Ограничения на загрузку - общая проблема . Если ваши клиенты часто загружают очень большие файлы, то, возможно, было бы целесообразно изучить какой-либо другой план хостинга. Если это не очень часто, вы можете просто отправить вам файл, чтобы вы могли отправить его по FTP. Иногда лучшим решением является простейшее решение .

0 голосов
/ 02 февраля 2011

Некоторые хосты позволяют использовать локальную копию php.ini (например, моя), поэтому вы можете изменять параметры по своему усмотрению.Имейте в виду, что каждый файл размером 100 МБ может быстро раздуваться на вашем хосте, особенно если он не входит в топ категории, поэтому будьте осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...