Salut,

Je bloque sur une feature que je suis en train de faire de récupération d'un canvas dessinable (fait avec raphael JS) ,

j'envoi les datas de la façon suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 var dataURL = document.getElementById('renderCanvas').toDataURL("image/png");
           dataURL = dataURL.replace('data:image/png;base64,','');
             $.ajax(
                {
                    url  : 'ajax/export-image.php',
                    data :  {image:dataURL},
                    type : 'post',
                    dataType :'json',
                    success: function (j)
                    {
                    }
                }
avec mes outils de debug, je vois bien les datas passé lors de la requete XHR

Code : Sélectionner tout - Visualiser dans une fenêtre à part
image=iVBORw0KGgoAAAA...
le soucis c est que coté PHP , je recois $_POST['image'] vide.. pourtant mon php.ini limite les données post à 700M

autant vous dire que je suis bien en dessous avec mon image de 400*600..

sur ce serveur, aucun soucis pour d autres types de variables post, mais la ca coince, si je modifie les données postés pour rajouter, par exemple test=1, je le récupère bien coté PHP, mais PAS mon image.

du coup , je me suis tourné vers file_get_contents('php://input');, la je récupere bien mon buffer d image, mais en l ecrivant dans un fichier, apres plusieurs test, d abord un base64_decode puis fwrite ou imagefromstring ou file_puts_contents , j'ai toujours un PNG invalide d écrit (impossible de le lire dans photoshop ou l apercu de l OS)

pourtant à regarder le fichier dans un editeur, l entete a l air (a peu près) correcte :

je ne sais plus trop ou regarder..

code PHP ecrivant l image

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
$data = $_POST['image'];
$img = $data;
$data = base64_decode($img);
$rand_name = $userId.'_'.rand(10000,999999).'.png';
$fp = fopen('medias/player_painting/'.$rand_name,'wb');
fwrite($fp,$data);
fclose($fp);

une suggestion ?