- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Предположим у пользователя на хостинге медленная скорость передачи данных. Ему треуется загрузить очень большой файл(до 100мб) средствами PHP. Сразу оговоримся что доступа к php.ini у нас нет и хостеру не нравятся выкрутасы вида:
Я подумал что в этом случае ситуацию спасет рекурсия(но я не уверен до конца). То есть мы разбиваем исходный файл на отрезки по 5МБ. После того как будет скачано 5МБ функция запишет эти данные в выходной файл и запустит сама себя еще раз скачав следующие 5МБ. И так до тех пор пока файл не будет скачан полностью. Можно даже в несколько потоков все организовать благо curl позволяет. Так вот прокатит ли такой механизм.
Следует учесть что за 30 секунд(время работы скрипта по умолчанию) 5 мегабайт файла загрузиться успевает, не смотря не фиговую скорость интернета.
Подскажите пожалуйста оно того стоит? В принципе я уже почти дописал функцию, но все-же душу грызут сомнения такого рода:
Дело в том что рекурсивная функция находится в одном и том-же скрипте(естесственно она же сама себя вызывает), а так как время исполнения скрипта - 30 сек - не зря ли я стараюсь?
а так как время исполнения скрипта - 30 сек - не зря ли я стараюсь?
так попробуйте =)
не писать много, а рекурсивную "болванку" запустить, которая 20 секунд "ждёт" и только потом себя вызывает... допустим 5 раз..
не зря ли я стараюсь
зря:( вы правы насчёт "одного скрипта"
Точно! сча попробую)
---------- Добавлено 25.02.2013 в 15:52 ----------
РАБОТАЕТ!!! Урааа)
Тестил вот этим:
---------- Добавлено 25.02.2013 в 15:54 ----------
Есть у подобного подхода "подводные камни"?
РАБОТАЕТ!!! Урааа)
Тестил вот этим:
Эм.. а точно time_limit не нравится хостингу? :)
прописать в файле функцию которая на 29 секунде будет делать get запрос к самой себе и на этом заканчивать свою работу, предварительно записав результат работы в файл tmp, где писать на каком этапе завершил свою работу. При вызове самого себя читает конфиг из тмп и продолжает качать дальше. Как так, думаю можно реализовать данную задачу.
а не проще хостера сменить?
сейчас их как грязи.
а не проще хостера сменить?
сейчас их как грязи.
Не, не, в хостере дело. Дело в модуле который пишу. Не все же пользователи имеют скажем так безграничные ресурсы на своих хостингах и прочем => значит надо максимально оптимизировать код под среднестатического юзеря, который не хочет портить себе нервы общением с хостером, а хочет просто Результат.
В итоге приходится оптимизировать код под стандартизированный конфиг сервера...
Эм.. а точно time_limit не нравится хостингу?
Мне не нравится хД) Я вообще такой изврат стараюсь нигде кроме денвера не применять - не знаю почему, наверное интуиция...
прописать в файле функцию которая на 29 секунде будет делать get запрос к самой себе и на этом заканчивать свою работу, предварительно записав результат работы в файл tmp, где писать на каком этапе завершил свою работу. При вызове самого себя читает конфиг из тмп и продолжает качать дальше. Как так, думаю можно реализовать данную задачу
На самом деле я и планировал сделать примерно это, просто вышеуказанный кусок кода доказал свою работоспособность и я не заморачиваюсь теперь хД
РАБОТАЕТ!!! Урааа)
Тестил вот этим:
Вы зря радуетесь. sleep не включается в time_limit.
http://danilovonline.ru/druzhba-sleep-i-set_time_limit-v-php/
Провел эксперимент с рекурсией(php_value max_execution_time 5).
Запускаю скрипт с http://127.0.0.1/test.php?i=0
Ответы сервера:
без слипа: 01234
со слипом: 0 Fatal error: Maximum execution time of 5 seconds exceeded in C:\WebServer\Apache2.2\htdocs\test.php on line 8
ЗЫ. сервер стоит на винде, так что слип учитывается. Так что Ваша идея с рекурсией не проканает, так как срипт не заканчивает работу при вызове самого себя, а ждет ответ:)
Ему треуется загрузить очень большой файл(до 100мб) средствами PHP.
Так "загрузить" или все-таки скачать на сервер?
Дело в том что рекурсивная функция находится в одном и том-же скрипте(естесственно она же сама себя вызывает), а так как время исполнения скрипта - 30 сек - не зря ли я стараюсь?
Зря. http://www.php.net/manual/ru/function.set-time-limit.php