Вниз  PHP и мелкие вопросы
- 12.05.2015 / 15:58
Jahak
  Пользователь

Jahak 
Сейчас: Offline
kingdosya, Лучше наверное будет в теме по C / C++ написать. Я бы помог, но C плохо знаю.
- 12.05.2015 / 23:31
Koenig
  Модератор форума

Koenig 
Сейчас: Offline
Цитата kingdosya:
Посмотрел понял. Но я решил не использовать такой способ в связи с тем что воркеры будут заняты при загрузках. А если у пользователя низкий скорость интернета то вообще "круто" будет. Да еще
время выполнения при таком по боку, там сервер уже работает
__________________
 Магистр Мёда
- 13.05.2015 / 10:16
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
Цитата Jahak:
https://github.com/php/php-src.../streamsfuncs.c#L444
ret =php_stream_copy_to_stream_ex(src, dest, maxlen, &len);
эту надо было показать.
и то логично же она потребляет столько памяти, сколько ты задашь максимальную длину массива. трагедию на 2 страницы развели :facepalm:
__________________
 знает толк
- 13.05.2015 / 11:31
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Цитата vl@volk:
ret =php_stream_copy_to_stream_ex(src, dest, maxlen, &len);
эту надо было показать.
и то логично же она потребляет столько памяти, сколько ты задашь максимальную длину массива. трагедию на 2
Подробнее? То есть можно указать размер буфера?
- 13.05.2015 / 16:09
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
kingdosya,

int stream_copy_to_stream ($source, $dest, $maxlength, $offset)
Копирует $maxlength байт данных от текущей позиции (или от позиции $offset, если указана) из потока $source в поток $dest. Если $maxlength не указан, будет скопировано всё оставшееся содержимое из $source в $dest. $maxlengt и $offset не обязательные аргументы.
пример
содержимое from.txt
  1. $source = fopen('from.txt', r);
  2. $dest = fopen('new.txt', w+);
  3.  
  4. echo stream_copy_to_stream ($source, $dest, 12); // 12
  5. fclose($source);
  6. fclose($dest);
  7.  
  8. readfile('new.txt'); // first_12_sym
То есть можно указать размер буфера?совершенно верно, аргумент $maxlength
__________________
 знает толк
- 13.05.2015 / 19:53
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Цитата vl@volk:
kingdosya,

пример
содержимое from.txt
[code=php]
$source = fopen('from.txt', r);
$dest = fopen('new.txt', w+);

echo stream_copy_to_stream[/co
Да тебе респект! Действительно логично. Понял. Чтобы не наполнять оперативку нужно частично скачать файл. Для этого как я понял достаточно использовать цикл, последние 2 аргументы и значения которого возвращает функция.
- 13.05.2015 / 21:59
web_demon
  Супервизор

web_demon 
Сейчас: Offline
Цитата vl@volk:
То есть можно указать размер буфера?совершенно верно, аргумент $maxlength
Не пори чушь, это никакой не размер буфера, это именно количество байт, которые нужно копировать, а функция сама работает через буфер, и ничего ей там указывать не надо.


stream_copy_to_stream - это обертка над php_stream_copy_to_stream_ex, и если покопаться на гитхабе, то можно найти это:
  1. #define php_stream_copy_to_stream_ex(src, dest, maxlen, len) _php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC)
А значит ищем _php_stream_copy_to_stream_ex и видим что работает она через буфер, который задается константой:
https://github.com/php/php-src...eams/streams.c#L1482

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

Изменено web_demon (13.05 / 22:00) (всего 2 раза)
- 14.05.2015 / 10:13
Koenig
  Модератор форума

Koenig 
Сейчас: Offline
никогда бы не подумал разбирать исходники гг
__________________
 Магистр Мёда
- 14.05.2015 / 10:25
web_demon
  Супервизор

web_demon 
Сейчас: Offline
Koenig, Да и я в первый раз, просто терпеть этот оффтоп уже не мог :gg:
- 14.05.2015 / 16:22
kingdosya
  Пользователь

kingdosya 
Сейчас: Offline
Цитата web_demon:
Не пори чушь, это никакой не размер буфера, это именно количество байт, которые нужно копировать, а функция сама работает через буфер, и ничего ей там указывать не надо.


stream_copy_to_stream - э
Два вопроса: как назвается эта константа? И как на хостинге узнать ее значение?
Наверх  Всего сообщений: 4740
Фильтровать сообщения
Поиск по теме
Файлы топика (129)