在XMLRPC中fopen需要返回错误而不是死

时间:2010-12-30 19:27:40

标签: php logic fopen

所以我有一个在Zend PHP中开发的XMLRPC,我试图返回错误消息而不是使用die()。

这就是我所拥有的:

$this->fh = fopen($this->log_file, 'a') 
    or die("Can't open log file: ".$this->log_file);

这样的事情可能吗? (伪代码)

if($this->fh = fopen($this->log_file, 'a')) {
    return "Can't open log file: ".$this->log_file;
} 

我猜可能正好在我的鼻子下面有一个脑屁

解决方案:

对于XMLRPC进程,E_WARNING将终止/崩溃进程。拥有XMLRPC 响应警告消息使用函数前面的@符号来抑制 警告。 http://php.net/manual/en/function.fopen.php#错误/例外

// If the open fails, 
// an error of level E_WARNING is generated. 
// You may use @ to suppress this warning.
if(!($this->fh = @fopen($this->log_file, 'a'))) {
    return "Can't open log file: ".$this->log_file;
}

2 个答案:

答案 0 :(得分:1)

if(!($this->fh = fopen($this->log_file, 'a'))) {
    return "Can't open log file: ".$this->log_file;
}
// if you get here, $this->fh contains a file handle

答案 1 :(得分:1)

在推测时使用return没有任何问题,但是你需要确保在调用函数中处理这种行为。

要确定fopen是否成功,您可以根据示例比较内联的返回值,也可以使用文件句柄上的is_resource函数。

fopen返回:

if($this->fh = fopen($this->log_file, 'a')) {
    // Everything is fine.

}
else {
    // Error condition...
    return "Can't open log file: ".$this->log_file;
}

is_resource

$this->fh = fopen($this->log_file, 'a');
if(is_resource($this->fh)) {
    // Everything is fine...

}
else {
    // Error condition...
    return "Can't open log file: ".$this->log_file;
}