2008-09-19 54 views
1

我已經注意到,當通過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);

回答

1

事實證明,錯誤的是不返回什麼,但在路上我會有關分析它。 \ r \ n沒有按照我預期的方式放入單引號時解析,切換到雙引號可以解決我的問題。我沒有意識到這在這樣的函數調用中發揮了作用。

這只是正常:$cresult = split("\r\n", $cresult);

這不:$cresult = split('\r\n', $cresult);

+0

是的。 PHP用雙引號解釋字符串的方式不同,除了正確處理特殊字符(\ r,\ n,\ t)外,還進行了字符串內插。 – 2008-09-20 14:03:28

0

我沒有嘗試重現該「錯誤」(我認爲我們可以認爲這是一個錯誤,如果它是實際行爲),但也許你可以克服它。

PHP Doc說默認的comportement是將結果寫入文件,並且默認文件是STDOUT(瀏覽器的窗口)。你想要得到的結果要比文件中的變量要多。

你可以使用ob_start();ob_get_clean();

$ch = curl_init(...); 
// ... 
ob_start(); 
curl_exec($ch); 
$yourResult = ob_get_clean(); 
curl_close($ch); 

我知道那不是乾淨的方法(如果有的話),但至少它可以正常工作。

(請原諒我,如果我的英文不是很好; - )...)

1

在大多數腳本langage(它也是猛砸例如真),簡單的報價被用來表示事物都寫,而雙引號是「分析」(我不認爲這是適當的詞,但我找不到更好)。

$str = 'foo'; 
echo '$str'; // print 「$str」 to the screen 
echo "$str"; // print 「foo」 to the screen 

這對變量和轉義字符是正確的。