在php中隐藏代码错误但仍然执行页面的其余部分

时间:2011-05-26 00:02:52

标签: php exception exception-handling

我希望有人可以帮助我:我有这样的脚本,如果我的服务器上不存在文件,它将转到远程服务器检查文件。如果文件存在,则将其复制到本地服务器,不再检查。因此,Imagick部分仅在我的本地服务器上不存在图像时才有效。

我遇到的问题是如果远程服务器上不存在该文件 - 那么应用程序会出错 - 这是我脚本的代码:

        <?php if (file_exists($filename))
    {
echo '<img src="'.$imageurl1.'" width="'.$g_sites_img1.'" alt="'.$imageurlmeta.'" class="image1" align="left" />';
    }
else { $imageurlfolder = dirname($filename); 
@mkdir($imageurlfolder, 0755, true);
@copy($imgremoteurl, $filename);
$thumb = new Imagick($filename); 
$thumb->scaleImage($g_sites_img1, 0);
$thumb->writeImage($filename);
$thumb->destroy(); }?>

以下是错误代码:

> Fatal error: Uncaught exception
> 'ImagickException' with message
> 'Unable to read the file:
> /home/game1/public_html/images/small///.jpg'
> in
> /home/game1/public_html/includes/standard__1.php:15
> Stack trace: #0
> /home/game1/public_html/includes/standard__1.php(15):
> Imagick->__construct('/home/game1/pub...')
> #1 /home/game1/public_html/includes/news.php(127):
> require('/home/game1/pub...') #2
> /home/game1/public_html/index1.php(126):
> include('/home/game1/pub...') #3
> {main} thrown in
> /home/game1/public_html/includes/standard__1.php
> on line 15

如何避免此错误但仍能正常加载页面?

我试过了error_reporting(0); &lt; ---一旦发生错误,这将阻止页面完全加载。

任何想法都会受到赞赏。

我找到了所有答案的解决方案!万分感谢

<?php if(file_exists($filename))

{echo''; } else {try {$ imageurlfolder = dirname($ filename); @mkdir($ imageurlfolder,0755,true); @copy($ imgremoteurl,$ filename); $ thumb = new Imagick($ filename); $ thumb-&gt; scaleImage($ g_sites_img1,0); $拇指&GT; writeImage($文件名); $拇指&GT;破坏();}      catch(ImagickException $ e){              echo“异常被捕!\ n”;      }      }     ?&GT;

9 个答案:

答案 0 :(得分:5)

好吧,你应该抓住异常,不要试图忽略错误。毕竟,你会遇到致命的错误,这会阻止进一步执行逻辑。

try
{
    // your logic
}
catch ( ImagickException $e )
{
    // do something with it
}

答案 1 :(得分:1)

如果远程服务器上不存在该文件,则可以使用默认本地映像。

答案 2 :(得分:1)

答案 3 :(得分:1)

这是exception,而不是错误。

你需要抓住它然后处理它:

try {
  $thumb = new Imagick($filename); 
  // do your thing with it
  $thumb->destroy();
} catch (ImagickException $e) {
  // something went wrong, handle the problem
}

答案 4 :(得分:1)

是的,您正在寻找的是一个try-catch语句。 Here is what PHP docs have to say about it

答案 5 :(得分:0)

的error_reporting(0);适用于错误,而不是例外:

try {
    // your code
} catch (Exception $e) {
    // code that runs in case an error appears
}

答案 6 :(得分:0)

if (copy($imgremoteurl, $filename)) {
    // image functions
} else {
    // error copying image
}

答案 7 :(得分:0)

将其封装在try块中,您可以处理错误并选择忽略它或您想用它做什么。

答案 8 :(得分:-3)

致命错误只是 - 致命的。脚本已经死了,它不会再进一步​​了,因为其余部分取决于存在的数据。

如果远程服务器上不存在该文件,请添加一些错误处理,您应该没问题。