0

タグ$_POST['nimage']の src 値として直接エコーする場合、 $_POST フィールドに base64 でエンコードされた文字列があります。ブラウザで画像が正常に表示されます。imgecho "<img src='".$_POST['nimage']."'>";

base64_decode文字列をサーバー上のローカルのファイルに書き込むと、作成されたファイルをブラウザーで表示しようとするとエラーが発生するため、明らかに手順がありません。

「画像 'xxxx://myserversomewhere.com/images/img1.jpg' はエラーが含まれているため表示できません」

私のデコードとファイルの書き込みは次のとおりです。

$file = base64_decode($_POST['nimage']);
file_put_contents('images/'. $_POST['imgname'], $file);

その結果images/img1.jpg、ローカルサーバーになります。ここでのデコードで何が間違っていますか? base64 出力は URL エンコードされていないように見えますが、base64_decode() の前に最初に urldecode() を試してみましたが、安全な方法で同じ結果が得られました。

base64 エンコードの最初の数行は次のとおりです。

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAF4AqsDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2gJt+XPJPUGv2A/NB2044oAdtY9M8ccCgB6r8+0jtSYDxEW4xz2qQFCnGOPQ0AAQDJIz9KAF8rI6/hQA9Y+SBgjHIqWA5Yxz2xUsBwUdAMdzSAcFGAB0NADgCVK/KB/OgB6BNzc49agse2OgX2BFZvcCRUO7g

4

1 に答える 1

0

デコードしているデータには、データ URI ヘッダーが添付されています。

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...

ヘッダーは、ファイルの種類とエンコードを識別するためにブラウザーによって使用されますが、エンコードされたデータの一部ではありません。

データからヘッダー ( data:image/jpeg;base64,) を取り除き、ファイルに書き込む前に残りを base64 でデコードします。

$b64 = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...';
$dat = explode(',' $b64);

// element 1 of array from explode() contains B64-encoded data
if (($fileData = base64_decode($dat[1])) === false) { 
   exit('Base64 decoding error.');
}
file_put_contents($someFileName, $fileData);

base64_decode()注意: forへの呼び出しの戻り値を確認し、false何らかのメッセージで中止してください。デコード プロセスの問題をトラップします (ヘッダーを削除しないなど)。

于 2015-06-08T03:25:33.553 に答える