Очень большие загрузки с PHP

В моем случае я использовал PDO с php-cli, и он работал нормально.

Только когда я попытался подключиться из apache, у меня возникла проблема с отсутствующим драйвером, t вполне понимаю.

Простая apt-get install php-mysql решила его. (Ubuntu 16.04 / PHP7. Кредиты идут к выбранному ответу и комментарию Ивана)

Надеюсь, что это может помочь.

37
задан Jon Seigel 14 March 2010 в 19:55
поделиться

11 ответов

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

3
ответ дан 27 November 2019 в 04:59
поделиться

upload_max_filesize может быть установлен для каждого каталога ; то же самое касается post_max_size

, например:

<Directory /uploadpath/>
  php_value upload_max_filesize 10G
  php_value post_max_size 10G
</IfModule>
14
ответ дан 27 November 2019 в 04:59
поделиться

Вы можете установить post_max_size только для скриптов в 1 каталоге. Поместите туда свой сценарий загрузки и разрешите только этому сценарию обрабатывать большие размеры. Этот сценарий по-прежнему может быть атакован большими / бесполезными файлами, но он избегает настройки его глобально.

Используйте это с APC, и вы сможете придумать что-нибудь хорошее: IBM Developer работает, статья по APC

2
ответ дан 27 November 2019 в 04:59
поделиться

Приходилось ли вам использовать APC для проверки хода выполнения и общего размера файла. Вот хорошее сообщение в блоге об этом. Это может помочь.

1
ответ дан 27 November 2019 в 04:59
поделиться

Maybe you could use Webdav and Javascript in the browser

AJAX Big file upload, with progress, to WebDAV

http://www.webdavsystem.com/ajax/programming/upload_progress

A simple library

http://debris.demon.nl/projects/davclient.js/doc/README.html

You can then get the JS to redirect the user to a success page. Secret keys and what-not can be handled in a PHP prelude before handing off the JS Client->WebDAV

1
ответ дан 27 November 2019 в 04:59
поделиться

Я бы посмотрел на FTP, SSH или SCP , это позволяет загружать большой файл и при этом иметь контроль доступа к файлу. Это может занять немного больше времени, но это, вероятно, самый безопасный способ, который я мог придумать.

1
ответ дан 27 November 2019 в 04:59
поделиться

Я добился успеха с uploadify , и я рекомендую его. Это скрипт jQuery / Flash, который обрабатывает большие загрузки, и вы можете передавать ему дополнительные параметры (например, секретный ключ). Чтобы решить проблемы на стороне сервера, просто используйте следующий код. Изменения вступают в силу только для сценария, в котором они вызываются:

//Check to see if the key is there
if(!isset($_POST['secret_key']) || !isValid($_POST['secret_key']))
{
    exit("Invalid request");
}
function isValid($key)
{
    //Put your validation code here.
}

//This line changes the timeout.
//Give it a value in seconds (3600 = 1 hour)
set_time_limit(3600);

//Set these amounts to whatever you need.
ini_set("post_max_size","8192M");
ini_set("upload_max_filesize","8192M");

//Generally speaking, the memory_limit should be higher
//than your post size.  So make sure that's right too.
ini_set("memory_limit","8200M");

EDIT В ответ на ваш комментарий:

Учитывая то, что вы сказали, я боюсь, что вы не сможете удовлетворить свои требования через http. Все существующие решения содержат код, который добавляет в http функции, для которых он никогда не был разработан.

Как вы сами сказали, это простой протокол. Помимо написания собственного клиентского программного обеспечения, которое работает вне браузера, java-апплета или с использованием другого протокола (например, FTP, который был разработан для этого), вы можете не получить то, что хотите.

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

1
ответ дан 27 November 2019 в 04:59
поделиться

I know it sucks to add another dependency but in my experience, most websites that are doing something like this are using flash on the client side, and uploading the large file as chunks

adobe as a howto on flash file uploads

I also found this tutorial on codeproject:

Multiple File Upload With Progress Bar Using Flash and ASP.NET

PS - I know you're using PHP and not .net, I figured the important part was the flash ;)

0
ответ дан 27 November 2019 в 04:59
поделиться

Обработчик Python?

Использование обработчика POST Python вместо PHP. Создайте уникальный идентификатор из вашего PHP-приложения, который клиент может поместить в заголовки HTTP. С помощью mod_python для отклонения или принятия большой загрузки до того, как будет передано все тело POST.

Я думаю http://www.modpython.org/live/current/doc-html/dir-handlers-hph.html

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

Глядя на источник mod_python, можно заметить, что буферизация ввода с помощью read (), кажется, позволяет оценивать ввод HTTP бит за раз. Заголовки идут в первую очередь.

https://svn.apache.org/repos/asf/quetzalcoatl/mod_python/trunk/src/filterobject.c

7
ответ дан 27 November 2019 в 04:59
поделиться

Пробовал все это ... это, безусловно, лучшее, что я когда-либо использовал ...

http://www.uploadify.com/

2
ответ дан 27 November 2019 в 04:59
поделиться

Взгляните на загрузчик скачков. com

Хороший java-апплет для загрузки.

Я использовал его для загрузки изображений, и он отлично работает. Не пробовал работать с файлами большего размера, чем 10 МБ, но я должен работать и с действительно большими файлами.

2
ответ дан 27 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: