السلام عليكم
اخوي هل تقصد انه هناك مجلدات فرعية داخل المجلد إلي بتم البحث عنه ؟؟
المهم اخوي ...
أنا عملت لك مثال بسيط لطريقة البحث في ملفات html وبالمجلد إلي تحدده وراح يبحث بعد اذا في مجلدات اخرى داخل هل مجلد الحدد .. وانا عملته بالبيرل .. فاذا كان المطلوب وتحب تستخدمه خبرني باي اضافات ترغب بها .. او ان الفكرة اضن قد وصلت لك فممكن اي شخص يعمله لك باي لغة ثانية غير البيرل و السي جي اي بما ان واضح وعليه شرح
كود:
#!/usr/bin/perl
$urlhome = "http://domain.com"; # عنوان الموقع
$dirse = "folder"; # اسم المجلد الذي سيتم البحث فيه
# لا تحتاج لتعديل بعد هذا السطر
$dirroot = "$ENV{'DOCUMENT_ROOT'}"; # مسار ملفات الموقع
use CGI; # طلب CGI.pm
my $SEARCH = CGI::new(); # إنشاء كائن جديد
my $keyse = $SEARCH->param('Key'); # تسمية مفتاح البحث
my $pathdir = "$dirroot/$dirse"; # مسار مجلد الذي سيتم البحث فيه
# هممممممم ... لاجراء امني وعدم تمرير قييم عن طريق مفتاح البحث
$keyse =~ s/<([^>]|\n)*>//gi; # حذف اي وسوم HTML
$keyse =~ s/<!--(.|\n)*-->//gi; # حذف اي طلب استدعاء
$keyse =~ s/(\||\^|\\|\+|\.|\*|\?|\(|\)|\[|\])//eg; # حذف اي رموز غريبة وغير لازمة
print "Content-type:text/html\n\n"; # عرض صيغة الصفحة
if ($keyse) { # إذا كان هناك قيمة لمفتاح البحث
my @fsearch; # array لوضع النتائج اذا وجدة به
opendir(DIR,"$pathdir"); # فتح المجلد
while (my $files = readdir(DIR)) { # عمل تكرار لقرائته
if ($files !~ /^\.{1,2}/) { # إذا لم يكن البداية يبدء بعلامة دوت او دوتين
if ($files =~ /(.*)\.(html|htm)$/i) { # اذا كان ينتهي بي html,htm
@showfile = readdatafile("$pathdir/$files"); # طلب دالة القراء لمحتواى الملف
if (grep(/$keyse/i,@showfile)) { # اذا كان المحتوى به نفس اسم المفتاح
$inlink = "$urlhome/$dirse/$files"; # الحصول على عنوانه
push(@fsearch,$inlink); # وضعه في array
}
} elsif (-d "$pathdir/$files") { # كذلك إذا كان مجلد
@getserch = readdatadir("$files"); # طلب دالة قرائة محتوى المجلد
push(@fsearch,@getserch); # وضع النتائج في array
}
}
}
closedir(DIR); # غلق فتح المجلد
my $count = @fsearch; # عدد النتائج
if ($count) {
# طباعة النتيجة
print "<div dir='rtl'>تم العثور على <b>$count</b> نتيجة/نتائج من مفتاح البحث: <b>$keyse</b><br>";
# عرض النتائج
print "العنوان: <a href='$_'>$_</a> <br>" foreach (@fsearch);
} else {
# طباعة عبارة عدم العثور
print "لم نجد أي نتيجة مطابقة لمفتاح البحث الذي أدخلته";
}
} else { # اذا لم يكن هناك مفتاح بحث
# طباعة صفحة البحث
print qq~<form action="search.cgi">ادخل مفتاح البحث:
<input type="text" name="Key" size="20"></form>~;
}
# دالة قرائة محتويات المجلد الفرعية
# هي نفس الخطوات التي تم استخدامها في المجلد الرئيسي
sub readdatadir {
my ($datadir) = shift;
opendir(INDIR,"$pathdir/$datadir");
while ($infiles = readdir(INDIR)) {
if ($infiles =~ /(.*)\.(html|htm)$/i) {
@showinfile = readdatafile("$pathdir/$datadir/$infiles");
if (grep(/$keyse/i,@showinfile)) {
$inget = "$urlhome/$dirse/$datadir/$infiles";
push(@r_dir,"$inget");
}
}
}
closedir(INDIR);
return @r_dir;
}
# دالة قراءة محتوى الملف
sub readdatafile {
my ($datafile) = shift;
if (open(DATA,"$datafile")) {
@r_data = <DATA>;
close DATA;
}
return @r_data;
}
بس ضع عنوان الموقع واسم المجلد في
$urlhome = "http://domain.com"; # عنوان الموقع
$dirse = "folder"; # اسم المجلد الذي سيتم البحث فيه
بس لاحظ مثلا لو المجلد إلي بتم البحث فيه داخل مجلد يعني بالعنوان
url.com/dir/folder
انت هني تضع اسمه
كود:
$dirse = "dir/folder";
اي ملاحظات او اسئلة ان شاء الله انا حاضر
والسموحة منك
وشكرا