|
|
|
| Загружаю файл с удаленного хоста с помощью сокетов и сохраняю его в переменную $file. Для корректности загрузки хочу сравнивать размер загруженной переменной с заголовком Content-Length, который мне выдает удаленный сервер.
Варианты оценки загруженного контента разные:
1) сохранить контент в файл и потом оценить его размер функцией filesize( )
2) использовать функцию strlen($file).
Вторая функция мне кажется более предпочтительной, поскольку позволяет оценить размер на более раннем этапе и при обнаружении ошибки загрузки предотвратить лишнюю операцию сохранения на диск.
НО! Файл-то, насколько я понимаю, содержит бинарный контент, а не текстовый.. Может нужно искать функцию оценки размера бинарного контента? Но что это за функция тогда?
Или Http-протокол преобразует бинарный контент в символьный текст при передаче между сервером и клиентом?
Что вы думаете о физике данного процесса и корректности использования в моем случае функции strlen( )? | |
|
|
|
|
|
|
|
для: ДацкыйКот
(01.10.2008 в 20:34)
| | А с каких пор strlen начала выдавать размеры в байтах? | |
|
|
|
|
|
|
|
для: sim5
(01.10.2008 в 20:42)
| | > А с каких пор strlen начала выдавать размеры в байтах?
С момента создания этой функции, не так ли? | |
|
|
|
|
|
|
|
для: BinLaden
(01.10.2008 в 20:53)
| | Ну да, правильно, я что-то о самом содержимом подумал. ) | |
|
|
|
|
|
|
|
для: sim5
(01.10.2008 в 20:42)
| | Открывая сокет функцией fsockopen( ), записывая в него нужные заголовки функцией fputs( ), мы считываем функцией fgets( ) ответ сервера. Этот ответ представлен в текстовом виде. Обрезаем заголовки - и получаем тело ответа.
Прежде я работал с сокетами напрямую, теперь получаю то же тело ответа с помощью классов Zend Framework.
В любом случае ответ приходит в текстовом виде, даже если сервер передает бинарный файл. Поэтому, как ни странно, замеряя контент функцией strlen( ), я получаю пока что тот же размер контента, что и в заголовке Content-Length, и тот же размер получаю функцией filesize( ), сохранив предварительно контент в файл.
Будет ли так всегда? Боюсь что нет. При определенных размерах файла (более 16 Мб по моим оценкам) у меня всегда наблюдался какой-то сбой в загрузках и оценках размеров файла.. | |
|
|
|
|
|
|
|
для: ДацкыйКот
(01.10.2008 в 20:34)
| | strlen() в php вполне корректно работает с бинарным контентом.
Сохранять контент в файл лишь за тем, чтобы оценить размер - совершенно излишне. | |
|
|
|