10/10/2018, 10:45

Func liệt kê file trong folder và cả file trong sub folder của nó

Trước mình rất cần cái này nhưng tìm kiếm chỉ tìm đc function liệt kê các file trong 1 folder mà ko liệt kê đc cả các file trong subfolder của nó.
Cụ thể như folder a/ có file x.php, y.txt, sub folder a/b/ có file z.html
ta cần làm 1 function để liệt kê ra các file trong folder a/ như sau:

a/x.php
a/y.txt

a/b/z.html

Mà mình ko đc học IT mà chỉ là tìm tòi cái mớ php và sql mà biết thôi.

Thế mà hôm qua ngồi nghĩ, vì đang làm cái component cho joomla mà cái file .xml để cài cần liệt kê file cho nó upload lên.
Cuối cùng cũng đã làm đc cái function này, cùng chia sẻ cho ai cần nó!

PHP Code:
function lFiles($dir){
    
$files = array();
    
$dirs***91;***93; = $dir;    // cho vao ngan xep

    
while (count($dirs)) { // ngan xep ron~g thi stop!
        
$directory opendir($dirs***91;0***93;); // Doc ngan xep dau tien
        // get list file a dir
        
while($item readdir($directory)){
        
// We filter the elements that we don't want to appear ".", ".." and ".svn"
             
if(($item != ".") && ($item != "..") && ($item != ".svn") ){
                  if(!
is_dir($dirs***91;0***93;.'/'.$item)) {
                    
$files***91;***93; = $dirs***91;0***93;.'/'.$item;
                  }
                  else 
$dirs***91;***93; = $dirs***91;0***93;.'/'.$item// nap vao ngan xep neu la dir
             
}
        }
        
array_splice($dirs01); // xoa ngan xep dau tien
        
closedir($directory);
    }
    
    return 
$files;

Tất nhiên cái function này chỉ nên (và chắc chắn rằng) tổng các file tỏng folder đưa vào function phải là ko quá lớn, nếu ko sẽ ko biết điều gì xảy ra đâu

ai có ý kiến xin chỉ giáo!
cayriver viết 12:49 ngày 10/10/2018
Thế nếu lỡ có nhiều hơn 2 thư mục sub kế tiếp nhau thì cái của bạn không đáp ứng được rồi.
Xem cái này có được không?
Code:
function fileHunter($dir) {
	static $files=array();
	if ($handle = opendir($dir)) {
		while (false !== ($file = readdir($handle))) {
     	   		if ($file != "." && $file != "..") {
				if is_dir($file) {
					fileHunter($file);
				}
				else {
					array_push($files,$file);	
				}
            			
        		}
    		}
    		closedir($handle);
	}
	return files;

}
haicop viết 13:00 ngày 10/10/2018
Để làm việc này bạn cần viết 1 hàm đệ quy (-> google ).

Hàm đệ quy là hàm các lệnh trong đó tự gọi chính hàm đó, như vậy bạn cần làm như sau

1. Gọi hàm với thư mục cần liệt kê
2. Trong hàm bạn viết, nếu vẫn còn cấp con thì gọi tiếp tục chính nó. Nếu hết thì quit

cách này có thể dùng để làm menu đa cấp, danh mục đa cấp

Được gửi bởi olbk
Trước mình rất cần cái này nhưng tìm kiếm chỉ tìm đc function liệt kê các file trong 1 folder mà ko liệt kê đc cả các file trong subfolder của nó.
Cụ thể như folder a/ có file x.php, y.txt, sub folder a/b/ có file z.html
ta cần làm 1 function để liệt kê ra các file trong folder a/ như sau:

a/x.php
a/y.txt

a/b/z.html

Mà mình ko đc học IT mà chỉ là tìm tòi cái mớ php và sql mà biết thôi.

Thế mà hôm qua ngồi nghĩ, vì đang làm cái component cho joomla mà cái file .xml để cài cần liệt kê file cho nó upload lên.
Cuối cùng cũng đã làm đc cái function này, cùng chia sẻ cho ai cần nó!

PHP Code:
function lFiles($dir){
    
$files = array();
    
$dirs***91;***93; = $dir;    // cho vao ngan xep

    
while (count($dirs)) { // ngan xep ron~g thi stop!
        
$directory opendir($dirs***91;0***93;); // Doc ngan xep dau tien
        // get list file a dir
        
while($item readdir($directory)){
        
// We filter the elements that we don't want to appear ".", ".." and ".svn"
             
if(($item != ".") && ($item != "..") && ($item != ".svn") ){
                  if(!
is_dir($dirs***91;0***93;.'/'.$item)) {
                    
$files***91;***93; = $dirs***91;0***93;.'/'.$item;
                  }
                  else 
$dirs***91;***93; = $dirs***91;0***93;.'/'.$item// nap vao ngan xep neu la dir
             
}
        }
        
array_splice($dirs01); // xoa ngan xep dau tien
        
closedir($directory);
    }
    
    return 
$files;

Tất nhiên cái function này chỉ nên (và chắc chắn rằng) tổng các file tỏng folder đưa vào function phải là ko quá lớn, nếu ko sẽ ko biết điều gì xảy ra đâu

ai có ý kiến xin chỉ giáo!
donamkhanh viết 13:01 ngày 10/10/2018
Dùng PHP5 sao các bạn không dùng luôn Standard PHP Library nhỉ? Nó có phần Directory Iteractor dùng cho việc duyệt nội dung thư mục bất kỳ mà http://php.net/manual/en/class.directoryiterator.php
olbk viết 12:46 ngày 10/10/2018
Được gửi bởi cayriver
Thế nếu lỡ có nhiều hơn 2 thư mục sub kế tiếp nhau thì cái của bạn không đáp ứng được rồi.
Xem cái này có được không?
Bạn thử function của mình chưa? , bạn thử mới biết đc!
uhm, Mình thử functuion của bạn đưa xem thế nào nhé

Được gửi bởi haicop
1. Gọi hàm với thư mục cần liệt kê
2. Trong hàm bạn viết, nếu vẫn còn cấp con thì gọi tiếp tục chính nó. Nếu hết thì quit

cách này có thể dùng để làm menu đa cấp, danh mục đa cấp
Cám ơn bạn! Mình cũng nghĩ dùng dệ quy nhưng mình ko chắc trong đệ quy lắm, nên dùng stack - ngăn xếp.

Được gửi bởi donamkhanh
Dùng PHP5 sao các bạn không dùng luôn Standard PHP Library nhỉ? Nó có phần Directory Iteractor dùng cho việc duyệt nội dung thư mục bất kỳ mà http://php.net/manual/en/class.directoryiterator.php
Mình ko thấy function nào có sẵn thỏa mãn luôn đc yêu cầu của mình, mà chỉ dùng các function đó làm function mới thôi.

Tóm lại cái function trên của mình đã làm đc rồi mà...
Có 1 cái là dùng "/" mà ko dùng DIRECTORY_SEPARATOR thì ko biết khi nào nó sẽ gay lỗi nữa! Ko rõ những ng` RIP template joomla từ site khác thì khi tạo file xml họ làm j, liệt kê file = tay hay cũng dùng hàm nhỉ?
honnhienh viết 13:01 ngày 10/10/2018
mình không chắc về cái rip template của joomla lắm trước giờ mình chỉ gặp convert từ cái khác sang tempalte joomla thôi. Lâu lâu cũng có site mình view được cái file xml của nó coi chơi chẳng biết làm gì. Bạn có thể đọc được thư mục template của site họ sao ? Nếu đọc được thì Rip làm gì lấy luôn về hi hi khỏi phải rip đỡ tốn công.
olbk viết 12:57 ngày 10/10/2018
Khái niệm zip mình chả hiểu nghĩa, nếu suy nghĩ của mình thì nó chỉ là cách bắt chước cái khác, làm giống như thế. Nếu đọc đc file trên site của họ thì lấy cả site luôn chứ temp lấy làm j hiii.

giả sử làm đc 1 temp joomla cần làm cái xml chuẩn để có thể install, nếu ko chỉ có cách là upload lên folder template/ của joomla trên host, đúng ko?
Nếu làm 1 temp hay com hay mod cần làm cái xml chuẩn chớ !
honnhienh viết 12:55 ngày 10/10/2018
Ùh cái xml thì phải chuận rùi. Nhưng bác copy cái xml của temp mặc định rùi sửa. Mấy cái xml thì cũng có chuận rùi copy sửa là chính . Tui luôn copy và pass mấy cái xml này.

Với lại bác là design thì bác luôn có cái mẫu cho riêng bác trong máy rùi, Đụng tới nó là bác vác nó ra past vô.
Bài liên quan
0