6

私はphpアプリケーションを使用していますが、ファイルを移動する行があります。メソッドをtry...catchブロックで囲んだので、エラーがスローされた場合に、ロールバックシステムを管理できます。しかし、例外がキャッチされることはないので、renamesは何らかの例外をスローしますか?別の方法で試す必要がありますか?

ありがとう

上記のコード:

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

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

4 に答える 4

8

「通常の」PHP関数は例外をスローしません。

例外をシミュレートするようにコードを変更します。

try{
   if(rename($archivo_salida, $ruta_archivos)){
      //anything;
   } else {
      throw new Exception('Can not rename file'.$archivo_salida);
   }
}catch (Exception $e)
   //do something
}
于 2012-05-15T19:23:05.833 に答える
3

rename()true/falseのみを返します-スローされた例外はありません。

http://php.net/manual/en/function.rename.php

于 2012-05-15T19:20:49.310 に答える
2

失敗すると戻りますFALSEhttp://php.net/manual/en/function.rename.phpを参照してください

名前の変更が失敗したときに例外をスローする必要がある場合は、次のように実行できます。

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

try {} catch {}これで、このコードを呼び出す場所でブロックをラップすることができます。

于 2012-05-15T19:20:57.850 に答える
0

この回答で説明されているのと同じアプローチを使用することもできます:https ://stackoverflow.com/a/43364340/563049

カスタム例外クラスを作成し、その静的コンストラクターメソッドを。のor後に演算子を付けて使用しrename()ます。

例外クラス:

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以降を使用している場合は、静的メソッドの名前doThrow()を単純throw()に変更できます。PHP7以降では、メソッド名として予約済みキーワードを使用できるためです。

于 2017-04-12T08:46:52.687 に答える