2012-05-15 67 views
5

我正在使用php應用程序,並且有一行移動文件。我在try ... catch塊中包含了這個方法,所以如果發生錯誤,可以管理一個回滾系統。但是這個例外永遠不會被捕獲,所以,重命名會引發任何類型的異常?我需要嘗試另一種方法嗎?PHP rename()不會在錯誤時拋出異常

由於上述

代碼:

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

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

回答

6

「正常」的PHP函數不會拋出異常。

更改您的代碼來模擬一個例外:

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

我的不好。謝謝! – Cheluis

+0

可能有一個自動錯誤異常變壓器:http://stackoverflow.com/a/10919969/22470 – powtac

2

它返回FALSE失敗。見http://php.net/manual/en/function.rename.php

如果你真的需要一個異常時,重命名失敗被拋出,你可以這樣做:

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

現在,你可以在任何你正在調用該代碼周圍try {} catch {}塊這個包起來。

+0

謝謝!同樣的答案,但謝謝 – Cheluis

0

您也可以使用同樣的方法,因爲在這個答案說明:https://stackoverflow.com/a/43364340/563049

創建一個自定義異常類,並使用它的靜態構造函數法or運營商rename()後。

Exception類:

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

用法:

try { 

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

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

注意

如果您使用的是PHP 7和更高 - 你可以簡單地throw()重命名靜態方法doThrow() ,因爲在PHP 7及更高版本中允許使用保留關鍵字作爲方法名稱。