PDA

View Full Version : سوال: نحوه جستجو در دایرکتوری ها



persian-boy
دوشنبه 03 مهر 1391, 08:22 صبح
سلام

بنده یک کد دارم



<?php
echo count(glob('*-[0-9][0-9][0-9]x[0-9][0-9][0-9].*')).'<br>';
foreach (glob('*-[0-9][0-9][0-9]x[0-9][0-9][0-9].*') as $pic) {
unlink($pic);
}
?>



همونطور که میبینید این کد کارش حذف عکس هایی که با الگوی مشخص شده همخوانی دارن هست .
این فقط عکس های فولدری که داخلش هست رو حذف میکنه . من میخوام هر چی فولدر کنارش هست هم جستجو بشه .
مثلا یک فولدر داریم به اسم آپلود . داخل این فولدر 40 تا فولدر دیگه توی هم توی هم هستن . همشون میخوام جست جو بشن

Unique
دوشنبه 03 مهر 1391, 12:17 عصر
اگه دایرکتوریها تو در تو نیست که با opendir و readdir میشه دایرکتوری های فولد upload را گرفت و داد به این کد تا عکس ها را حذف کنه ! اگه هم تو در توی هست با یک تابع بازشگتی و باز هم استفاده از opendir و readdir میشه این کار را کرد !
میتونی الگوی مورد نظر را هم به این تابع بدی تا کار را برات انجام بده :


find_files($path, $pattern, $callback){
$path = rtrim(str_replace("\\", "/", $path), '/') . '/*';
foreach (glob ($path) as $fullname) {
if (is_dir($fullname)) {
find_files($fullname, $pattern, $callback);
} else if (preg_match($pattern, $fullname)) {
call_user_func($callback, $fullname);
}
}
}

توجه : کد از جای دیگست و باید چکس کنین ولی احتمالا کار میده !

persian-boy
دوشنبه 03 مهر 1391, 13:52 عصر
ممنون

یک مثال از این کد میزنید؟
فولدر ها تو در تو هستن

MMSHFE
دوشنبه 03 مهر 1391, 15:12 عصر
مثالی از نحوه کاربرد یک تابع بازگشتی برای این کار:


function remove_images($path) {
chdir($path);
$images = glob('*-[0-9][0-9][0-9]x[0-9][0-9][0-9].*');
foreach($images as $image) {
unlink($image);
}
$subdirs = glob('*.*', GLOB_ONLYDIR);
foreach($subdirs as $subdir) {
remove_images($path . '/' . $subdir);
chdir($path);
}
}
// Usage
remove_images(__DIR__ . '/uploads');

mrgraphy
دوشنبه 03 مهر 1391, 15:14 عصر
سلام دوست عزیز من یک کدی نوشتم که فولدر های تو در تو و فایل های اونا رو پاک میکنه و تا بینهایت فولدر داخل میشه و محدودیت نداره.
یکم تغییرش بدی همون چیزی میشه که میخوای.



function Clear_Dir($dirname) {

if(is_dir($dirname)) {

if($dir_handle = opendir($dirname)) {

while (false !== ($files = readdir($dir_handle))) {
if ($files != "." && $files != "..") {
if(is_dir($dirname."/".$files)) {
Clear_Dir($dirname."/".$files);
}else{
unlink($dirname."/".$files);
}
}
}
closedir($dir_handle);
rmdir($dirname);
}
}

}