首頁 > 後端開發 > php教程 > php實作的檔案目錄操作類

php實作的檔案目錄操作類

WBOY
發布: 2016-07-25 08:56:08
原創
784 人瀏覽過
  1. /**
  2. * 檔案目錄操作類別
  3. * 編輯:bbs.it-home.org
  4. * 範例:
  5. * $fileutil = new fileDirUtil();
  6. * $fileutil->createDir(' a/1/2/3'); 測試建立資料夾建立一個a/1/2/3資料夾
  7. * $fileutil->createFile('b/1/2/3'); 測試建立檔案在b/1/2/資料夾下方建造一個3檔
  8. * $fileutil->createFile('b/1/2/3.txt'); 測試建立檔案在b/1/2/資料夾下方建一個3.exe檔
  9. * $fileutil->writeFile('b/1/2/3.txt','this is something i write!'); 在文件中寫內容
  10. * $arr = $ fileutil->readFile2array('example/mysql.txt');
  11. * $arr = $fileutil->readsFile('example/mysql.txt');
  12. * $size=$fileutil->bitSize($ fileutil->getDirSize("example")); 取得檔案或目錄的大小
  13. * $fileutil->copyDir('b','d/e'); 測試複製資料夾建立d/e資料夾,把b資料夾下的內容複製進去
  14. * $fileutil->copyFile('b/1/2/3.exe','b/b/3.exe'); 測試複製檔案建立一個b/b資料夾,並把b/1/2資料夾中的3.exe檔複製進去
  15. * $fileutil->moveDir('a/','b/c'); 測試移動資料夾建立一個b/ c資料夾,並把a資料夾下的內容移動進去,並刪除a資料夾
  16. * $fileutil->moveFile('b/1/2/3.exe','b/d/3.exe '); 測試移動檔案建立一個b/d資料夾,並把b/1/2中的3.exe移動進去
  17. * $fileutil->unlinkFile('b/d/3.exe'); 測試刪除檔案刪除b/d/3.exe檔
  18. * $fileutil->unlinkDir('d');測試刪除資料夾刪除d資料夾
  19. * $list = $fileutil->dirList("E: example"); 測試清單資料夾列出目錄下所有檔案
  20. * $list = $fileutil->dirTree("/"); 測試清單資料夾樹列出目錄下所有檔案直接直接的樹關係
  21. */
  22. class fileDirUtil {
  23. /**
  24. * 建立資料夾
  25. *
  26. * @param string $aimUrl
  27. * @return viod
  28. */
  29. 函數createDir($aimUrl, $mode = 0777) {
  30. $aimUrl = str_replace ( '', '/', $aimUrl );
  31. $aimDir = '';
  32. $arr = 爆炸 ( '/', $aimUrl );
  33. foreach ( $arr as $str ) {
  34. $aimDir .= $str . '/';
  35. if (!file_exists ( $aimDir )) {
  36. mkdir ( $aimDir, $mode );
  37. }
  38. }
  39. }
  40. /**
  41. * 建立檔案
  42. *
  43. * @param string $aimUrl
  44. * @param boolean $overWrite 此參數控制是否覆寫原始檔案
  45. * @return boolean
  46. */
  47. function createFile($aimUrl, $overWrite = false) {
  48. if (file_exists ( $aimUrl ) & $a& $ overWrite == false) {
  49. 回傳false;
  50. } elseif (file_exists ( $aimUrl ) && $overWrite == true) {
  51. $this->unlinkFile ( $aimUrl );
  52. }
  53. $aimDir = 目錄名 ( $aimUrl );
  54. $this->createDir ( $aimDir );
  55. 觸摸 ( $aimUrl );
  56. 回傳true;
  57. }
  58. /**
  59. * 行動資料夾
  60. *
  61. * @param string $oldDir
  62. * @param string $aimDir
  63. * @param boolean $overWrite 此參數控制是否覆寫原始檔案
  64. * @ return boolean
  65. */
  66. function moveDir($oldDir, $aimDir, $overWrite = false) {
  67. $aimDir = str_replace ( '', '/', $aimDir );
  68. $aimDir = substr ( $aimDir, - 1 ) == '/' ? $aimDir : $aimDir : '/';
  69. $oldDir = str_replace ( '', '。 /', $oldDir );
  70. $oldDir = substr ( $oldDir, - 1 ) == '/' ? $oldDir : $oldDir 。 '/';
  71. if (! is_dir ( $oldDir )) {/';
  72. if (! is_dir ( $oldDir )) {
  73. return false;
  74. }
  75. if (!file_exists ( $aimDir )) {
  76. $this->createDir (
  77. }
  78. @$dirHandle = opendir ( $ oldDir ); 🎜> if (!$dirHandle) {
  79. return false
  80. }
  81. while ( false !== ($file = readdir ( $dirHandle )) ) {
  82. if ($文件== '. ' || $file == '..') {
  83. 繼續;
  84. }
  85. if (!is_dir ( $oldDir . $file )) {
  86. $this-> moveFile ( $oldDir . $file, $aimDir . $file, $overWrite );
  87. } else {
  88. $this->moveDir ( $oldDir . $file, $aimDir . $file, $overWrite ); 🎜> }
  89. }
  90. closeir ( $dirHandle )
  91. 返回rmdir ( $oldDir );
  92. /**
  93. * 移動檔案
  94. *
  95. * @param string $fileUrl
  96. * @param string $aimUrl
  97. * @param boolean $overWrite 此參數控制是否覆寫原始檔案
  98. * @return boolean
  99. */
  100. function moveFile($fileUrl, $aimUrl, $overWrite = false) {
  101. if (! file_exists ( $fileUrl )) {
  102. return false; } }
  103. }
  104. if (file_exists ( $aimUrl ) && $overWrite = false) {
  105. return false;
  106. } elseif (file_exists ( $aimUrl ) && $overWrite = true) {
  107. $this->unlinkFile ( $aimUrl );
  108. }
  109. $aimDir = 目錄名 ( $aimUrl );
  110. $this->createDir ( $aimDir );
  111. 重新命名 ($fileUrl, $aimUrl );
  112. 回傳true;
  113. }
  114. /**
  115. * 刪除資料夾
  116. *
  117. * @param string $aimDir
  118. * @return boolean
  119. */
  120. function unlinkDir($aimDir) {
  121. $aimDir = str_replace ( '', '/', $aimDir );
  122. $aimDir = substr ( $aimDir, - 1 ) == '/' ? $aimDir : $aimDir 。
  123. if (! is_dir ( $aimDir )) {
  124. return false;
  125. }
  126. $dirHandle = opendir ( $aimDir );
  127. while ( false !== ($file = readdir ( $dirHandle )) ) {
  128. if ($file == '.' || $file == '..') {
  129. 繼續;
  130. }
  131. if (!is_dir ( $aimDir . $file )) {
  132. $this->unlinkFile ( $aimDir . $file );
  133. } else {
  134. $this->unlinkDir ( $aimDir . $file );
  135. }
  136. }
  137. closeir ( $dirHandle );
  138. 返回 rmdir ( $aimDir );
  139. }
  140. /**
  141. * 刪除檔案
  142. *
  143. * @param string $aimUrl
  144. * @return boolean
  145. */
  146. function unlinkFile($aimUrl) {
  147. if (file_exists ( $aimUrl )) {
  148. unlink ( $aimUrl );
  149. 回傳 true;
  150. } else {
  151. 回傳 false;
  152. }
  153. }
  154. /**
  155. * 複製資料夾
  156. *
  157. * @param string $oldDir
  158. * @param string $aimDir
  159. * @param boolean $overWrite 此參數控制是否覆蓋原檔案
  160. * @ return boolean
  161. */
  162. function copyDir($oldDir, $aimDir, $overWrite = false) {
  163. $aimDir = str_replace ( '', '/ ', $aimDir );
  164. $aimDir = substr ( $aimDir, - 1 ) == '/' ? $aimDir : $aimDir 。
  165. $oldDir = str_replace ( '', '/', $oldDir );
  166. $oldDir = substr ( $oldDir, - 1 ) == '/' ? $oldDir : $oldDir 。
  167. if (! is_dir ( $oldDir )) {
  168. return false;
  169. }
  170. if (!file_exists ( $aimDir )) {
  171. $this->createDir ( $aimDir );
  172. }
  173. $dirHandle = opendir ( $oldDir );
  174. while ( false !== ($file = readdir ( $dirHandle )) ) {
  175. if ($file == '.' || $file == '..') {
  176. 繼續;
  177. }
  178. if (!is_dir ( $oldDir . $file )) {
  179. $this->copyFile ( $oldDir . $file, $aimDir . $file, $overWrite );
  180. } else {
  181. $this->copyDir ( $oldDir . $file, $aimDir . $file, $overWrite );
  182. }
  183. }
  184. 回傳 closeir ( $dirHandle );
  185. }
  186. /**
  187. * 複製檔案
  188. *
  189. * @param string $fileUrl
  190. * @param string $aimUrl
  191. * @param boolean $overWrite 此參數控制是否覆寫原始檔案
  192. * @return boolean
  193. */
  194. function copyFile($fileUrl, $aimUrl, $overWrite = false) {
  195. if (! file_exists ( $fileUrl )) {
  196. return錯誤的;
  197. }
  198. if (file_exists ( $aimUrl ) && $overWrite == false) {
  199. return false;
  200. } elseif (file_exists ( $aimUrl ) && $overWrite == true) {
  201. $this->unlinkFile ( $aimUrl );
  202. }
  203. $aimDir = 目錄名 ( $aimUrl );
  204. $this->createDir ( $aimDir );
  205. 複製 ( $fileUrl, $aimUrl );
  206. 回傳true;
  207. }
  208. /**
  209. * 將字串寫入檔案
  210. *
  211. * @param string $filename 檔案名稱
  212. * @param boolean $str 待寫入的字元資料
  213. */
  214. function writeFile($filename, $str) {
  215. if (function_exists ( file_put_contents )) {
  216. file_put_puts_put_put_put_put_put_put_s) $檔名, $str ) ;
  217. } else {
  218. $fp = fopen ( $filename, "wb" );
  219. fwrite ( $fp, $str );
  220. fclose ( $fp );
  221. }
  222. }
  223. /**
  224. * 將整個檔案內容讀出到一個字串中
  225. *
  226. * @param string $filename 檔案名稱
  227. * @return array
  228. */
  229. function readFile($filename) {
  230. if (function_exists ( file_get_contents )) {
  231. return file_get_contents ( $filename ); }
  232. } else {
  233. $fp = fopen ( $filename, "rb" );
  234. $str = fread ( $fp, 檔案大小 ( $filename ) );
  235. fclose ( $fp );
  236. 回傳 $str;
  237. }
  238. }
  239. /**
  240. * 將檔案內容讀出到一個陣列中
  241. *
  242. * @param string $filename 檔案名稱
  243. * @return array
  244. */
  245. function readFile2array($filename) {
  246. $file = file ( $filename );
  247. $arr = 備份();
  248. foreach ( $file as $value ) {
  249. $arr [] = trim ( $value );
  250. }
  251. 回傳 $arr;
  252. }
  253. /**
  254. * 轉換 為 /
  255. *
  256. * @param string $path 路徑
  257. * @return string 路徑
  258. */
  259. function dirPath($path) {
  260. $path = str_replace ( '\', '/', $path );
  261. if (substr ( $path, - 1) != '/')
  262. $path = $path 。
  263. 回傳 $path;
  264. }
  265. /**
  266. * 轉換目錄下方的所有檔案編碼格式
  267. *
  268. * @param string $in_charset 原字元集
  269. * @param string $out_charset 目標字元集
  270. * @param string $dir 目錄位址
  271. * @param string $fileexts 轉換的檔案格式
  272. * @return string 如果原字元集和目標字元集相同則傳回false,否則為true
  273. */
  274. function dirIconv($in_charset, $out_charset, $dir, $fileexts = 'php|html|htm|shtml|shtm|js|txt|xml' ) {
  275. if ($in_charset == $out_charset)
  276. 回傳false;
  277. $list = $this->dirList ( $dir );
  278. foreach ( $list as $v ) {
  279. if (preg_match ( "/.($fileexts)/i", $v ) && is_file ( $v )) {
  280. file_put_contents ( $v, iconv ( $in_charset, $out_charset, file_get_contents ( $v ) ) );
  281. }
  282. }
  283. 回傳 true;
  284. }
  285. /**
  286. * 列出目錄下所有檔案
  287. *
  288. * @param string $path 路徑
  289. * @param string $exts 副檔名
  290. * @param array $list 增加的檔案清單
  291. * @return array 所有符合條件的文件
  292. */
  293. function dirList($path, $exts = '', $list = array() ) {
  294. $path = $this->dirPath ( $路徑);
  295. $files = glob ( $path . '*' );
  296. foreach ( $files as $v ) {
  297. $fileext = $this->fileext ( $v );
  298. if (! $exts || preg_match ( "/.($exts)/i", $v )) {
  299. $list [] = $v;
  300. if (is_dir ( $v )) {
  301. $list = $this->dirList ( $v, $exts, $list );
  302. }
  303. }
  304. }
  305. 回傳 $list;
  306. }
  307. /**
  308. * 設定目錄下面的所有檔案的存取和修改時間
  309. *
  310. * @param string $path 路徑
  311. * @param int $mtime 修改時間
  312. * @param int $atime 存取時間
  313. * @return array 不是目錄時回傳false,否則回傳true
  314. */
  315. function dirTouch($path, $mtime = TIME, $atime = TIME) {
  316. if (! is_dir ( $path ))
  317. 回傳假;
  318. $path = $this->dirPath ( $path );
  319. if (!is_dir ( $path ))
  320. touch ( $path, $mtime, $atime );
  321. $files = glob ( $path . '*' );
  322. foreach ( $files as $v ) {
  323. is_dir ( $v ) ? $this->dirTouch ( $v, $mtime, $atime ) : touch ( $v, $mtime, $atime );
  324. }
  325. 回傳 true;
  326. }
  327. /**
  328. * 目錄列表
  329. *
  330. * @param string $dir 路徑
  331. * @param int $parentid 父id
  332. * @param array $dirs 傳入的目錄
  333. * @return array 回傳目錄及子目錄清單
  334. */
  335. function dirTree($dir, $parentid = 0, $dirs = array()) {
  336. $全域id;
  337. if ($parentid == 0)
  338. $id = 0;
  339. $list = glob ( $dir . '*' );
  340. foreach ( $list as $v ) {
  341. if (is_dir ( $v )) {
  342. $id ++;
  343. $dirs [$id] = array ('id' => $id, 'parentid' => $parentid, 'name' => 基本名稱 ( $v ), 'dir' => $v '/' );
  344. $dirs = $this->dirTree ( $v . '/', $id, $dirs );
  345. }
  346. }
  347. 回傳 $dirs;
  348. }
  349. /**
  350. * 目錄清單
  351. *
  352. * @param string $dir 路徑
  353. * @return array 回傳目錄清單
  354. */
  355. function dirNodeTree($dir) {
  356. $d = dir ( $dir );
  357. $dirs = array();
  358. while ( false !== ($entry = $d->read ()) ) {
  359. if ($entry != '.' and $entry != '..' and is_dir ( $dir ' /' . $entry )) {
  360. $dirs[] = $entry;
  361. }
  362. }
  363. 回傳 $dirs;
  364. }
  365. /**
  366. * 取得目錄大小
  367. *
  368. * @param string $dirname 目錄
  369. * @return string 位元B
  370. */
  371. function getDirSize($dirname) {
  372. if (!file_exists ( $dirname ) or ! is_dir ( $dirname )) if (! $handle = opendir ( $dirname ))
  373. return false;
  374. $大小 = 0;
  375. while ( false !== ($file = readdir ( $handle )) ) {
  376. if ($file == "." 或 $file == "..")
  377. 繼續;
  378. $file = $dirname 。
  379. } else {
  380. $size += 檔案大小 ( $file );
  381. }
  382. }
  383. closeir ( $handle );
  384. 回傳 $size;
  385. }
  386. /**
  387. * 將位元組轉換成Kb或Mb...
  388. * 參數 $size為位元組大小
  389. */
  390. function bitSize($size) {
  391. if (! preg_match ( "/^[0-9]+$/", $num ))
  392. 回傳0;
  393. $type = array("B", "KB", "MB", "GB", "TB", "PB");
  394. $j = 0;
  395. while ( $num >= 1024 ) {
  396. if ($j >= 5)
  397. 回傳 $num 。
  398. $j ++;
  399. }
  400. 回傳 $num 。 $類型[$j];
  401. }
  402. /**
  403. * 取得檔案名稱字尾
  404. *
  405. * @param string $filename
  406. * @return string
  407. */
  408. function fileext($filename) {
  409. returnaddslashes (trim (trim (trim) (trim (trim) (trim) (trim)))> substr ( strrchr ( $filename, '.' ), 1, 10 ) ) );
  410. }
  411. }
  412. ?>
  413. 複製代碼
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板