我遇到了从POST请求的响应中保存文件的问题。
我正在使用Google Charts API使用POST请求创建图表。然后我尝试将结果保存为图像。
我按照此处所述的API文档:http://code.google.com/apis/chart/docs/post_requests.html
这是我的代码:
$file = fopen($url, 'r', false, $context);
$file2 = fopen("test.png", 'w');
while (!feof($file)) {
$buffer = fgets($file, 8192);
fwrite($file2, $buffer);
}
fclose($file);
它可以部分保存图像,最多可保存20k左右,保留图像底部未保存。
(编辑)这是工作代码,使用curl:
$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);
答案 0 :(得分:1)
不确定它会有所帮助,但是如果您尝试使用fread
而不是fgets
- 第一个是“二进制安全”,而第二个停在线端则会怎么样...考虑你试图从二进制流中读取,而不是文本文件,可能会改变一些东西吗?
如果它没有改变一个东西,另一个想法是尝试使用file_get_contents
,整体下载文件,而不是必须做某种循环。
如果它仍然不起作用,那么curl
呢?