Что нового

Количество байт в переменной...

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Всем доброго врмени суток...
У меня ужасно простой вопрос... но я что-то больно долго пытаюсь найти на него ответ
Какая функция возвращает количество байт которые весит конкретная переменная...
т.е. есть у меня $SomeText как мне узнать сколько в переменной байт
 

axlwor

Скриптер
Сообщения
657
Репутация
147
И что дальше с этим знанием делать?
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
POST - запросы строить...
Content-Length: (суммарный объём включая дочерние заголовки)
Body - формируется в переменной...
:smile:)))

Кстати нужная функция:
Код:
BinaryLen()
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
RUVATA [?]
Какая функция возвращает количество байт которые весит конкретная переменная
...И...
Какая функция возвращает количество byte содержащихся в переменной.
Две разные вещи!
Лично я понял, что вам нужна функция, которая возвращает количество byte занимаемых переменной в памяти.
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Garrett, а я сам еще не понял точно, вернее кгда задавал вопрос вроде был уверен, а теперь уже не очень :whistle:
Суть в том, что я пытаюсь собрать вручную некий POST-запрос... один из необходимых хидеров -
Content-Length: (суммарный объём включая дочерние заголовки) так написано в стандарте...
Этот самый Content я собираю вручную в переменной
И вот *** его знает, что они имели в виду, что им надо... байты в памяти, байты - символы в тексте я запутался...
одичал, т.к. :
Код:
MsgBox(0,"", BinaryLen($PostBody))
MsgBox(0,"", StringLen($PostBody))

возвращают одно и то-же...
Хотя такой-же КОРЕКТНЫЙ запрос сформированный браузером кажет в этом хидере вобще загадочное число... как он его просчитал мне не ясно...
PS: Я пытюсь симитировать POST-запрос загрузки файла на веб-сервер.
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
вот такая загагулина я уже понял что где-то неправильно собираю (вот она динамическая типизация :mad:)...

Если данные собраны правильно, то для некоего файла test.xls
Content-Lenth составляет 65232 ; это я выяснил снифером стырив работающий запрос браузера
Вот я открываю сей файл в Force binary mode, и смотрю что у меня там вышло ?
Код:
$TagertFile = FileOpen("B:\Test.xls", 16)
$FileBytes = FileRead($TagertFile, FileGetSize("B:\Test.xls"))
FileClose($TagertFile)

MsgBox(0,"",BinaryLen($FileBytes))

И получаю очень хороший результат - 65024
Нехватает мало по малу дочерних заголовков с "баундерами"
давайте слепим, а так-же сформируем наш конЭЦ.. согласно спецификации стандарта multipart хвост имеет специальную последовательность после баундера "--"
Код:
$bounder = "--voe2011"

$PostLowHeaders = 'Content-Disposition: form-data; name="download"; filename=' & '"' & $FileName & '"' & @CRLF
$PostLowHeaders = $PostBody & "Content-Type: application/vnd.ms-excel" & @CRLF & @CRLF
$PostLowHeaders = $PostBody & $bounder & @CRLF
$TheEndOfPostBody = $bounder & "--"

И теперь самое главное ???? как это все собрать !!! :laugh:
Я пробовал и так
Код:
$PostBody = StringToBinary($PostLowHeaders) & $FileBytes & StringToBinary($TheEndOfPostBody)

И просто
Код:
$PostBody = $PostLowHeaders & $FileBytes & $TheEndOfPostBody

И... не буду утомлять перечислениями...
немого интересного
Пока $FileBytes ни с чем не объединять, его StringLen() и BinaryLen() - совершенно разные числа
130050 и 65024 соотвественно
Как только я пытаюсь объеденить что ни будь с $FileBytes - его его StringLen() и BinaryLen() становятся одним и тем-же и составляют более 130050 что заведомо неверный результат...

КАК МНЕ СФОРМИРОВАННЫЕ СТРОКИ ПРЕВРАТИТЬ В БАЙТЫ и ВСЕ ЭТО СОЕДЕНИТЬ ????
я уже готов отчаяться и взять другой инструмент, где строгая типизация решит хотябы эту проблему.

...
The multipart delimiters and header fields are always 7-bit ASCII in any case, and data within the body parts can be encoded on a part-by-part basis,
...
если я правильно понял для доч.заголовков и "делемитеров" они-же "баундеры" (разделители)
всегда кодировкадолжна соответствовать 7-bit ASCII ??? и... все... я пошел курить (тетий день подряд, одну за одной :blink:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
RUVATA
Может, вы всё же предоставите тестовый материал и опишите задачу. :smile:
Как я понял, вам нужно на определённый сервер загрузить файл. Так?
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Да...
Кстати, вы ужe задавали мудрый вопрос... я не предал ему тогда значения...
Garrett [?]
Лично я понял, что вам нужна функция, которая возвращает количество byte занимаемых переменной в памяти
А существут ли возможность считать байты памяти которые выделены под переменную, вроде как я считывал байты файла открыв его в Force binary mode ?
________________________
И немножко о ситуации:
Я поднял свой веб-сервер на node.js //
он обладает функционалом загрузки файлов присланных в формате POST-запроса Multipart
(такой-же формат используется при передаче E-Mail, фактически он априори стандарт для передачи файлов по http), с одним лишь интересным моментом, node.js это технологи асинхронной обработки запросов... подключения типа keep-alive...
Запрос долже содержать свое Body в виде Binary, но не всё его тело состоит из байтов файла... в нем еще должным быть дочерние заголовки необходимые парсеру для интерпритации контента.
Все браузеры отлично справляюся с формированием таких запросов, все работает сервер принемает без нареканий, но API-браузеров не дает возможности подавать ему файл програмно (это мера безопасности, т.е. такой запрос формируется только если юзверь сам выбрал файл, иначе нарушается принцип "песочницы")
Я задался задачей симитировать такой запрос... изучил его стуктуру... но никак не могу его собрать
PS:
Во вложении некий файл "test.jpg" (картинка просто как пример, буду грузить файлы xls)
при правилной сборке запроса его вес 23575 байт.
сам файл весит 23334 байт т.е. 241 байт составляют дочерние заголовки
Код:
-----------------------------326121868212983 
Content-Disposition: form-data; name="download"; filename="test.jpg" 
Content-Type: image/jpeg

*** здесь байты файла
-----------------------------326121868212983--
Сам запрос имеет заголовок
Код:
Content-Type: multipart/form-data; boundary=---------------------------326121868212983 
Content-Length: 23575
вот...


Добавлено:
Сообщение автоматически объединено:

все решилось - необходимо использовать для сформированного текста перед объединением функцию
Код:
Binary()

н/п
Код:
$PosBody = Binary($PostHeader) & $FileBytes & Binary($EndOfPost)

где $PostHeader и $EndOfPost сформированный подзаголовок и завершающий разделитель
а $FileBytes - байты файла считанные в режиме Force binary mode
Код:
$TagertFile = FileOpen($SomeFile, 16)
 
Верх