phnjcmlwdd pgjvzhk pgh0bww pc9odg1spg pc9ib2r5pjwvahrtbd4 datos data php image file-io data-uri

php - pgjvzhk - data url javascript



PHP URI de datos para archivar (3)

Tengo un URI de datos que obtengo de JavaScript y trato de guardarlo a través de php. Utilizo el siguiente código que da un archivo de imagen aparentemente corrupto:

$data = $_POST[''logoImage'']; $uri = substr($data,strpos($data,",")+1); file_put_contents($_POST[''logoFilename''], base64_decode($uri)); data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs 9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxklEQVQYlYWQMW7CUBBE33yITYUUmwbOkBtEcgUlTa7COXIVV5RUkXKC5AxU EdyZVD4kyKxkwIrr9vd0c7Oih aopinLNsF6Qkg2XW4XJ7LGFsAAcTV6lF5/jLdbALA9XDAXYfthFQVx OrmqKYK88/7rbbMFksALieTnzu9wDYTj6f70PKsp2kwAiSvjXNcvkWpAfNZkzWa/5a9yT7fdoX7rrB7hYh2fXo9HdjPYQZu3MIU8bYIlW20y0RUlXG2Kpv/vfwLxhTaSQwWqwhAAAAAElFTkSuQmCC

Debajo del código está la imagen real como un URI de datos. ''logoImage'' es la cadena de arriba, y $ uri es la cadena menos ''image / jpeg; base64''.


El URI de datos que tiene en su ejemplo no es una imagen PNG válida. Esto nunca funcionará y no está relacionado con el código, está relacionado con los datos.

No se aplica, pero podría ser de interés:

file_put_contents($_POST[''logoFilename''], file_get_contents($data));

La idea detrás: PHP puede leer los contenidos de los URI de datos ( data:// ) para que no tenga que decodificarlos por su cuenta.

Tenga en cuenta que el esquema de URI de datos oficiales (ref: el esquema de URL de "datos" RFC 2397 ) no incluye una barra doble (" // ") después de los dos puntos (" : "). PHP admite con o sin las dos barras inclinadas.

# RFC 2397 conform $binary = file_get_contents($uri); # with two slashes $uriPhp = ''data://'' . substr($uri, 5); $binary = file_get_contents($uriPhp);


El código completo que funciona:

$imgData = str_replace('' '',''+'',$_POST[''image'']); $imgData = substr($imgData,strpos($imgData,",")+1); $imgData = base64_decode($imgData); // Path where the image is going to be saved $filePath = $_SERVER[''DOCUMENT_ROOT'']. ''/ima/temp2.png''; // Write $imgData into the image file $file = fopen($filePath, ''w''); fwrite($file, $imgData); fclose($file);


Una mirada rápida al manual de PHP produce lo siguiente:

Si desea guardar datos que se derivan de una función de canvas.toDataURL () de Javascript, debe convertir los espacios en blanco en puntos positivos. Si no lo hace, los datos decodificados están corruptos:

<?php $encodedData = str_replace('' '',''+'',$encodedData); $decodedData = base64_decode($encodedData); ?>