представь себе, что ты через 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($amf, 1);
// 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 - бинарник - не самый худший способ.