我注意到 PHP 中的 cURL 在被告知通过 输出到文件时返回不同的数据,CURLOPT_FILE
就像在被告知通过CURLOPT_RETURNTRANSFER
.
_RETURNTRANSFER
似乎去除了换行符和额外的空白,就好像解析它以显示为标准 HTML 代码一样。 _FILE
另一方面,完全按照预期保留文件。
我已经阅读了 php.net 上的文档,但没有找到任何似乎可以解决我的问题的东西。理想情况下,我希望_RETURNTRANSFER
返回确切的内容,这样我就可以消除一个中间文件,但我看不出有任何方法可以做到这一点。
这是我正在使用的代码。有问题的数据是带有 \r\n 行结尾的 CSV 文件。
function update_roster() {
$url = "http://example.com/";
$userID = "xx";
$apikey = "xxx";
$passfields = "userID=$userID&apikey=$apikey";
$file = fopen("roster.csv","w+");
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $passfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $file);
$variable_in_question = curl_exec ($ch);
curl_close ($ch);
fclose($file);
return $variable_in_question;
}
事实证明,错误不在于返回的内容,而在于我解析它的方式。\r\n 没有按照我在单引号中的预期方式进行解析,切换到双引号解决了我的问题。我不知道这会在这样的函数调用中产生影响。
这工作得很好:$cresult = split("\r\n", $cresult);
这不会:$cresult = split('\r\n', $cresult);