我已經注意到,當通過CURLOPT_FILE
告訴輸出到文件時,PHP中的cURL返回不同的數據,就像通過CURLOPT_RETURNTRANSFER
告訴將輸出發送到字符串時一樣。PHP中的cURL返回_FILE和_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);
是的。 PHP用雙引號解釋字符串的方式不同,除了正確處理特殊字符(\ r,\ n,\ t)外,還進行了字符串內插。 – 2008-09-20 14:03:28