View Full Version : سوال: نحوه جستجو در دایرکتوری ها
persian-boy
دوشنبه 03 مهر 1391, 09: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, 13: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, 14:52 عصر
ممنون
یک مثال از این کد میزنید؟
فولدر ها تو در تو هستن
MMSHFE
دوشنبه 03 مهر 1391, 16: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, 16: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);
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.