ホームページ  >  記事  >  バックエンド開発  >  ファイルのコピー移動 - PHP

ファイルのコピー移動 - PHP

WBOY
WBOYオリジナル
2016-07-25 09:09:12937ブラウズ
elFinder を模倣して主要なメンバー メソッドを抽出する簡単な例
実装された関数は次のとおりです。
複数のファイルのコピーまたは移動操作を実装する

注: テストを容易にするために、一部の判定は簡略化されています。そして、それはプログラムファイルが配置されているディレクトリにあります
宛先フォルダーとして新しいテストフォルダーを作成します。実際に使用する場合には改造が必要となります。
  1. ?/**
  2. * コピー/移動操作の簡単な例: >PHP5
  3. *
  4. */
  5. /**
  6. * ファイルが存在するかどうかを確認します
  7. *
  8. */
  9. function _isFind($filename) {
  10. return @file_exists($filename);
  11. }
  12. /* *
  13. * フォルダーが存在するかどうかを判断しますか? 単純な処理: ルート ディレクトリを判断するだけです
  14. *
  15. */
  16. function _isFindDir($dir) {
  17. $ls = scandir(dirname(__FILE__));
  18. foreach ($ls as $val) {
  19. if ($val == $dir) return TRUE;
  20. }
  21. return FALSE;
  22. }
  23. /**
  24. * コピーまたは移動
  25. *
  26. * @param array ソースフォルダー配列: 単純な処理: ファイル名を要素の値として使用します
  27. * @param string 宛先フォルダー
  28. * @param string オペランド: move - move - copy
  29. * @return bool
  30. */
  31. function _copy_move($src = array(), $dst = '', $op = 'move') {
  32. if ( ! is_array($src) )) {
  33. $src = array($src);
  34. }
  35. //ソースファイルが存在するかどうかを判定します?
  36. foreach ($src as $val) {
  37. if ( _isFind($val) === FALSE) {
  38. return _log('Src file not find', $val);
  39. }
  40. }
  41. //宛先フォルダーが存在するかどうかを判断し、存在しない場合は生成します
  42. //簡単な処理: 実際のアプリケーションを変更する必要があります
  43. if (_isFindDir($ dst) === FALSE) {
  44. @mkdir($dst);
  45. }
  46. //移動またはコピー操作を実行します
  47. foreach ($src as $val) {
  48. $_dst = $dst .'/'.basename( $val);
  49. //宛先ファイルが存在するかどうかを判断します? 存在する場合、操作は許可されません
  50. if (_isFind($_dst) === TRUE) {
  51. return _log('Dst fileは存在します', $dst);
  52. } else if (strpos($dst, $val) === 0) {
  53. return _log('それ自体にコピー/移動できません');
  54. }
  55. if (strto lower( $op) === 'move') {
  56. if ( ! rename($val, $_dst)) {
  57. return _log('ファイルを移動できません', $val);
  58. }
  59. } else if (strto lower($ op) === 'copy') {
  60. if ( ! _copy($val, $_dst)) {
  61. return _log('ファイルをコピーできません', $val);
  62. }
  63. }
  64. }
  65. return '成功! ';
  66. }
  67. /**
  68. * コピー操作
  69. *
  70. */
  71. function _copy($src, $dst) {
  72. if ( ! is_dir($src)) {
  73. if ( ! copy($src, $dst)) {
  74. return _log('ファイルをコピーできません' , $src);
  75. }
  76. } else {
  77. mkdir($dst);
  78. $ls = scandir($src);
  79. for ($i = 0; $i < ; count($ls); $i++) {
  80. if ($ls[$i] == '.' OR $ls[$i] == '..') 続行;
  81. $_src = $src.' /'.$ls[$i];
  82. $_dst = $dst.'/'.$ls[$i];
  83. if ( is_dir($_src)) {
  84. if ( ! _copy($_src, $_dst) )) {
  85. return _log('ファイルをコピーできません', $_src);
  86. }
  87. } else {
  88. if ( ! copy($_src, $_dst)) {
  89. return _log('ファイルをコピーできません', $ _src);
  90. }
  91. }
  92. }
  93. }
  94. return TRUE;
  95. }
  96. /**
  97. * ロギング
  98. *
  99. */
  100. function _log($msg, $arg = '') {
  101. if ($arg != '' ) {
  102. $msg = "date[" .date('Y-m-d H:i:s')."]tmsg[".$msg."]targ[".$arg."]n";
  103. } else {
  104. $msg = "date[".date ('Y-m-d H:i:s')."]tmsg[".$msg."]n";
  105. }
  106. echo $msg;
  107. return @file_put_contents('copy. log', $msg, FILE_APPEND);
  108. }
  109. /**
  110. * 例
  111. * 1. $src の配列パラメーターを変更する必要があります。 2. _copy_move の 3 番目のパラメーターを変更して、それぞれ移動/コピー操作をテストできます
  112. *
  113. */
  114. $src = array('img', 'min', 'phpinfo.php');
  115. $dst = 'test';
  116. var_dump(_copy_move($src, $dst , 'copy'));
  117. /*php の終わり*/
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。