fopen в XMLRPC нужно вернуть ошибку не умер - PullRequest
0 голосов
/ 30 декабря 2010

Итак, у меня есть XMLRPC, разработанный на Zend PHP, и я пытаюсь вернуть сообщение об ошибке вместо использования 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;
} 

Наверное, у меня под носом просто пердит мозг ... 1009 *

Решение:

Для процесса 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 ]

1 голос
/ 30 декабря 2010

Нет ничего плохого в том, чтобы использовать return, как вы предполагаете, однако вам нужно убедиться, что вы обрабатываете это поведение в вызывающей функции.

Чтобы определить, было ли успешное открытие, вы можете сравнить возвращаемое значение, встроенное в соответствии с вашим примером, или использовать функцию 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;
}
1 голос
/ 30 декабря 2010
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
...