![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
GavriKos |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
Доброго времени суток. Есть задача - нужно реализовать аплоад файлов на сервер не через html-форму, а из обычного приложения. В приложении отправляю обычный POST-запрос (без енкодинга как для заливки файлов). В пхп-скрипте подразумевается присланные данные в POSTе сохранить в бинарный файл. Написал на пхп вот такой код:
Вроде все правильно, но такой код сохраняет файл в текстовом виде, а не в бинарном. fputs тоже дает текстовый файл. ПРичем размер текстового меньше (намного) размера передаваемого бинарника - срабатывает какая то перекодировка. Единственный вариант, который выдал бинарный файл
Причем именно "%c" (%s дает текстовый файл). Но при этом данные все равно были сохранены неправильно (80% файла - пустые символы, причем даже реально читаемые символы в бинарнике не записываются таким методом). Прочитал про отмену перекодировки путем прописывания пары строчек в htaccess - не помогло. Кто что подскажет по проблеме? --------------------
Донецкая группа IT - присоединяемся |
||||
|
|||||
MoLeX |
|
||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
-------------------- Amazing ![]() |
||||
|
|||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
Может
? Выяснил, что пхп кодирует по-своему некоторые символы, вне зависимости от того, как ему передаются данные. Соответственно надо на стороне отправляющей данные перекодировать так, чтобы пхп ничего с ними не сделал, но это другой вопрос. А вот вопрос о корректности выкидывания в файл остался - fwrite записывает меньше данных, причем существенно. Даже если принудительно, в цикле вычитывать по одному символу. Символов окончания строки нету в теле. --------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
нет. посмотрите, что вам приходит в массиве $_FILES пхп до фени, какой клиент передаёт ему данные, он принимает их одинаково. поэтому вы можете брать любой пхп-скрипт серверной обработки загружаемых файлов, и он подойдёт, что для хтмл-формы с вэб-странички, что для вашего приложения. данные о приходящих файлах записываются в массив $_FILES, и никак не $_POST или $_GET |
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
1) С дампом переменной ничего не получится - прога не обрабатывает то, что вывелось скриптом на страницу. Так что судить о результатах можно только по файлам
2) Все таки по поводу $_FILES - если я отправляю самый обычный пост-запрос, с телом file=содержимое_файла, то пхп вроде ничего в $_FILES не запишет. Запрос самый обычный, без указания о том, что идет файл. --------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
MoLeX |
|
||||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
GavriKos, не знаю как вы отправляете данные и с помощью какого языка, поэтому привожу пример для C++ Builder
и на сервере test.php
-------------------- Amazing ![]() |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Получится неправильно. Для метода POST существует 2 типа кодирования multipart/form-data и application/x-www-form-urlencoded. Второй используется по умолчанию. Как можно заметить, для первого следует соблюдать "границы", со вторым - кодировать служебные символы в urlencode стиле. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
ksnk, отправляю именно в application/x-www-form-urlencoded. Вывод - лучше разобраться как отправлять в multipart/form-data )) Тогда и дамп будет актуальнее.
MoLeX, отправляю через связку c++ + wxCurl. Типа кодирования в параметрах нету. Или не нашел ( --------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
посмотри компонент IdHTTP, Indy лучше последние
Это сообщение отредактировал(а) MoLeX - 13.5.2011, 08:23 -------------------- Amazing ![]() |
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
MoLeX, это, я так понял, библиотеки для работы с вебом... Уже пол проекта на wxCurl писано. Но мысль с кодированием правильная?
--------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
сохранить в файл и помедитировать. Вроде, то, что посылается, то и должно прилететь для application/x-www-form-urlencoded -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
Пустой файл н выходе ( Данны еточно посылаются. --------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
первый раз вижу модификатор wb Добавлено через 1 минуту и 10 секунд а это вообще как получилось? http://ru2.php.net/manual/en/function.fwrite.php |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 5 Всего: 39 |
libcurl умеет multipart, подозреваю что его wx оболочка тоже. http://curl.haxx.se/libcurl/c/curl_easy_se...CURLOPTHTTPPOST
|
|||
|
||||
GavriKos |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 8.8.2007 Где: Донецк, Украина Репутация: нет Всего: 1 |
bars80080, wb - нормальный модификатор. w - создать для записи, b - бинарный режим.
--------------------
Донецкая группа IT - присоединяемся |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |