获取特定功能的错误

时间:2016-05-06 08:24:53

标签: php error-handling try-catch

我正在使用odtphp library创建自定义.odt文件。

在此库中,有一个将.odt保存在磁盘上的功能

public function saveToDisk($file = null)
{
    if ($file !== null && is_string($file)) {
     if (file_exists($file) && !(is_file($file) && is_writable($file))) {
         throw new OdfException('Permission denied : can\'t create ' . $file);
     }
        $this->_save();
        copy($this->tmpfile, $file);     
    } else {
        $this->_save();
    }
}

它工作得很完美,但我无法弄清楚如何获取错误消息(例如当文档已被其他人打开时)

我正在尝试这个

try
{
    $odf->saveToDisk('test.odt');
}
catch(OdfException $e )
{
    echo $e->getMessage();
}

但它给了我整个PHP错误(橙色背景)而不是Permission denied

修改

这是我得到的PHP错误(橙色背景)

<br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding
='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f
; font-size: x-large;'>( ! )</span> Warning: copy(Test.odt): failed to open stream: Permission denied in
 Path\To\odtphp-master\library\Odf.php on line <i>259</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align
='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left'
 bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0012</td><td bgcolor
='#eeeeec' align='right'>262008</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='Path\To\test.php' bgcolor='#eeeeec'>..\test.php<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.1992</td><td bgcolor
='#eeeeec' align='right'>1872248</td><td bgcolor='#eeeeec'>Odf->saveToDisk(  )</td><td title='Path\To\test.php' bgcolor='#eeeeec'>..\test.php<b>:</b>75</td><
/tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.2434</td><td bgcolor
='#eeeeec' align='right'>2109632</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.copy'
 target='_new'>copy</a>
(  )</td><td title='Path\To\odtphp-master\library\Odf.php' bgcolor='#eeeeec'>..\Odf.php
<b>:</b>259</td></tr>
</table></font>

1 个答案:

答案 0 :(得分:0)

没有异常或错误,您会收到copy()函数的警告。这可能发生,当您无权访问$this->tmpfile或(在您检查了覆盖现有常规文件$file的权限之后),该文件不存在且您没有“得到了创建它的许可。

您可以修改条件

if( file_exists($file) && !(is_file($file) && is_writable($file))
    || ( !file_exists($file) && !is_writable(dirname($file)) ) )

我认为$ this-&gt; tmpfile的存在已经在班级的其他地方得到了保证。(?)