السلام عليكم .. لدى استفسار ...
- كيف استطيع عمل اكثر من ereg فى نفس الدالة , مثال :
اريد عمل تنقية للملفات ذات الامتداد .zip و .rar و .htm من مجموعة ملفات تقراها الدالة scandir
السلام عليكم .. لدى استفسار ...
- كيف استطيع عمل اكثر من ereg فى نفس الدالة , مثال :
اريد عمل تنقية للملفات ذات الامتداد .zip و .rar و .htm من مجموعة ملفات تقراها الدالة scandir
التعديل الأخير تم بواسطة dewan159 ; 05-03-2008 الساعة 12:40 PM
السلام عليكم
جرب
كود PHP:
<?php
// function print all files in dir and all subdir with ext
function scanDirectories($rootDir, $allowext, $allData=array()) {
$dirContent = scandir($rootDir);
foreach($dirContent as $key => $content) {
$path = $rootDir.'/'.$content;
$ext = substr($content, strrpos($content, '.') + 1);
if(in_array($ext, $allowext)) {
if(is_file($path) && is_readable($path)) {
$allData[] = $path;
}elseif(is_dir($path) && is_readable($path)) {
$allData = scanDirectories($path, $allData);
}
}
}
return $allData;
}
$rootDir = "dirname";
$allowext = array("zip","rar","html"); // add all ext you want here
$files_array = scanDirectories($rootDir,$allowext);
print_r($files_array); // will print array with full path of your files with ext you enter
?>
التعديل الأخير تم بواسطة egyptdev ; 05-03-2008 الساعة 02:07 PM سبب آخر: miss
أخي . هناك class قمت بكتابته لهدف مشابه أرجو أن يفيدك..
ضع الكود السابق في ملف و سميه folder_options.phpكود 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;
}
}
و للاستخدام اتبع التالي:
= لحذف مجموعة من الملفات مع التقيد بامتدادات معينة
و يكتب الامتداد بدون سبقه بالنقطة dot . و بدون سبق اسم المجلد أو انهائهه بالسلاش / .كود 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);
}
= لحذف جميع ما بداخل المجلد من ملفات استعمل
= لارجاع محتويات المجلد + محتويات المجلدات المندرجة تحته (بدون حذف) استعملكود 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);
لكم تحياتي
مشكورين جميعا ... حقا ..
ولكن الامر ابسط ... انا فقط اريد شئ من هذا القبيل ..
ولكن اريد ان اضيف .. امتدادات اخرى .. اعتقد ان الموضوع يعتمد على البارامترات الخاصة بالدالة ..؟كود PHP:
$flist = scandir(dir);
for ($i=2; $i < count($flist); $i++) {
if(ereg(".htm",$flist[$i])){
echo $flist[$i];
}
}
هل تعديل هذا:
إلى هذا:كود PHP:
if(ereg(".htm",$flist[$i])){
هو المطلوب؟!كود PHP:
if(preg_match('/\.(htm|php)$/i', $flist[$i])) {
نعم اخى اشرف , هذا ما اقصده .. شكرا