12.05.2015 / 15:58 | |
Jahak Пользователь Сейчас: Offline
Имя: Константин Регистрация: 16.01.2012
| kingdosya, Лучше наверное будет в теме по C / C++ написать. Я бы помог, но C плохо знаю. |
12.05.2015 / 23:31 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| Цитата kingdosya: Посмотрел понял. Но я решил не использовать такой способ в связи с тем что воркеры будут заняты при загрузках. А если у пользователя низкий скорость интернета то вообще "круто" будет. Да ещевремя выполнения при таком по боку, там сервер уже работает
__________________
Магистр Мёда |
13.05.2015 / 10:16 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Цитата Jahak: https://github.com/php/php-src.../streamsfuncs.c#L444ret =php_stream_copy_to_stream_ex(src, dest, maxlen, &len); эту надо было показать. и то логично же она потребляет столько памяти, сколько ты задашь максимальную длину массива. трагедию на 2 страницы развели __________________
знает толк |
13.05.2015 / 11:31 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| Цитата vl@volk: ret =php_stream_copy_to_stream_ex(src, dest, maxlen, &len); эту надо было показать. и то логично же она потребляет столько памяти, сколько ты задашь максимальную длину массива. трагедию на 2Подробнее? То есть можно указать размер буфера?
|
13.05.2015 / 16:09 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| kingdosya, int stream_copy_to_stream ($source, $dest, $maxlength, $offset) Копирует $maxlength байт данных от текущей позиции (или от позиции $offset, если указана) из потока $source в поток $dest. Если $maxlength не указан, будет скопировано всё оставшееся содержимое из $source в $dest. $maxlengt и $offset не обязательные аргументы.
пример содержимое from.txt содержимое from.txt first_12_sym_nextsymbols
$source = fopen('from.txt', r);
$dest = fopen('new.txt', w+);
echo stream_copy_to_stream ($source, $dest, 12); // 12
fclose($source);
fclose($dest);
readfile('new.txt'); // first_12_sym
То есть можно указать размер буфера?совершенно верно, аргумент $maxlength __________________
знает толк |
13.05.2015 / 19:53 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| Цитата vl@volk: kingdosya,
пример
содержимое from.txt содержимое from.txt first_12_sym_nextsymbols [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 Супервизор Сейчас: Offline
Регистрация: 11.01.2010
| Цитата vl@volk: То есть можно указать размер буфера?совершенно верно, аргумент $maxlengthНе пори чушь, это никакой не размер буфера, это именно количество байт, которые нужно копировать, а функция сама работает через буфер, и ничего ей там указывать не надо. stream_copy_to_stream - это обертка над php_stream_copy_to_stream_ex, и если покопаться на гитхабе, то можно найти это: #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 Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| никогда бы не подумал разбирать исходники гг
__________________
Магистр Мёда |
14.05.2015 / 16:22 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| Цитата web_demon: Не пори чушь, это никакой не размер буфера, это именно количество байт, которые нужно копировать, а функция сама работает через буфер, и ничего ей там указывать не надо.
stream_copy_to_stream - эДва вопроса: как назвается эта константа? И как на хостинге узнать ее значение?
|