أخي . هناك class قمت بكتابته لهدف مشابه أرجو أن يفيدك..
كود PHP:
class folder_options{
public static $response;
private static $continue;
/**
* listing with limited file deletion
* @param target dir name $dir
* @param bool $is_file
* @param array $patterns ex. array('dat','zip','jpg') >>>----> enter patterns without the (dot)
* @author Mohamed Wahed (Mr_m)
* @return array() deleted files
*/
public static function remove($dir,$patterns=null,$is_file=false){
self::$response = 'idle';
$affected = array();
if(is_file($dir) && file_exists($dir)){
if(is_file($dir)){
self::$response = (unlink($dir)) ? true : false;
}
$affected[] = $dir;
return $dir;
}
$data = self::folder2array($dir);
if(is_array($patterns)){
foreach($patterns as $ext){
foreach($data as $file){
if(!is_dir($file)){
if(eregi($ext."$",$file)){
if(!@unlink($file)){
self::$response = false;
}else{
$affected[] = $file;
self::$response = true;
}
}
}
}
}
}else{
foreach($data as $file){
if(!is_dir($file)){
if(!@unlink($file)){
self::$response = false;
}else{
$affected[] = $file;
self::$response = true;
}
}
}
}
return $affected;
}
/**
* returns array with all contents (unlimited levels)
* @param dir $dir
* @return array() dirs contents
*/
public static function folder2array($dir){
$data[0] = $dir;
$dirs = array();
self::$continue = true;
while(self::$continue != false){
foreach($data as $key => $file){
clearstatcache();
$read = self::read($file);
if($read !== false){
foreach($read as $val){
if(is_dir($val)) array_push($dirs,$file);
array_push($data,$val);
}
unset($data[$key]);
}
}
$data = self::search($data);
}
foreach($dirs as $dir) array_push($data,$dir);
return $data;
}
private static function search($data){
clearstatcache();
$pass = false;
foreach($data as $dir){
if(is_dir($dir)) $pass = true;
}
self::$continue = ($pass === true) ? true : false;
return $data;
}
private static function read($dir){
clearstatcache();
if(!is_dir($dir)) return false;
$output = array();
if($handle = opendir($dir)){
while(false !== ($file = readdir($handle))){
if($file != "." && $file != "..") $output[] = $dir.'/'.$file;
}
closedir($handle);
}else return false;
return $output;
}
}
ضع الكود السابق في ملف و سميه folder_options.php
و للاستخدام اتبع التالي:
= لحذف مجموعة من الملفات مع التقيد بامتدادات معينة
كود PHP:
include("folder_options.php");
$deleted = folder_options::remove('اسم المجلد',array('zip','jpg','dat'));
if(folder_options::$response === true){
echo "deleted ".count($deleted)."items<br />";
print_r($deleted);
}
و يكتب الامتداد بدون سبقه بالنقطة dot . و بدون سبق اسم المجلد أو انهائهه بالسلاش / .
= لحذف جميع ما بداخل المجلد من ملفات استعمل
كود PHP:
$deleted = folder_options::remove('اسم المجلد بدون سبقه أو انهائه بالسلاش');
if(folder_options::$response === true){
echo "deleted ".count($deleted)."items<br />";
print_r($deleted);
}
= لارجاع محتويات المجلد + محتويات المجلدات المندرجة تحته (بدون حذف) استعمل
كود PHP:
$contents = folder_options::folder2array(".");
print_r($contents);
الكود السابق سوف يستعرض المحتويات ابتداء من المجلد الحالي
لكم تحياتي