10/10/2018, 10:28

scan thư mục bằng php

Chào các pro!

Mình đăng gặp vấn đề mà không biết phải làm như thế nào.
Số là ông sếp có đưa một công việc cho mình là scan tất cả các thư mục từ một url cho trước và lưu vào database.
Mình đã scan vào lưu vào datbase được nhưng mình không biết làm cách nào mà có thể lưu các thư mục ấy vào database dạng đa cấp giống như cấu trúc thư mục bên ngoài win(lưu như dạng menu đa cấp).

Pro nào biết thì chỉ mình với.

Thank các pro
namduong8889 viết 12:42 ngày 10/10/2018
Bạn Tao mot table tên là directories gồm 2 cột:

PARENT đánh index

ID(int, auto-increase, primary); NAME (varchar(225)); PARENT (int)


Vậy ví dụ: khi mình có ở trên ổ C, một thư mục "Phim Khieu Dam" và trong đó có 2 folder "phim chau au" và "phim nhat ban"

thì lưu như vầy:

Code:
ID(int, auto-increase, primary); NAME (varchar(225)); PARENT (int)
1                                Phim Khieu Dam       0
2                                Phim Chau Au         1
3                                Phim Nhat Ban        2
Cột `ID` thì Database tự đánh số cho mình, cột PARENT là ID của thư mục mẹ, bằng 0 nếu ở thư mục gốc (cho là ổ C
quanghien2005k viết 12:36 ngày 10/10/2018
bạn có thử trường hợp là thư mục bố trí như bên dưới không?
-test 1
---testa
------test 5
------test 5
---------test a1
---------test a2
------test 5
---testb
---testc
- test2

nếu cấu trúc như vậy thì làm sao mà lấy id được. Mình không thể xác định được PARENT cho thư mục testb.
Mong giúp đỡ
namduong8889 viết 12:32 ngày 10/10/2018
Được gửi bởi quanghien2005k
bạn có thử trường hợp là thư mục bố trí như bên dưới không?
-test 1
---testa
------test 5
------test 6
---------test a1
---------test a2
------test 7
---testb
---testc
- test2

nếu cấu trúc như vậy thì làm sao mà lấy id được. Mình không thể xác định được PARENT cho thư mục testb.
Mong giúp đỡ
Bất kỳ cấu trúc như nào cũng thích hợp với thiết kế như vậy.

Code:
ID            NAME              PARENT
1             test1             0
2             test2             0

3             testa             1
4             testb             1
5             testc             1

6             test5             4
7             test6             4
8             test7             4

9             test a1           7
10            test a2           7
thuyduongcd viết 12:38 ngày 10/10/2018
-test 1
---testa
------test 5
------test 5
---------test a1
---------test a2
------test 5
---testb
---testc
- test2
Dùng string là 1 id theo quy tắc: ID = parentID + myID
Theo ví du trên, thư mục test 1 không có cha, giả sử cho nó giá trị AA thì thư mục testa sẽ có id là AA01, testb là AA02, testc là AA03,... Tương tự, test 5 sẽ là AA0101, AA0102, AA0103,... test a1 là AA010201, test a2 là AA010202...

Như vậy, nhìn vào 1 ID bạn s4 biết "độ sâu" của nó (dựa vào độ dài ID) và đường dẫn của nó

Bảng ID =>
Code:
-AA
---AA01
------AA0101
------AA0102
---------AA010201
---------AA010202
------AA0103
---AA02
---AA03
....
-BB
quanghien2005k viết 12:32 ngày 10/10/2018
Mình không hiểu là khi dùng code gọi hàm đệ qui để scan thư mục thì gọi như thế nào để ta có thể xác định đuọc parent.
Nếu có code thì hay quá.
Code của mình nhu sau:
//scan thu mục
function listdir($path)
{
if ($handle=opendir($path))
{
$parrentid = 0;
while (false!==($file=readdir($handle)))
{
if ($file<>"." AND $file<>"..")
{
if (is_dir($path.'/'.$file))
{
if(getIDDir("mathumuc","thumuc") != "")
$parrentid = getIDDir("mathumuc","thumuc");

saveDir($file,$parrentid,getIDDir("idroot","h_root dir"));
listdir($path.'/'.$file);

}
}
}
}
}

//Luu thong tin thu muc vao bang thumuc
function saveDir($tenthumuc,$parrentid,$idroot)
{
global $data;

$sql = "INSERT INTO thumuc(tenthumuc,parrentid,idroot) VALUES('".$tenthumuc."','".$parrentid."','".$idroo t."')" ;

$data->query($sql);
}

//Ham lay thông tin id sau cung
function getIDDir($id,$table)
{
global $data;
$sql= "SELECT $id FROM $table ORDER BY $id DESC LIMIT 0,1";
$result=$data->query($sql);
$display = "";
while($result_news = $data->fetch_array($result))
{
$display = $result_news[$id];
}
return $display ;
}

idroot chì là url mà mình chọn.
ngoc_viet08 viết 12:32 ngày 10/10/2018
parent của 1 thư mục là 1 thư mục có id bằng parent id của thư mục đang nói
quanghien2005k viết 12:39 ngày 10/10/2018
pro tháy6 mình không biết mà còn đùa ah. Mấy ngày rồi ma suy nghĩ chưa có ra nên mới hỏi nè(tìm code mà không thấy ).
ai có code thì chỉ luôn cho nhanh, chứ nói không thì khó làm quá.
ngoc_viet08 viết 12:35 ngày 10/10/2018
tham khảo ở đây xem
http://ddth.com/showthread.php?t=357067
quanghien2005k viết 12:39 ngày 10/10/2018
Không phải bạn ơi!
Mình cần là code khi scan thư mục từ win vào và lưu theo dạng menu đa cấp. Cái mình không biết là viết code như thế nào để xác định đúng các cấp của thư mục khi lưu vào database theo cấu trúc trên win.
Còn cách lấy ra thì mình biết.

[=========> Bổ sung bài viết <=========]

Mình đã lànm ra rồi .
Thanks mọi người đã hướng dẫn
Bài liên quan
0