2008-09-19 19 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 

这对变量和转义字符是正确的。