2010-02-22 5 views
1

J'ai un problème avec l'enregistrement d'un fichier à partir d'une réponse à une requête POST. J'utilise l'API Google Charts pour créer un graphique à l'aide d'une requête POST. J'essaie alors de sauvegarder le résultat sous forme d'image.PHP: Sauvegarde de la réponse POST à ​​un fichier

Je suis la documentation de l'API comme décrit ici: http://code.google.com/apis/chart/docs/post_requests.html

Voici mon code:

$file = fopen($url, 'r', false, $context); 
$file2 = fopen("test.png", 'w'); 

while (!feof($file)) { 
    $buffer = fgets($file, 8192); 
    fwrite($file2, $buffer); 
} 
fclose($file); 

Il enregistre l'image partiellement, jusqu'à 20k ou si, en laissant la partie inférieure de l'image non sauvegardé.

(modifier) ​​Voici le code de travail, en utilisant boucle:

$handle = curl_init($url); 
curl_setopt($handle, CURLOPT_POST, true); 
curl_setopt($handle, CURLOPT_FILE, $file); 
curl_setopt($handle,CURLOPT_POST,count($request)); 
curl_setopt($handle, CURLOPT_POSTFIELDS, $request_string); 
$data = curl_exec($handle); 

Répondre

1

Pas sûr que ça va aider, mais si vous essayez d'utiliser fread, au lieu de fgets - le premier étant « sûr binaire » , tandis que le second s'arrête à la fin de la ligne ... Considérant que vous essayez de lire à partir d'un flux binaire, et non d'un fichier texte, peut-être que cela peut changer quelque chose?

Si ça ne change rien, une autre idée serait d'essayer d'utiliser file_get_contents, pour télécharger le fichier dans son ensemble, au lieu d'avoir à faire une sorte de boucle.

Et si cela ne fonctionne toujours pas, qu'en est-il curl?

+0

L'utilisation de fread au lieu de fgets donne le même résultat: seulement la moitié du fichier est enregistrée. – Goro

+0

curl a bien fonctionné :) – Goro

+0

étrange, à propos de 'fread' /' fgets'; mais sympa cette curl travaillé :-) –

Questions connexes