2010-12-30 13 views
0

私はZend PHPで開発されたXMLRPCを持っており、die()を使用する代わりにエラーメッセージを返そうとしています。ここでXMLRPCのfopenがエラーを返す必要があります

は私が持っているものです。

$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; 
} 

それはちょうど私が

ソリューション推測脳おなら持つ右の私の鼻の下で、おそらくです:E_WARNINGは/クラッシュプロセスを強制終了しますXMLRPCプロセスについて

を。 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; 
} 

答えて

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 
+0

おかげで、私はそれが私はちょうど私がE_WARNING –

+0

をしようとしていなかった何かを知っていましたより良い解決策はファイルのis_writable()を最初に呼び出すことです。私はちょうどあなたの特定の質問に答えたいと思った。 –

+0

Aを抑制するために@記号を追加する必要も – scoates

1

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; 
} 
関連する問題