1

モバイルデバイスからサーバーに写真をアップロードしようとしています。PhoneGap (Javascript) で構築しているため、サーバーに送信するために文字列に変換しています。受け取った後、読み取り可能な画像ファイルに戻すのに問題があります。簡単に言えば、送られてきた文字列とファイル名を取得し、デコードして .png に変換し、円形の画像にトリミングする必要があります。

これは私が現在行っていることです

if (isset($_POST['file'])) 
{
    //Result variable
    $result = false;

    $pic = base64_decode($_POST['file']);
    $filename = $_POST['filename'];

    if (strlen($pic) > 9 )
    {
        $fh = fopen("/var/www/pics/events/".$filename, 'w') or die("can't open file");
        fwrite($fh, $pic);
        fclose($fh);
    }
}

ここで何が間違っていて、画像ファイルとして正しく保存されないのかを理解できれば、残りのコードを機能させることができると思いますか? ファイルは正しくアップロードされますが、拡張子なしで保存され、ブラウザでポイントすると、画像ファイルのように表示されますが、画像は表示されません。色付きの形をした小さな壊れた絵のアイコンは、その場所に移動したときに表示されるものです。

このプロセス中に送信されている画像の種類を認識する必要はありますか? それが .gif、.jpg/jpeg、.png などであるかどうかはどうやってわかりますか?

助けてくれてありがとう!

ネイサン

4

1 に答える 1

1

セキュリティ上の理由から、ディレクトリ トラバーサルを防ぐためにファイル名をサニタイズする必要があります。

明るいメモとして、ファイルが適切な拡張子で保存されていることを確認してください。正しい拡張子で既に保存している場合は、アプリからのエンコードの問題が発生する可能性があります。

上記のいずれの可能性も当てはまらない場合は、String Size が php.ini の最大 POST サイズ制限を超えていないことを確認してください。その場合は、サイズ制限を増やしてください。

于 2012-10-20T02:14:21.243 に答える