2012-05-15 14 views
5

Pracuję z aplikacją php i istnieje linia, która przenosi plik. Zamknąłem metodę w bloku try ... catch, więc jeśli zostanie zgłoszony błąd, można zarządzać systemem wycofywania. Ale wyjątek nigdy nie jest przechwytywany, więc nazwy zmieniają się w wyjątki? Czy muszę wypróbować inną metodę?Zmiana nazwy PHP() nie generuje wyjątku w przypadku błędu

Dzięki

Kod powyżej:

try{ 
    if(rename($archivo_salida, $ruta_archivos)){ 
    //anything; 
    } 

}catch (Exception $e) 
    //do something 
} 

Odpowiedz

6

"Normalne" funkcje PHP nie powodują wyjątków.

Zmień swój kod do symulacji wyjątek:

try{ 
    if(rename($archivo_salida, $ruta_archivos)){ 
     //anything; 
    } else { 
     throw new Exception('Can not rename file'.$archivo_salida); 
    } 
}catch (Exception $e) 
    //do something 
} 
+0

moje złe. dzięki! – Cheluis

+0

Może istnieć automatyczny transformator błędu do wyjątku: http://stackoverflow.com/a/10919969/22470 – powtac

2

Zwraca FALSE na niepowodzenie. Zobacz http://php.net/manual/en/function.rename.php

Jeśli naprawdę potrzebują wyjątek zostać wyrzucony, gdy zmiana nazwy nie powiedzie się, można to zrobić:

if (rename($archivo_salida, $ruta_archivos)) { 
    // anything; 
} else { 
    throw new Exception("Rename failed."); 
} 

Teraz można owinąć to wokół try {} catch {} bloku gdziekolwiek jesteś wywoływania tego kodu.

+0

dziękuję! tak samo jak odpowiedź, ale dzięki – Cheluis

0

Można również użyć tego samego podejścia, jak to opisano w tej odpowiedzi: https://stackoverflow.com/a/43364340/563049

Tworzenie niestandardowej klasy wyjątek i wykorzystać to metoda statyczna konstruktor z or operator po rename().

klasa

Wyjątek:

class CustomException extends Exception { 
    static public function doThrow($message = "", $code = 0, Exception $previous = null) { 
    throw new Exception($message, $code, $previous); 
    } 
} 

Zastosowanie:

try { 

    rename($archivo_salida, $ruta_archivos) or CustomException::doThrow('Renaming failed.'); 

} catch (Exception $e){ 
    //do something 
} 

Uwaga

Jeśli używasz PHP 7 i wyżej - można zmienić nazwę metody statycznej doThrow() po prostu throw() , ponieważ w PHP 7 i wyższych jest dozwolony zastrzeżone słowa kluczowe jako nazwy metod.

Powiązane problemy