Пытаюсь послать методом POST бинарный файл на сервер

Shurgenz

Guest
Пытаюсь послать методом POST бинарный файл на сервер

В параметрах POST в переменной filecontent у меня преобразованное содержимое бинарника. Преобразованное по принципу пробел=%20, и так далее, по всем специальным и русским символам. Получив содержимое, пишу его в файл:
PHP:
<?php
$handle = fopen ($filename, "w");
 if (!fwrite($handle, $filecontent)) {
	        print "Cannot write to file ($filename)";
        exit;
 		};
 fclose($handle);
?>
Проблема с пробелом и со знаком "\"

пробел трансформируется в пустой символ, а \ вообще пропадает, потому как это экранирующий символ.

Вопрос: как по-другому принимать переменную контента?

Занимался ли кто-нибудь чем-нибудь подобным?
 

Фанат

oncle terrible
Команда форума
В параметрах POST в переменной filecontent у меня преобразованное содержимое бинарника.
я очень сомневаюсь в этом утверждении.
правда не очень понятно, что имеется в виду под заклинанием "послать методом POST бинарный файл на сервер" . Отправка через форму? Тогда "параметры ПОСТ" к файлу не имеют отношения. Если как-то ещё, то при чем здесь "замены по принципу"?
\ вообще пропадает, потому как это экранирующий символ.
я очень сомневаюсь в этом утверждении.
что этот символ экранирует?
почему экранирующий символ должен пропадать?

Вопрос: как по-другому принимать переменную контента?
легко!
Как только ты пояснишь, что имеешь в виду под словами "переменная контента".
Занимался ли кто-нибудь чем-нибудь подобным?
О! Этого добра навалом. Столь бессвязным изложением своих проблем на этом форуме заниматеся каждый второй. join the club
 

Shurgenz

Guest
сорри, наоборот:

проблема в основном с пустым символом с кодом 00Н и символом \ ... пустой символ преобразовывается в пробел, а косая черта двоится, незнаю, почему.

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

http://www.planet-source-code.com/vb/scripts/showcode.asp?txtCodeId=43806&lngWId=1

только из набора валидной строки я убрал символы ?=&

-~{}~ 26.03.05 17:49:

поясню... я использую на клиенте компонент WinHTTPRequest. Он умеет формировать POST, GET, PUT и другие виты tcp запросов
 

Shurgenz

Guest
Автор оригинала: SiMM
> я использую на клиенте компонент WinHTTPRequest
А при чём тут PHP?
при том, что принимаю я на сервере в php, модулем, написаннам в первом посте.

-~{}~ 26.03.05 18:00:

Вот эта строка преобразованный клиентом бинарник

%1F%8B%08%08%A4nEB%00%00slugbao4.txt%00%3D%8D%C1j%C2%40%10%86%EFB%DFa%F12%97%21%EE%1A%23x%D8%A3%82%17%0B5%F7%B0M%06%14%D4%C8l%F4%25%85B%DF+9X%CA%D6XHh.%BD%B8%828%A7%0F%FE%FF%FB%A7%3F_%2C%A7o%B1%98/%E2W%F1n%2C%25%2C%96%D3X%AC%B3%84%F5%089%D9%99-i%F8%FCi%BF%AAR%5C%AB%CB%B9.%01}j%0B%26%2A%B4R%21%CE%94%86%0F%D7%04%80%E9%81%93%CC%14%5E%18%8E%03%19%062%02%7C%14%E1%F4%5D%B9%FA%FC%D7x}%95%1F%AC%EF%88%E7%01n%E8H%AC%E1%01%F6N%9C%E7%5B%0F%EEz%A9%CB%E6%1F%D00%19%0Dc9%88%E4%40I%C0%3D%AFS%D2j%A8%C2Q%84%05m%EENF6%F53%5D%D7v%AD%EB%1C%A0%7F%3C%F9-k%E8%BF%F4nY%1E%DA_%EB%00%00%00

А это то, что получается после приема

%1F%8B%08%08%A4nEB%00%00slugbao4.txt%20%3D%8D%C1j%C2%40%10%86%EFB%DFa%F12%97%21%EE%1A%23x%D8%A3%82%17%0B5%F7%B0M%06%14%D4%C8l%F4%25%85B%DF+9X%CA%D6XHh.%BD%B8%828%A7%0F%FE%FF%FB%A7%3F_%2C%A7o%B1%98/%E2W%F1n%2C%25%2C%96%D3X%AC%B3%84%F5%089%D9%99-i%F8%FCi%BF%AAR%5C%5C%AB%CB%B9.%01}j%0B%26%2A%B4R%21%CE%94%86%0F%D7%04%80%E9%81%93%CC%14%5E%18%8E%03%19%062%02%7C%14%E1%F4%5D%B9%FA%FC%D7x}%95%1F%AC%EF%88%E7%01n%E8H%AC%E1%01%F6N%9C%E7%5B%0F%EEz%A9%CB%E6%1F%D00%19%0Dc9%88%E4%40I%C0%3D%AFS%D2j%A8%C2Q%84%05m%EENF6%F53%5D%D7v%AD%EB%1C%A0%7F%3C%F9-k%E8%BF%F4nY%1E%DA_%EB%20%20%20

-~{}~ 26.03.05 18:03:

Можно ли как-нибудь это все побороть? либо на стороне клиента, написанного неважно на чам, либо на стороне приемника, написанного на php?
 

Фанат

