我目前正在编写一个 PHP 类,它接收由 firefox 插件 tamperdata 导出的 XML 文件,并让您在代码中尽可能多地控制它们。这基本上是一个 cURL 包装器,完整的源代码可以在这里找到:https ://github.com/tstrijdhorst/TamperCurl
我的问题是我一辈子都无法将 STDERR 输出到文件中。我在其他代码中使用 cURL 做了很多次,我似乎从来没有遇到任何问题,但现在它根本没有向文件写入任何内容。
这是我初始化它的地方:
if($this->stderrLocation != null)
{
$handle = fopen($this->stderrLocation,'a+');
curl_setopt($this->curlSession, CURLOPT_STDERR, $handle);
curl_setopt($this->curlSession, CURLOPT_VERBOSE, 2); //Verbosity 2 to actually log something to STDERR...
}
实例变量 stderrLocation 由该函数设置(是的,我用调试器检查过,它具有我希望它具有的值):
public function setOptions($options)
{
foreach($options as $option => $value)
{
switch(strtolower($option))
{
case('cookiejarlocation'):
$this->setCookieJarLocation($value);
break;
case('stderr'):
$this->setSTDERR($value);
break;
}
}
}
该值在构造函数中传递,如下所示:
$tamperCurl = new TamperCurl('headers.xml',array('stderr' => '/home/shokora/stderr.txt', 'cookieJarLocation' => $this->cookieLocation));
当我使用调试器查看时,它不会跳过代码,它实际上会进入函数调用。该文件也存在,甚至是 chmod 777 所以写入该文件应该没有问题:
shokora@shokora ~ $ ls -la | grep stderr.txt
-rwxrwxrwx 1 shokora shokora 0 2012-05-04 13:22 stderr.txt
有人知道这里有什么魔法吗?这真的让我很烦,因为我真的需要 STDERR 输出:r