Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: try catch copy
Форумы портала PHP.SU » » Объектно-ориентированное программирование » try catch copy

Страниц (1): [1]
 

1. Telnet - 28 Сентября, 2013 - 18:11:10 - перейти к сообщению
Качаю картинки с сервера таким вот образом
PHP:
скопировать код в буфер обмена
  1.  
  2.         if(!empty($arr[1])){
  3.                 try {
  4.                         copy( trim($arr[1]), $_SERVER['DOCUMENT_ROOT'].'/images/products/'.$arr[0].'/h_'.count($lines).'.'.substr(strrchr(trim($arr[1]), '.'), 1));
  5.                 } catch(Exception $ex) {
  6.                         $log->logWrite('Ошибка строка '.$line_num.' Файл '.$arr[1].' не может быть скачана\n '.$ex->getMessage);
  7.                 }
  8.         }
  9.  

Все нормально работает пока не происходит такая ошибка
Warning: copy(http://site.ru/img/gallery/PID.jpeg) [function.copy]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in/var/www/x/data/www/x/componen ts/com_db1c/views/group/tmpl/imp ort_img.php on line 55
Я уже прилипил туда типа обработку ошибок try catch но ошибка все равно генерируется и выводится в браузер не ужели без @copy ни как нельзя убить вывод ошибки, и по возможности залогировать ее
2. LShark - 28 Сентября, 2013 - 18:26:00 - перейти к сообщению
1. Вы бы хоть указали. где именно находится строка 55, в которой возникает ошибка (если она в листинге), хотя, предположить можно.
2. А сначала (перед копированием) проверить наличие ОРИГИНАЛА картинки через file_exists() что запрещает?
3. Telnet - 28 Сентября, 2013 - 18:31:36 - перейти к сообщению
подсказали сделать так
PHP:
скопировать код в буфер обмена
  1. if(!empty($arr[1])){
  2.         try {
  3.      
  4.  $f = @copy( trim($arr[1]), $_SERVER['DOCUMENT_ROOT'].'/images/products/'.$arr[0].'/h_'.count($lines).'.'.substr(strrchr(trim($arr[1]), '.'), 1));
  5.  
  6. if(!$f){
  7.   throw new Exception('Error download');
  8. }
  9.        
  10.         } catch(Exception $ex) {
  11.             $log->logWrite('Ошибка строка '.$line_num.' Файл '.$arr[1].' не может быть скачана\n '.$ex->getMessage);
  12.         }
  13.     }
4. esterio - 28 Сентября, 2013 - 18:42:16 - перейти к сообщению
и ето ничего не дало, так как try..cache орабативают исключения. а функция copy не генерирует исключения. она генерирует ошибку. и вместо того чтобы ее обработать вы ее подавили символом @
5. Ch_chov - 28 Сентября, 2013 - 19:05:07 - перейти к сообщению
Ошибки при копировании файла обычно относятся не к приложению, а к окружению. Пытаться предотвратить ошибку в php скрипте не всегда рационально. Слишком много вариантов, котрые нужно проверить:
По этому в общем случае достаточно просто знать сам факт неудачного копирования. Чтобы ошибка окружения не привела к ошибке приложения.
PHP:
скопировать код в буфер обмена
  1. if (!@copy()) {
  2.   // Do something here.
  3. }

 

Powered by ExBB FM 1.0 RC1