Показать сообщение отдельно
Старый 04.02.2010, 17:04
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 5  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
представь себе, что ты через script.php?var1=val&var2=val пытаешься передать бинарные данные(где, в том числе встречаются %,&,? и любые другие символы). Примерно то же самое происходит, когда ты пытаешься передать и картинку и переменные через POST.

Если ты хочешь передать картинку через POST, как переменную, то тебе её нужно закодировать так, как кодируют бинарные данные при передаче по эл. почте, т.е. base64 алгоритмом. Готовые решения base64 легко нагуглить.

Другой способ - это сериализовать данные в flash в ByteArray и распаковать их в пхп.
Сериализовать:
Код AS3:
...
var obj:Object = {};
obj.reportData = this.reportData;
obj.periodData = this.periodData;
obj.graph = byteArrayOfPic;
 
var ba:ByteArray = new ByteArray();
ba.writeObject(obj);
 
req.data = ba;
...
но, чтобы распаковать это, нужен zend_amf, sabreamf или другой пакет для работы с amf-протоколом в пхп.
C zend например так:
PHP код:
$amf file_get_contents('php://input');
if (!
$amf) return;
$amf substr($amf1);
// Create a Parser
$stream = new Zend_Amf_Parse_InputStream($amf);
// Deseriaize string into AMF3
$d = new Zend_Amf_Parse_Amf3_Deserializer($stream);
// Read as native PHP object
$data $d->readObject();
$reportData $data->reportData;
$periodData $data->periodData;
$type $data->reportType
и должен заметить, не знаю, глюк zendAMF, или особенность amf, или еще что, но так у меня херились большие вложенные массивы, если передавались и бинарные и обычные данные так одним запросом.

Короче говоря, выбраный тобой способ - по GET передавать переменные, по POST - бинарник - не самый худший способ.
__________________
мой пустой блог