57 votes

PHP Data-URI à déposer

J'ai un URI de données que je reçois de javascript et essayant de sauvegarder via php. J'utilise le code suivant qui donne un fichier image apparemment corrompu:

   $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
 

Sous le code se trouve l'image réelle sous forme de Data-URI. 'logoImage' est la chaîne ci-dessus et $ uri est la chaîne moins 'image / jpeg; base64,'.

84voto

Paul S. Points 914

Un rapide coup d'œil au manuel PHP donne ce qui suit:

Si vous souhaitez enregistrer des données dérivées d'une fonction Javascript canvas.toDataURL (), vous devez convertir les blancs en éléments supplémentaires. Si vous ne le faites pas, les données décodées sont corrompues:

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

53voto

hakre Points 102271

Les données URI que vous avez dans votre exemple n'est pas valide image PNG. Cela ne marchera jamais et est sans rapport avec le code, c'est lié aux données.


Ne s'applique pas, mais peut-être d'intérêt:

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

L'idée derrière: PHP lui-même peut lire le contenu des données Uri (data://) de sorte que vous n'avez pas besoin de décoder sur votre propre.

Notez que les données officielles de schéma d'URI ne comprend pas une double barre oblique après les deux points, mais PHP a besoin de ces.

 $uriPhp = 'data://' . substr($uri, 5);
 $binary = file_get_contents($uriPhp);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X