Вниз  PHP и мелкие вопросы
- 22.04.2015 / 11:26
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Цитата Koenig:
смотря как ты вызываешь скрипт
я так замутил
2 * * * * cd /home/clients/user_ftp0/domains/domen.ru/html/; wget -q -O /dev/null "http://domen.ru/dir/add_result.php"
Подскажешь вариант на хостинге?
- 23.04.2015 / 18:40
Koenig
  Модератор форума

Koenig 
Сейчас: Offline
ну это с хостинга, это с панельки задачника крона
__________________
 Магистр Мёда
- 24.04.2015 / 04:45
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Цитата Koenig:
ну это с хостинга, это с панельки задачника крона
/home/4563hs9/public_html/ покажи такой вариант. :gg:
- 24.04.2015 / 17:00
Koenig
  Модератор форума

Koenig 
Сейчас: Offline
kingdosya, ну пути то уже сам думаю по изменишь на свои
__________________
 Магистр Мёда
- 11.05.2015 / 06:45
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Хостинг дает умеренно меньше gb чем требуется. По этому решил грабит файлы (фото, видео и т.д.) у других. Конечно я мог бы указать прямую ссылку на файл, который расположен на другом сервисе. Но мне нужно сделать так, чтобы пользователь понятие не имел о том, что тут происходить мородерство. Как я поступил? Для примера возьмем видео файл: скрины и информацию грабим как обычно и показываем + поставим ссылку "скачать" который отправляет на тот самый скрипт который делает красиво:: с помощью file_get_contents() качает требуемый файл и сохраняет его используя ... Да вы угадали file_set_contents(). А также записывает всякие данные в бд. В конце скрипт браузеру показывает ссылку на новой файл. В итоге пользователь получает требуемый файл. На сервере в каждые 30 минут запускается крон-скрипт который выяснить какие файлы лежат на сайте больше 30 минут и удаляет их! А что если через 30 минут пользователью хочется заново скачать тот же файл и на этот раз он указал прямую ссылку на файл? В этом случе на сцену выступает mod_rewrite который в адресах проверяет наличие таких форматов .jpeg .avi .mp4 и т.д. И если они есть - перенаправляет сервер на тот самый скрипт который делает красиво. Теперь скажите с чем заменить функцию file_get_contents()? Так как эта функция сначала грузить в оперативку по этому при загрузке больших файлов создает проблемы. Есть ли другая функция где используется маленькая буферизация? Также скажите вообще можно ли добиться этого другим методом? Например можно ли сделать так чтобы тот скрипт напрямую передавал файлы пользователям, вместо сохранение на сервер? За ране выражаю благодарность! :)
- 11.05.2015 / 10:32
web_demon
  Супервизор

web_demon 
Сейчас: Offline
kingdosya, юзай stream_copy_to_stream к примеру, ну или через fread по кусочку читать и записывать.

От, как раз по ссылке и есть обертка для fread/fwrite, а то я бы поленился писать:
  1. function pipe_streams($in, $out)
  2. {
  3.     $size = 0;
  4.     while (!feof($in)) $size += fwrite($out,fread($in,8192));
  5.     return $size;
  6. }


Изменено web_demon (11.05 / 10:32) (всего 2 раза)
- 11.05.2015 / 10:43
Naik
  Пользователь

Naik 
Сейчас: Offline
kingdosya, только fopen для сторонних сайтов часто запрещается на хостинге
- 11.05.2015 / 10:45
web_demon
  Супервизор

web_demon 
Сейчас: Offline
Naik, да у него видимо он есть, раз file_get_contents работает.
- 11.05.2015 / 11:34
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Цитата web_demon:
Naik, да у него видимо он есть, раз file_get_contents работает.
Спасибо за инфо. Да есть. Кстати там в комментариях насчет stream_copy_to_stream написано: As stream_copy_to_stream() seems to be quite a memory hog (at least in PHP 5.1.6 64-bit) it may be way more efficient just to copy streams with this simple PHP alternative. Перевод: Как stream_copy_to_stream () кажется вполне свиней памяти (по крайней мере, в PHP 5.1.6 64-бит), может быть способом более эффективным только скопировать потоки с помощью этого простого PHP альтернативы. Вопрос: хмм тут сказано свиней память :-D. Можешь объяснить как работает эта функция? Например здесь: stream_copy_to_stream($а, $b, 1024) сначала 1024 байт будет записано в оперативный память и потом все они оптом идут на файл $b ?
- 11.05.2015 / 11:50
web_demon
  Супервизор

web_demon 
Сейчас: Offline
Например здесь: stream_copy_to_stream($а, $b, 1024) сначала 1024 байт будет записано в оперативный память и потом все они оптом идут на файл $b ?Нет, тебе нужны только первые 2 параметра: откуда и куда, пример использования есть по ссылке. Третий - это количество байтов для копирования, а не размер буфера.

Скорее всего эта функция по реализации аналогична паре fread/fwrite (тот код что выше), т.е. там тоже чтение и запись идет кусками, поэтому в памяти она должна занимать гораздо меньше чем file_get_contents (которая читает целиком в строку), но за счет того что это уже готовая функция она будет работать гораздо быстрее fread/fwrite. При использовании последнего варианта, памяти может хватать и будет, но высока вероятность вылезть за php_limit, так что как по мне stream_copy_to_stream тут больше всего подходит.

Изменено web_demon (11.05 / 11:53) (всего 1 раз)
Наверх  Всего сообщений: 4740
Фильтровать сообщения
Поиск по теме
Файлы топика (129)