0

ByteArrayをas3経由でPHPに送信しようとすると、BLOBフィールド(pic)が0バイトになるため、PHPスクリプトまたはHTTP_RAW_POST_DATAが機能していないと想定します。

Flash部分は機能していると思います。ビットマップデータが通過するかどうかを確認するためにを設定しましたtrace()が、通過しているように見えるので、php側を想定しています。ここの誰かが私のためにそれを修正できることを願って、コードの両方の部分を投稿します。ありがとう。

AS3

    private function export():void
    {
        var bmd:BitmapData = new BitmapData(600, 290);
        bmd.draw(board);
        var ba:ByteArray = PNGEncoder.encode(bmd);
        trace(ba);
        var _request:URLRequest = new URLRequest ("http://site.com/readimage.php");
        var loader: URLLoader = new URLLoader();
        _request.contentType = "application/octet-stream";
        _request.method = URLRequestMethod.POST;
        _request.data = ba;
        loader.load(_request);
    }

PHP

    <?php
$username = "images";
$password = "password";
$host = "localhost";
$database = "images";

$link = mysql_connect($host, $username, $password);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db ($database);

$query ="INSERT INTO main (pic) VALUES ('".$GLOBALS["HTTP_RAW_POST_DATA"]."')" or die(mysql_error());
$results = mysql_query($query, $link);
?>
4

2 に答える 2

2
$blob = file_get_contents('php://input');

これはうまくいくはずです。これは、PHP の raw 入力ストリームにアクセスします。明らかに、いくつかのケースで動作する可能性が高くなります。

php://inputリクエストボディから生データを読み取ることができます。POST リクエストの場合は$HTTP_RAW_POST_DATA、特別な php.ini ディレクティブに依存しないため好ましいです。さらに、 が$HTTP_RAW_POST_DATAデフォルトで設定されていない場合は、 をアクティブ化する代わりに、メモリの消費量が少なくなる可能性がありますalways_populate_raw_post_data

また、データベースに配置するときに、このデータを適切にエスケープする必要があります。

$query = "INSERT INTO main (pic) VALUES ('" . mysql_real_escape_string($blob) . "')";

(の魔法は、配列$HTTP_RAW_POST_DATAを介してではなく直接参照する場合にのみ機能する可能性もあります。)$GLOBALS

于 2011-03-22T15:20:51.970 に答える
0

プロセス全体を分解してみてください - それがうまくいかない場合は、SQL 挿入に到達する前に物事を取り除き始めてください...

まず、firebug または chrome/safari コンソールを開いて、php ページに渡されるデータをログに記録します。

foreach (getallheaders() as $name => $value) {
    echo "$name: $value\n";
}

コンソールを開いている場合は、コンソールにエコーを記録する必要があります。

于 2011-03-22T15:23:11.440 に答える