2011-05-26 6 views
2

誰かが助けてくれることを願っています。私のサーバーにファイルが存在しない場合は、ファイル。ファイルが存在する場合は、それを自分のローカルサーバーにコピーし、再度チェックしません。 Imagickの部分は、イメージがローカルサーバーに存在しない場合にのみ機能します。PHPのコードエラーを隠しても残りのページを実行する

私が持っている問題は、ファイルがリモートサーバー上に存在しない場合ということである - そして、アプリケーションがエラーをスルー - ここに私のスクリプトのコードは次のとおりです。

 <?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)を試しました。 < ---エラーが発生すると、ページのロードが完全に停止します。

すべてのアイデアをいただければ幸いです。

すべての回答が掲載されたソリューションが見つかりました。おかげさま百万円

<?php if(file_exists($filename)) 

{echo ''; } else {try {$ imageurlfolder = dirname($ filename); @mkdir($ imageurlfolder、0755、true); @copy($ imgremoteurl、$ filename); $ thumb =新しいImagick($ filename); $ thumb-> scaleImage($ g_sites_img1、0); $ thumb-> writeImage($ filename); $ thumb-> destroy();} catch(ImagickException $ e){ echo "Exception caught!\ n"; } } ?>

答えて

5

まあ、例外をキャッチして、エラーを無視しないでください。結局のところ、致命的なエラーが発生して、それ以上のロジックが実行されないようになります。

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

ありがとうDavid - あなたの助けを借りて見つけました! –

+2

EとCの間に 'x'がありません – celwell

+0

ニースのキャッチ@celwellは、大いに義務付けられています。 –

-3

致命的なエラーはちょうどそれです - 致命的です。スクリプトは死んでしまった。それ以外の部分はそのデータが存在することに依存するため、スクリプトはそれ以上には進まないだろう。

ファイルがリモートサーバー上に存在しない場合は、エラー処理を追加して、OKにしてください。

+0

神聖なdownvotes、バットマン!なぜあなたは私の答えに同意しないのかを説明するケア? – drudge

+0

試してキャッチしてくれましたか? –

+0

これは誤解を招くような回答です。この文脈では、エラーと例外は2つの異なるものです。 – Claudiu

0

error_reporting(0);エラーの作品ではなく、例外:

try { 
    // your code 
} catch (Exception $e) { 
    // code that runs in case an error appears 
} 
0
if (copy($imgremoteurl, $filename)) { 
    // image functions 
} else { 
    // error copying image 
} 
0

tryブロックでそれを囲み、あなたはエラーを処理し、それを無視するか、あなたはそれでやりたいものは何でもするように選択することができます。

1

ファイルがリモートサーバーに存在しない場合は、デフォルトのローカルイメージを使用できます。

+0

良いアイデアのアイデア - 私はまだ持っていない別の問題に実際に答える! –

1

catchブロックを使用します。

あなたはそれをキャッチし、それを処理する必要があります。

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