oncle terrible
Команда форума
по поводу косой тебе дали ссылку
по поводу преобразования - http://detail.phpclub.ru/article/upload там, где "Проблемы с загрузкой бинарных файлов "

Поскольку посылаешь ты никакой не файл, а просто строку, то было бы гораздо лучше, если бы ты файлы не упоминал вовсе.
Быстрее бы ответили
 

Shurgenz

Guest
я намеренно привел текстовый вариант бинарного файла. На стороне приемника он и записывается, как бинарник.. но измененный.. а это, как вы понимаете, критично.
 

Фанат

oncle terrible
Команда форума
это к чему было?
может быть, ты сначала решишь свои вопросы, а потом будешь писать беллетристику?
 

Shurgenz

Guest
Фанат:

А чего непонятного?

www.somesite.ru/my_script.php?filename=myfile.txt.gz&filecontent=а тут тот самый контент, что я выше написал
 

Shurgenz

Guest
по поводу твоей ссылки..

Проблемы с загрузкой бинарных файлов - классический вопрос "почему бьются файлы при upload". Вот способ решения, предложенный Димой Бородином (http://php.spb.ru): В директории, где лежит скрипт, делаем файл .htaccess, в котором пишем: CharsetDisable On. В файл httpd.conf дописать строки:
<Location />
CharsetRecodeMultipartForms Off
</Location>

Не админ я ... хост, на котором пишу доступен мне только локально. Как я могу добавить что-то в httpd.conf?

И поможет ли все это, если я передаю бинарник строкой? думаю, нет. Бинарники стандартными средствами кладутся на сервер без проблем...

Так что вопросы остались.. сорри... не хочу никого грузить, хочу понять...
 

Фанат

oncle terrible
Команда форума
Как я могу добавить что-то в httpd.conf?
добавь в htaccess
если не можешь и в него - то никак.
поможет ли все это, если я передаю бинарник строкой? думаю, нет
думать от тебя не требуется.
Бинарники стандартными средствами кладутся на сервер без проблем...
стандартными? Это какими? ftp?
 

Shurgenz

Guest
стандартными... это по ftp. Но по ftp неудобно. Малая защищенность и неудобность вообще... если хост сменится, что вообще, возможно, надо будет раздавать логины пароли клиентам, чего я в принципе делать не хочу... мало ли чего они могут натворить.

Вопрос по теме тогда примерно такой... если по ftp у меня файлы кладутся нормально, а по HTTP методом POST крокозябры... то .htaccess разрулит ситуацию?
 

Фанат

oncle terrible
Команда форума
милый.
если ты думаешь, что я буду тебя уговаривать - ты ошибаешься.
не хочешь - не делай. такое ощущение складывается, что это у меня что-то перекордируется, и мне надо исправить.

Впервые встречаю такого клиента, который, вместо того, чтобы пойти и сделать, сидит и по 5 раз переспрашивает.

стандартными... это по ftp.
мда. про фтп - это я с сарказмом сказал. как анекдот.
оказалось - правда.

Видишь ли, апач - это веб-сервер. он обслуживает http-запросы
а ftp сервер - это совсем другой сервер. и обслуживает он ftp запросы. и никакой связи между ними нет.
Эта информация не нужна для разрешения твоего вопроса, но я просто решил с тобой ей поделиться, чтобы ты знал.
такие вещи надо знать
 

Shurgenz

Guest
согласен, надо такие вещи знать... Но видишь, ли Фанат, ты в инет штучках, может, силен, я в других, не относящихся напрямую к инету. Тем не менее спасибо. Большое спасибо, милый.
 

Фанат

oncle terrible
Команда форума
Давай-ка определяться.
Начнем с того, что вот это
www.somesite.ru/my_script.php?filename=myfile.txt.gz&filecontent=а
не имеет никакого отношения к методу POST.
Это метод GET.
во-вторых, насколько я понял - твое клиентское приложение тут не при чём, поскольку руками отправленная строчка перекодируется тоже.
так?
 

Shurgenz

Guest
Как правильно принять request браузера?

Вопрос то простой, как мне кжется.

если в браузере написать строку

www.somehost.ru/myscript.php?filena...ntent=

На приеме файл myscript.php содержит

<?php
$handle = fopen ($filename, "w");
if (!fwrite($handle, $filecontent)) {
print "Cannot write to file ($filename)";
exit;
};
fclose($handle);
?>

То в файл пишется %00%00%00 ... .htaccess не помогает.

Или, если пишется %52 , то получается %52%52 ... что коверкает первичную информацию...
 

Shurgenz

Guest
>не имеет никакого отношения к методу POST.
>Это метод GET

Не правда. На клиенте это POST. На приемнике - переменная $filecontent
 

Shurgenz

Guest
>>во-вторых, насколько я понял - твое клиентское
>>приложение тут не при чём, поскольку руками отправленная
>>строчка перекодируется тоже

перекодируется, если отправить просто строку в бровзере... но не так перекодируется, как хотелось бы... %00 трансформируются в пробелы, а слэши дублируются. Но дело не в том. Дело в том, что бинарник засылается приложением. Пользователь кликает кнопарь... и только то. Эх.
 

Фанат

oncle terrible
Команда форума
Не правда. На клиенте это POST
Забудь про своего клиента.
сейчас ты нам привёл GET запрос.
и мы работаем с GET запросом.
понятно?

-~{}~ 26.03.05 22:33:

%00 трансформируются в пробелы
слушай, в другом топике у тебя получается наоборот.
ты определись, а?
 
Сверху