Загрузка файлов размер которых больше ОЗУ сервера.
- Имеется доступ ко всем настройкам сервера Apache и к php.ini (собственный выделенный сервер).
- возможность работы с Perl и PHP
- [COLOR="Red"]ОЗУ (RAM) сервера всего 512МБ[/COLOR].
- Использовать протокол FTP запрещено, так как требуется регистрация файлов в БД и тд...
[FONT="Arial Black"]Задача[/FONT]
- Требуется сделать upload'ер файлов с браузера на сервер через протокол HTTP. Размер файлов в среднем 1ГБ (Почти в 2 раза больше чем RAM), а главное, что несколько таких файлов должны загружаться одновременно с разных IP.
[FONT="Arial Black"]Проблема[/FONT]
Обычный метод загрузки PHP тут бессилен ибо загрузка упирается в RAM.
[COLOR="Blue"]Как быть? Что использовать?[/COLOR]
а вообще, Perl CGI может (я думаю и PHP в силах, но лично я не занимался этим вопросом с использованием PHP)... (собственно, в этом продукте во free'шной версии можно раскопать как это делается)
В 2009 году вы все еще загружаете файлы на сервер через mod_php?! :eek: Тогда мы идем к вам!
http://www.grid.net.ru/nginx/upload.ru.html
http://www.sysoev.ru/nginx/docs/
В 2009 году вы все еще загружаете файлы на сервер через mod_php?! :eek: Тогда мы идем к вам!
http://www.grid.net.ru/nginx/upload.ru.html
http://www.sysoev.ru/nginx/docs/
Привет) Сто лет меня тут не было и вот зашёл.
А расскажи в общих чертах, как этот механизм действует? Прямая запись потока на диск? (хотя как ещё...)
Вопросы:
1) ngnix у меня есть, он с ISPmanager'ом установился. Я так и не понял, даже почитав по вашим ссылкам, как с ним работать...
2) Perl - запись файла на HDD идёт сразу без загрузки файла в ОЗУ? Ведь он сразу файл принимает, а не как PHP. Или для обработки файла Perl всёже пихает всё в RAM ???
А расскажи в общих чертах, как этот механизм действует? Прямая запись потока на диск? (хотя как ещё...)
Сам давно не захожу...
Ну сам спросил, сам ответил :D
Кроме того полезная фича это передача на фронтенд ссылки на загруженный файл, а не его копирование между процессами, как это бывает обычно.
Вопросы:
1) ngnix у меня есть, он с ISPmanager'ом установился. Я так и не понял, даже почитав по вашим ссылкам, как с ним работать...
2) Perl - запись файла на HDD идёт сразу без загрузки файла в ОЗУ? Ведь он сразу файл принимает, а не как PHP. Или для обработки файла Perl всёже пихает всё в RAM ???
Насчет перла ни чего не скажу, как там организованна загрузка без понятия.
1) http://ru.wikipedia.org/wiki/Nginx
Обычно ISPmanager сам настраивает связку правильно ставя nginx фрондендом, а Apache бэкендом.
2) Если файл не только загружаем, но еще и обрабатываем (фотка?) и его размер 1ГБ, то при имеющихся 512МБ его стандартными библиотеками не обработать в любом случае. Тут придется копать в сторону блочной обработки файла.
Если файл не только загружаем, но еще и обрабатываем (фотка?) и его размер 1ГБ, то при имеющихся 512МБ его стандартными библиотеками не обработать в любом случае. Тут придется копать в сторону блочной обработки файла.
1) Извиняюсь за некоррекность - Под понятием обработать я хотел сказать, что файл надо переименовать на оригинальное имя (чтобы небыло конфликтов) далее записать его размер, тип, настоящее имя и тд в БД (исп. СУБД MySQL) - редактировать файл нет необходимости...
2) Поискал в инете про upload в Nginx, но так и не понял как он это производит. Если у меня на странице сайта в форме указан action="http://имя_сайта/upload.php", то файл будет перехвачен фрондендом и закачан с минимальными нагрузками на сервер, а скрипт upload.php что будет делать, что с ним?
3) Не нашёл на счёт расхода RAM при uploade на Nginx, Если PHP загружает весь файл в RAM, то Nginx как себя ведёт?
Тогда глупости все это. При чистом upload ОЗУ PHP не потребляет. Более того, до тех пор пока файл не будет получен полностью управление в скрипт передано не будет. Именно поэтому на PHP нельзя написать пресс-индикатор загрузки файла (хотя можно, если доустановить APC).
Имя принятого файла VTS_04_3.VOB
Тип файла video/mpeg-system
Размер принятого файла 1073739776
Имя временного файла C:\WINDOWS\Temp\php32A.tmp
Ошибка 0
Файл перемещен на сервер
Это я загрузил гиговый дивидишный файл.
Вообще нужно сначала логи было смотреть, там наверняка есть записи либо о превышении размера входящего файла, либо превышении времени загрузки файла.
В общем марш в мануал читать описание upload_max_filesize, max_input_time и post_max_size директив.
Имя принятого файла VTS_04_3.VOB
Тип файла video/mpeg-system
Размер принятого файла 1073739776
Имя временного файла C:\WINDOWS\Temp\php32A.tmp
Ошибка 0
Файл перемещен на сервер
Это я загрузил гиговый дивидишный файл.
Вообще нужно сначала логи было смотреть, там наверняка есть записи либо о превышении размера входящего файла, либо превышении времени загрузки файла.
В общем марш в мануал читать описание upload_max_filesize, max_input_time и post_max_size директив.
кста, скорее всего да... отсыхает по таймауту.
Автор, я кинул тебе ссылку на xupload, там как раз аплоадер с индикатором загрузки файла и в БД вся инва пихается тоже (если не ошибаюсь). Качни фришную версию, да глянь. Либо тюнь свой аплоад на PHP :)