Скрыть ошибки кода в php, но все равно выполнить остальную часть страницы - PullRequest
2 голосов
/ 26 мая 2011

Я надеюсь, что кто-то может мне помочь: у меня есть эти сценарии, что если файл не существует на моем сервере, он отправляется на удаленный сервер, чтобы проверить файл. Если файл существует, он копирует его на мой локальный сервер и больше не проверяет. Так что часть 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); <--- Это останавливает полную загрузку страницы после возникновения ошибки. </p>

Любые идеи будут оценены.

Я нашел решение со всеми опубликованными ответами! спасибо миллион

<?php if(file_exists($filename))

{эхо ''; } else {try {$ imageurlfolder = dirname ($ filename); @mkdir ($ imageurlfolder, 0755, true); @copy ($ imgremoteurl, $ filename); $ thumb = new Imagick ($ filename); $ thumb-> scaleImage ($ g_sites_img1, 0); $ Thumb-> writeImage ($ файла); $ Thumb-> уничтожить ();} catch (ImagickException $ e) { echo "Исключение поймано! \ n"; } } ?>

Ответы [ 9 ]

5 голосов
/ 26 мая 2011

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

try
{
    // your logic
}
catch ( ImagickException $e )
{
    // do something with it
}
1 голос
/ 26 мая 2011

Да, то, что вы ищете, называется оператором try-catch. Вот что PHP-документы должны сказать по этому поводу

1 голос
/ 26 мая 2011

Это исключение , а не ошибка.

Вам нужно поймать его, а затем обработать:

try {
  $thumb = new Imagick($filename); 
  // do your thing with it
  $thumb->destroy();
} catch (ImagickException $e) {
  // something went wrong, handle the problem
}
1 голос
/ 26 мая 2011

использовать блок захвата

http://php.net/manual/en/internals2.opcodes.catch.php

1 голос
/ 26 мая 2011

Вы можете использовать локальное изображение по умолчанию, если файл не существует на удаленном сервере.

0 голосов
/ 26 мая 2011

Заключите его в блок try, и вы можете обработать ошибку и выбрать ее игнорирование или все, что вы хотите с ней сделать.

0 голосов
/ 26 мая 2011
if (copy($imgremoteurl, $filename)) {
    // image functions
} else {
    // error copying image
}
0 голосов
/ 26 мая 2011

error_reporting (0); работает на ошибки, а не исключения:

try {
    // your code
} catch (Exception $e) {
    // code that runs in case an error appears
}
0 голосов
/ 26 мая 2011

Фатальные ошибки - это просто ФАТАЛЬНО. Сценарий умер, и он не пойдет дальше, потому что все остальное зависит от наличия этих данных.

Добавьте некоторую обработку ошибок в случае, если файл не существует на удаленном сервере, и вы должны быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...