2012-05-15 14 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を返します。

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

、あなたは今まであなたがこのコードを呼び出しているtry {} catch {}ブロックの周りにこれをラップすることができます。名前の変更が失敗したとき、あなたが本当にあなたがこれを行うことができ、スローされる例外が必要な場合はhttp://php.net/manual/en/function.rename.php

を参照してください。

+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以降では、メソッド名として予約されたキーワード。

関連する問題