الجمعة، 23 ديسمبر 2011

كاش قواعد البيانات

كاش قواعد البيانات – درس متقدم
ما هي عملية الكاش Cache ؟
هي عملية حفظ ملفات الانترنت ( صفحات المواقع عبارة عن مجموعة من الملفات ) أو أجزاء منها على السيرفر لعدم استدعائها من الانترنت عند طلبها للمرات القادمة ..
هذا هو التعريف المتداول لعملية الكاش Cache ..
بالنسبة لقواعد البيانات فإن الكاش يعتبر أحياناً أمراً ضروريا و خاصة إذا كان الجدول الذي نتعامل معه يحتوي على 10 آلاف مدخل أو أكثر على سبيل المثال ..
عملية الكاش بالنسبة لقواعد البيانات تعتمد على تخزين البيانات المطلوبة في ملف ثم جلبها من الملف طالما أنها ثابتة .. و عند قيامنا بأي تعديل على الملف يتوجب علينا حذف ملف الكاش و انشاءه من جديد ..
العملية تصبح كالتالي :
- جلب البيانات من جدول في قاعدة البيانات ( المرة الأولى ) و تستغرق وقتاً طويلاً في حال كنا نجلب 60 مدخلاً من اصل 100000 مدخل قد تستغرق العملية ثانيتان ( قد يبدو الزمن قليلاً لكن مقارنة بالزمن الذي يستغرقه جلب البيانات من ملف الكاش سيبدو هذا الرقم هائلاً )
-
تخزين البيانات التي قمنا بجلبها في ملف مهما كان امتداده ( في المثال الملف سيكون باللاحقة tmp )
-
عند تكرار الدخول للصفحة فإن المتصفح سيقوم بالبحث عن ملف الكاش و في حال تواجده سيتم جلب البيانات منه و إن لم يكن موجوداً فيتم جلب البيانات من جدول بقاعدة البيانات ثم انشاء ملف الكاش .
-
عند اجراء أي تعديل على قاعدة البيانات في القسم المتعلق بما قمنا بتخزينه في ملف الكاش يجب علينا حذف ملف الكاش .
سنقوم بتعيين مجلد الكاش و الذي يجب أن يكون قابلاً للكتابة
1
$dir = 'cache/';
2
$file = $dir.'cachefile.tmp';
في الكود السابق قمنا بتحديد مجلد الكاش و سميناه cache ثم قمنا بتحديد مسار ملف الكاش و أسندناه إلى متغير .
الخطوة الأولى
1
if (!file_exists($file)) {
2
// جلب البيانات من قاعدة البيانات

3
}
قمنا بعمل شرط .. باستخدام دالة file_exists و مهمتها التأكد من وجود ملف الكاش في المسار المحدد لها وقد وضعنا قبلها اشارة ( ! ) و التي تعني ( إذا لم يكن ) أي أنه في حال لم يكن الملف موجوداً سيتم تنفيذ الشرط و هو جلب البيانات من قاعدة البيانات و تخزينها في ملف الكاش .
01
if (!file_exists($file)) {
02
$SQL = mysql_query("SELECT id,title FROM news ORDER BY id DESC");

03
while ($row = mysql_fetch_array($SQL)) {
04
$data[]= $row;

05
echo $row['title'].'
06
'

07
}
08
$cached_data = base64_encode(serialize($data));

09
$openfile = fopen($file,"w");
10
fputs($openfile, $cached_data);

11
fclose($openfile);
12
}
قمنا ضمن الكود السابق بجلب المدخلات من قاعدة البيانات بافتراض ان اسم الجدول هو news ، ثم قمنا بادخال البيانات ضمن مصفوفة و قمنا بطباعة الناتج و هو عنوان كل خبر ( مدخل ) ضمن جدول الأخبار ( news ) و التي سنفترض أن عددها 5000 خبر ( مدخل ) .
بعد أن انهينا طباعة الناتج .. نقوم بتحويل البيانات إلى مصادر قابلة للتخزين عن طريق الدالة serialize . هناك أمر اختياري لكنني اعتقد بأنه مفيد و هو تشفير البيانات المخزنة عن طريق الدالة base64_encode و ذلك ليس لحمايتها من العبث إذ أن الدالة base64_encode سهلة الفك و هناك دالة معاكسة لها وظيفتها فك تشفير البيانات المشفرة بهذه الدالة و انما استخدامنا لها يعتبر احتياطاً لمشاكل قد تحدث نتيجة علامة اقتباس او اي شيء من هذا القبيل ..
بعد أن نقوم بتهيئة البيانات و تشفيرها نقوم بفتح ملف الكاش مع اعطاءه صلاحية الكتابة عن طريق الدالة fopen و التي حددنا فيها مسار الملف ثم حددنا لها الإجراء المتخذ و هو الكتابة في الملف (w).
نقوم بالكتابة في الملف عن طريق الدالة fputs و التي حددنا لها الملف المراد الكتابة فيه ثم مررنا إليها البيانات التي نريد ادخالها في الملف .
نقوم باغلاق الاتصال مع الملف عن طريق الدالة fclose مع تحديد الملف المراد اغلاقه .
و بهذا نكون قد انجزنا الجزء الأول من الكود و هو انشاء ملف الكاش .
الخطوة الثانية
الآن لقراءة ملف الكاش و الذي هو الشرط البديل للشرط الأول أي :
1
if (!file_exists($file)) {
2
// الجلب من قاعدة البيانات و انشاء ملف الكاش

3
} else {
4
// الجلب من ملف الكاش

5
}
نقوم بجلب ملف الكاش عن طريق الدالة file_get_contents ثم نقوم بفك تشفير البيانات عن طريق الدالة base64_decode ثم نقوم بإعادة البيانات إلى مصفوفة لكي نتمكن من التعامل معها .
1
$cached_data = unserialize(base64_decode(file_get_contents($file)));
الآن نتج لدينا مصفوفة نقوم بتجزئتها ضمن حلقة تكرار لكي نقوم بطباعة البيانات التي نريدها
1
foreach ($records as $id=>$row) {
2
echo $row['title'].'

3
';
4
}
و بهذا نكون قد انهينا كتابة الكود ليصبح كاملاً كالتالي :
01
$dir = 'cache/';
02
$file = $dir.'cachefile.tmp';

03
if (!file_exists($file)) {
04
$SQL = mysql_query("SELECT id,title FROM news ORDER BY id DESC");

05
while ($row = mysql_fetch_array($SQL)) {
06
$data[]= $row;

07
echo $row['title'].'
08
'

09
}
10
$cached_data = base64_encode(serialize($data));

11
$openfile = fopen($file,"w");
12
fputs($openfile, $cached_data);

13
fclose($openfile);
14
} else {

15
$cached_data = unserialize(base64_decode(file_get_contents($file)));
16
foreach ($records as $id=>$row) {

17
echo $row['title'].'
18
';

19
}
20
}
ملاحظة : عند قيامنا بأي أمر ( إدخال – تحديث – حذف ) ضمن الجدول news يجب علينا أن نقوم بحذف ملف الكاش عن طريق دالة unlink
1
mysql_query('UPDATE news SET ... .... ..');
2
unlink($file);
الدوال التي قمنا باستخدامها في المثال و هي :
file_exists
و ظيفة هذه الدالة هي التأكد من وجود الملف الممرر لها و تعود بالقيمة true في حال كان موجوداً و القيمة false في حال لم يكن موجوداً .
base64_encode
وظيفة الدالة هي تشفير النص الممرر لها .
base64_decode
وظيفة الدالة هي فك تشفير النص المشفر عن طريق base64_encode
serialize
وظيفة الدالة هي تحويل المصفوفة إلى بيانات قابلة للتخزين .
unserialize
وظيفتها عكس الدالة السابقة أي إعادة البيانات المخزنة إلى مصفوفة .
fopen
وظيفة الدالة هي فتح اتصال مع ملف مع تحديد الإجراء الذي سنقوم به ضمن ذلك الملف و في مثالنا كان الإجراء هو الكتابة ( w ) .
fputs
وظيفة الدالة هي نقل أو كتابة البيانات إلى ملف محدد حيث أن البارامتر ( العامل ) الأول هو الملف الذي نتعامل معه و البارامتر ( العامل ) الثاني هو البيانات التي سننقلها أو نكتبها فيه .
fclose
وظيفة الدالة هي غلق الاتصال مع الملف .
file_get_contents
وظيفة الدالة هي جلب محتويات الملف الممرر لها .

الجمعة، 2 ديسمبر 2011

شرح كامل للـ htaccess

كلنا سمعنا او تعاملنا مع ملفات htaccess ولكن ما وصل الينا من معرفة قليل جدا عن فوائد هذه الملفات و التي سوف احرص من خلال هذا المقال توفير اكبر قدر ممكن لأهم فوائد هذه الملفات , التي تتعدى الحماية كما هو معروف لدينا بل تساعدك في توفير ما تشاء في موقعك من خلال كتابة بعض الاوامر البسيطة و بذلك يكون استخدامك لها بشكل صحيح و دراية كاملة .


ماهي هذه الملفات ؟
ان لفظ ملف مبالغ به في وصفها لانها لا تحتوي على امتداد حتى نصفها به بل هي بكل بساطة htaccess , و تكون هذه الملفات مخفية و لا يمكن عرض محتواها مباشرة في الموقع , ولكن تستطيع مشاهدها من خلال لوحة التحكم الخاصة بالموقع عن طريق مدير الملفات او من خلال برامج FTP .

انشاء htaccess !

لكي تنشيء htaccess افتح أي محرر نصوص وليكن المفكرة و انشاء ملف باسم htaccess.txt الان قم بحذف txt. في نهاية اسم الملف وبهذا تم عمل htaccess تحتاج اضافة نقطة في البداية htaccess. ولكن قد يصعب عليك ذلك في جهازك ولكن ارفع الملف الى موقعك وغير اسمة بستخدام FTP او بستخدام لوحة التحكم الخاصة بذلك .

فوائد htaccess وكيف استخدمها ؟

ملفات htaccess يجب أن ترسل الى موقعك ( ترفع ) كنمط آسكي ASCII ، ليس ثنائي BINARY , ايضا قد تحتاج الى ترخيص ( تصريح ) CHMOD 644 و فائدة هذا الترخيص هي جعل الملف صالح للاستخدام في الخادم فقط و لا يمكن عرضة من الزائر او تعديل محتواه وفي الغالب اكثر من يستخدم htaccess يتجاهل هذا الترخيص و قد يشكل خطر على الموقع اذا كان يحتوي على ارقام سرية مشفرة يمكن كسرها .

اذا ما نعرف عن هذه الملفات هي توفير الحماية لمجلدات موقعك , اما بمنع الوصول او تعطيل خواص , ان ملفات htaccess مفيدة جدا في تطبيقات الصفحات و من هذا الفوائد :

1- وثائق صفحات الخطأ .

و هذا دليل متكامل لاهم صفحات الخطأ سوف اختصر قد الامكان

أخطاء تعرض للزوار
كود HTML:
400 Bad Request
401 Authorization Required 
402 Payment Required (not used yet) 
403 Forbidden 
404 Not Found  وهذا الخطأ لعدم توفر الصفحة .
405 Method Not Allowed 
406 Not Acceptable (encoding) 
407 Proxy Authentication Required    
408 Request Timed Out 
409 Conflicting Request 
410 Gone 
411 Content Length Required 
412 Precondition Failed 
413 Request Entity Too Long 
414 Request URI Too Long 
415 Unsupported Media Type
انواع اخطاء السيرفر الخادم .
كود HTML:
500 Internal Server Error 
501 Not Implemented 
502 Bad Gateway    
503 Service Unavailable    
504 Gateway Timeout    
505 HTTP Version Not Supported
واهم هذه الاخطاء التي أخطاء تعرض للزوار وسوف اشرح بعضها :

كود HTML:
400 - Bad Request .. وتعني طلب خاطئ للصفحة 
401 - Authorization Required ... وتعني انه غير مرخص للزائر بعرض الصفحة 
403 - Forbidden .. وتعني انه ممنوع للزائر من دخول الصفحة 
404 - File not found ... وتعني أن الصفحة التي قام الزائر بطلبها غير موجودة
500 - Internal Server Error وتعني أن هناك خطأ في خادم الموقع 
503 - Service Unavailable ... وتعني أن الخدمة غير متوفرة

الان استخدام htaccess في عمل صفحات الخطأ .

اعمل ملف باسم htaccess. وضع بداخلة التالي :

كود PHP:
ErrorDocument [عنوان الخطأ ] [رقم الخطاء
ErrorDocument .. وهي الدالة الخاصة بصفحة بتعيين صفحة الخطأ

مثال
كود PHP:
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 401 
/errors/authreqd.html
ErrorDocument 403 
/errors/forbid.html
ErrorDocument 404 
/errors/notfound.html
ErrorDocument 500 
/errors/serverr.html 
الان اعمل مجلد في موقعك بهذا الشكل

yoursite.com/errors/

يحتوي على هذا الصفحات notfound.html و badrequest.html و authreqd.html و forbid.html و serverr.html و اكتب بها ما يناسبك .


2- حماية المجلدات بكلمة سر .

و يعرف هذا النوع من الحماية بـ basic HTTP authentication

و تحتاج لعمل حماية بستخدام htaccess لعمل ملف اخر باسم .htpasswd لوضع الارقام السرية بداخلة و يفضل تشفيرها و كذلك وضعها في مجلد مجاور الى مجلد www الرئيس في موقعك .

مثال :
اعمل ملف htaccess وضع في داخلة التالي :
كود PHP:
AuthUserFile /usr/local/you/safedir/.htpasswd
AuthGroupFile 
/dev/null 
AuthName 
[أدخل اسم المستخدم و كلمة المرور] AuthType Basic <Limit GET POST> order allow,deny 
allow from all 
require valid-user </limit

مثال اخر

كود PHP:
AuthType Basic

AuthName 
"stop"
AuthUserFile "/home/اسم المستخدم لموقعك /.htpasswds/ "

require valid-user 
ويفضل ان يكون ملف الارقام السرية في مجلد مجاور مجلد www

و يحتوي ملف .htpasswds على الارقام السرية ويكون بهذا الشكل :

Username1:Password1


Username1 مثلا badr و Password1 مشفر md5 ويكون بهذا الشكل

كود PHP:
badr:e1a378b86bc5c0203239b935e2964ba3 
حماية ملف او صور

كود PHP:
<files "file.exe|file.php|file.zip"> AuthUserFile [/path/to/file] AuthType Basic
AuthName 
[Text that prompts the user]
require 
valid-user 
في السطر الاول اسماء الملفات التي ترغب بحمايتها و الثاني أسماء المستخدمين المصرح لهم بالدخول وكلمات المرور الخاصة بهم .. تماما كما فعلنا في حماية المجلد ..
يمكنك أيضا هنا وضع العدد الذي ترغب به من الملفات لكي تحميها .. أو تجعلها فقط لمجموعة محددة...



3- تَمْكين ssl عن طريق htaccess

تعريف السرفر المستضيف للموقع بأوامر SSI التي تصممها لموقعك

SSI هي اختصار لـ Server Side Includes
وهو بروتوكول خاص بتضمين الكود لجميع الصفحات فإذا أردت مثلا وضع كود معين أو لنفرض هيدر لكل الصفحات فليس من الضروري وضعه في جميع صفحات الموقع وإنما من خلال SSI تضعه في صفحة واحدة ثم تضع شفرة SSI في رأس كل ملف ...
في بعض الأحيان عندما تنشئ صفحة أو برنامج تحتوي على أوامر SSI وترفعها إلى موقعك تجد أن الملف لا يعمل .. والسبب يعود في ذلك إلى عدم تعريف هذا الملف للسرفر ..
كل ما عليك فعله هو تعريف الملف الذي يحتوي على أوامر SSI للسرفر عن طريق ملف htaccess. وذلك بواسطة الكود التالي :
كود PHP:
AddType text/html [Extension 1] [Extension 2] AddHandler server-parsed [Extension 1] [Extension 2
حيث أن [Extension 1] و [Extension 2] هي امتداد الملفات التي تريد للسرفر أن يتعرف عليها ليعطيها الصلاحية بتنفيذ أوامر الـ SSI بشكل اتوماتيكي ..

مثال ذلك :

كود PHP:
AddType text/html .dhtml .html
AddHandler server
-parsed .dhtml .html 
حيث الملفات التي تعطي أوامر للسرفر باستقبال أوامر الـ SSI هي الملفات التي تنتهي بالامتداد .. dhtml و html


4- مَنْع زوار دولة معينة او ip معين من الوصول الى موقعك .
حجب الموقع عن الزوار من دولة معينة أو جعله لزوار دولة معينة أو حجبه عن IP محدد

أحيانا يرغب البعض بحجب الموقع عن إحدى الدول .. أو جعله مخصص لدولة معينة أو حتى نطاق معين من الـ IP .. أو قد يسيء شخص ما إلى موقعك ولدى هذا الشخص IP ثابت وتريد منعه من العبث .. ماذا تعمل في مثل هذه الحالات .؟

ملف htaccess. يعينك كثيرا في هذا الأمر ... فإذا أردت حجب الموقع عن IP معين .. فقط ضع في ملف htaccess. الموجود في جذر موقعك الكود التالي :

كود PHP:
deny from 000.000.000.000 
وأما إذا أردت أن تجعله متاحا لـ IP واحد فقط فهنا ستضع الكود المعاكس التالي :

كود PHP:
allow from 000.000.000.000 
ويمكن إضافة العدد الذي ترغب به من الـ IP التي تريد حجبها .. فقط قم بوضع كل IP بسطر ..مثال

كود PHP:
deny from 212.212.212.1
deny from 212.212.212.2
allow from 212.212.212.1
allow from 212.212.212.2 
وفي حال تركت الخانة الأخيرة من رقم الـ IP فارغة فأنت هنا تكون قد منعت نطاق كاملا ( دولة في الغالب ) من تصفح موقعك .. مثال :

كود PHP:
deny from 000.000.000
وكذلك تفعل في حال أردت السماح فقط لنطاق معين في تصفح الموقع ..
كود PHP:
allow from 000.000.000
وأما إذا أردت منع الجميع من تصفح الموقع .. فاستخدم الكود التالي :
كود PHP:
deny from all 


5- مَنْع الروبوتاتِ السيئةِ والموقعِ rippers (المعروف باسم المتصفّحات الغير متَّصلة)

ومثال لذلك مع ان معرفتي قليلة بذلك ومنها

كود HTML:
RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] 
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR] 
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR] 
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR] 
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR] 
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR] 
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR] 
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Zeus 
RewriteRule ^.* - [F,L]
البقية و لتفصيل أكثر


6- تغيير اسم الصفحات الاصلية في موقعك .
في العادة تحتاج الى تغيير اسماء صفحات موقعك لنفرض ان لديك صفحة باسم home .php وتريد تغييرها الى امتداد اخر مثل ar و توجد هذه الصفحة في مجلد باسم jadweb اعمل ملف باسم htaccess. وضع في داخلة التالي :

كود PHP:
RewriteEngine on
RewriteBase 
/jadweb
RewriteRule 
jadweb/home.arhome.php 
تستطيع تكرار ذلك مع تغيير اسم الصفحات التي ترغب بتعديلها .

7- عمل دومين فرعين .
كود PHP:
RewriteEngine on
RewriteCond 
%{HTTP_HOST} ^user.website.com [NC] RewriteRule ^(.*)$ /file.php?id=user [R=301

8- اعادة التوجية .
توجيه صفحة البداية للموقع أو لمجلد على الموقع

عند رفع ملف باسم index.php او index.html او index.htm او home.php او home.htm وغيرها تكون هي الصفحة الرئيسية لموقعك و هذه الاعدادات تكون في Apache الخاص بالخادم و تكون بهذا الشكل :

كود PHP:
DirectoryIndex index.htm index.html index.php 
الدالة DirectoryIndex مهمتها التعريف أن أسماء الصفحات التي تلي الدالة هي صفحات البداية للموقع ..
كيف يقرأ ملف htaccess. هذه الدالة :
يبدأ باسم أول صفحة وهي index.htm فإن وجدها على الموقع فسيعتبرها هي ملف الصفحة الرئيسية ..والا سينتقل للاسم الثاني index.html .. وهكذا ..
الآن لنفرض أن صفحة البداية لموقعك اسمها مختلف .. مثلا .. user.htm فهنا ستضع هذا الاسم بعد الدالة DirectoryIndex مباشرا ... وهنا ستكون هذه الصفحة هي صفحة البداية فعلا ..
فالدالة هي :


كود PHP:
DirectoryIndex [file
ومكان file يكون اسم الصفحة المطلوبة


توجيه الصفحات القديمة في الموقع

لنفرض انه يوجد على الموقع منتدى .. وأعضاؤك يعرفون الرابط المباشر له .. ثم قمت بتغير اسم مجلد المنتدى .. فكيف ستوجه الزوار إلى الرابط الجديد ؟؟
هناك الكثير من الحلول .. منها إضافة تاج في هيدر الصفحة .. ولكن الأفضل أن يتم ذلك عن طريق ملف htaccess. تضعه في نفس المجلد القديم .. ثم تضع فيه الكود التالي

كود PHP:
Redirect /olddirectory/oldfile.html http://yoursite.com/newdirectory/newfile.html 
كل ما عليك هو تغير الوصلات في الكود بما يتوافق مع موقعك ...

/olddirectory/oldfile.html تشير إلى الصفحة القديمة
و newdirectory/newfile.html هي العنوان الجديد الذي سيستخدمه زوار الموقع


9- تسريع الصفحات و عرض الصور .في بعض الاحيان نحتاج تسريع للصفحات و خاصة انه في كل زيارة للصفحة يتم تحميل الصور و الفلاش مباشرة في كل زيارة لذلك تستطيع ان تلغي ذلك بتحديثها مره في الشهر وبهذا تكون افضل و اسرع بكثير ولكن تحتاج بعض اعدادات في السيرفر و ان كان اغلب اصحاب السيرفرات يوفرونها لك و تفعيل عمل Module mod_expires و تستطيع التحكم بالمدة years months weeks days hours minutes seconds
مثال اعمل ملف باسم htaccess. وضع التالي في داخلة :

كود PHP:
ExpiresActive On
ExpiresByType image
/gif "access 1 week" ExpiresByType image/jpg "access 1 week" ExpiresByType image/jpeg "access 1 week" ExpiresByType image/png "access 1 week" ExpiresByType gif "access 1 week" ExpiresByType jpg "access 1 week" 
الان سوف عرض الصور مرة واحدة عند اول زيارة لمدة week اسبوع للصور في الجذر الرئيسي و التي في مجلد image و تم تحديد نوع الملفات بانها صور من نوع gif , jpg , png تستطيع التحكم كما تشاء .

ايضا الفلاش و ملفات css وغيرها

كود PHP:
ExpiresByType css/css "access 1 week" ExpiresByType js/js "access 1 week" ExpiresByType application/x-shockwave-flash "access 1 week" ExpiresByType application/x-javascript  "access 1 week" 
10- التحكم بتشغيل و تعطيل دوال php على موقعك .
احياناً قد تحتاج الى تفعيل او تعطيل بعض الدوال في php مع اني لا انصح بذلك خاصة عند تفعيل بعض الدوال الخطيرة و مثال لتعطيل عمل ملفات php و cgi وغيرها اعمل ملف باسم htaccess. وضع بداخلة :
كود PHP:
<Files "\.(php*|s?p?x?i?html|cgi|asp|php3|php4|pl|htm|sql|tar|gz|zip|rar)$">
  
deny from all </Files> php_flag engine off 
مثال لتفعيل عمل بعض الدوال و منها register_globals و التي تحتاجها البرامج القديمة ويعطلها اصحاب السيرفرات لخطورتها , اعمل ملف باسم htaccess. و ضع بداخلة

كود PHP:
php_flag register_globals on 
الان تم تفعيل دالة register_globals و لتعطيلها

كود PHP:
php_flag register_globals off 
و الطريقة نفسها مع الدوال الاخرى php_flag name on or off


11- حماية صور موقعك و ملفات موقعك من الارتباط و التحميل من مواقع اخرى .
حماية الباندويث في الموقع من الاستهلاك الخارجي

ربما لاحظت في كثير من الأحيان وصلات لصور أو ملفات في موقعك في مواقع أخرى .. وهذا بالطبع قد يتسبب بإيذاء موقعك لأنه سيستهلك الكثير من الباندويث المخصص لك شهريا ..
اذاُ كيف أجعل عرض الصور التي في موقعي لا تتم إلا من خلال الموقع نفسه ..؟ وكذلك تحميل الملفات ..؟

الحل أيضا هنا يكون باستخدام أوامر ملف htaccess.
لحجب الصور عن الظهور في موقع غير موقعك استخدم الكود التالي :
كود PHP:
RewriteEngine on 
RewriteCond 
%{HTTP_REFERER} ^$ [OR]  RewriteCond %{HTTP_REFERER} !^http://site/.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www/.site/.com/.*$ [NC]  RewriteRule .*.([jpg|gif|jpe?g]+)$ - [NC,F
لاحظ أن هذا الكود يحجب كل وصلات الصور الخارجة من موقعك .. ويمنعها من الظهور إلا في موقعك سواء كان :


http://site.com/
أو
http://www.site.com/

فقط عدل الكود السابق وضع مكان site اسم موقعك ..
والدالة الأخيرة في الكود RewriteRule هي لتحديد لاحقات الصور المراد منعها .. ويمكنك الزيادة عليها كما ترغب ..
وأيضا إضافة لاحقات الملفات التي تريد منع تحميلها من موقعك كالملفات المضغوطة zip , rar .. أو اللاحقات التنفيذية .. exe ..
وبذلك لن يتمكن أحد من وضع وصلة في موقعه لبرنامج عندك في الموقع .. وإذا فعل ذلك فلن يعمل معه الرابط .. وعلى الزائر التوجه إلى موقعك والتحميل منه مباشرة ...

إخفاء محتويات المجلد عن الأعضاء أو نوع معين من الملفات فقط في المجلد

إذا كان لديك في الموقع مجلد وتريد إخفاء محتوياته عن الزوار فما هي الحلول المقترحة لذلك ؟؟
لتوضيح الأمر أكثر ..
لنفرض أن لديك مجلد في الموقع تضع فيه ملفات للتحميل بشكل مؤقت أو صور أو ما شابه ذلك .. ولكنك تريد منع الزوار من رؤية محتويات هذا المجلد .. فهناك عدة طرق لذلك منها إعطاء تراخيص 751 او 111 و الافضل 666 لهذا المجلد .. ولكن عن طريق ملف htaccess. تستطيع التحكم بذلك بشكل أكبر بكثير ..
فأنت هنا تستطيع منع الزوار من مشاهدة كل محتويات المجلد .. وذلك بوضع الكود التالي في الملف :



كود PHP:
IndexIgnore 
لاحظ أن ( * ) تعني جميع الملفات الضمنة داخل المجلد ..
وقد تمنعهم فقط من عرض ملفات الصور وهنا تضع الكود التالي :
كود PHP:
IndexIgnore *.gif *.jpg 
ويمكنك إضافة ما تريد من لواحق ملفات الصور والملفات الأخرى كـ zip . rar ..


12- تعريف الخادم بلاحقات الملفات باستخدام Mime Types
في بعض الأحيان قد لا تعمل ملفات MP3 أو الفلاش أو PHP على الخادم .. والسبب في ذلك أن تعريف هذه الملفات غير موجود على الخادم .. فإذا كان الخادم لديك يدعم ملفات MP3 أو PHP ولكن لم تعمل عندك .. فهنا أنت بحاجة إلى تعريف الخادم بها بواسطة Mime Types ...
فعند إضافتها يخبر الخادم المتصفح أن هذا الملف هو ملف MP3 أو ملف فلاش .. وبالتالي يكمل المتصفح المهمة ويقوم بقراءته بالشكل المناسب للملف ..
بالنسبة لـ MIME فهي اختصار لـ Multipurpose Internet Mail Extensions
وهو أحد البروتوكولات المتخصصة بنقل البيانات غير النصية ( كالصور وملفات الفيديو و ملفات الفلاش ) عبر الانترنت سواء كان بالمتصفح أو البريد الالكتروني ( وغالبا يكون للبريد الالكتروني ) ...
ولتعريف ملف فلاش مثلا .. فقط اكتب الكود التالي في ملف htaccess.

كود PHP:
AddType application/x-shockwave-flash swf 
بافتراض أن shockwave هو اسم الملف ..

ولتعريف ملف midi استخدم الكود التالي :

كود PHP:
AddType audio/x-midi mid 
ولتعريف ملفات ريل بلير استخدم الكود التالي :

كود PHP:
AddType audio/x-pn-realaudio .real 
وبنفس المبدأ والطريقة تعمل مع بقية الملفات التي لم تعمل إلا بتعريفها .. ولكن عادة تكون هذه الأشياء معرفة بشكل افتراضي ولا حاجة إلى تعريفها إلا إذا دعت الحاجة إلى ذلك ..

13- تعطيل عمل برامج على الخادم .

كود PHP:
<IfModule mod_security.c>
    
SecFilterScanPOST Off </IfModule
برنامج mod_security موديل يتوفر في السيرفر من اجل الحماية وتجد العديد من اصحاب المواقع يعطلون بعض خواصة ومنها SecFilterScanPOST الذين يستخدمون منتديات vb لحل مشاكل الرد السريع .

هذا وصلى الله على نبينا محمد , إن أخطاءنا فمن الشيطان و انتظر من لديه المزيد أو الزيادة والنقص على ما كتبنا .

اخوكم بدر العنزي .


مصادر المقال

http://www.hostingma...er/htfun.shtml

http://www.javascrip...htaccess.shtml

http://www.phpvillag...nity/index.php


http://httpd.apache....d_rewrite.html

http://httpd.apache....riteguide.html


نسق وترجم هذا الشرح jadweb.com

الاثنين، 14 نوفمبر 2011

Introduction

ASP.NET is a framework for building web sites and web applications. It supports three approaches to build web sites:
1- Web Pages
2- Web Forms
3- MVC

ASP.NET Web Pages and the new Razor syntax provide a fast and lightweight way to combine server code with HTML to create dynamic web content. light 'Razor' syntax for fast development.
 Microsoft WebMatrix is a free development tool that makes Web Pages development easy.
<html>
<body>
     <h1>Hello ASP.NET Razor</h1> 
     <p>The time is @DateTime.Now</p>
</body>
</html>




ASP.NET Web Forms lets you build dynamic websites using a familiar drag-and-drop, event-driven model. A design surface and hundreds of controls and components let you rapidly build sophisticated, powerful UI-driven sites with data access.
Visual Studio Express provides a free development tool that makes Web Forms development easy


ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that enables a clean separation of concerns and that gives you full control over markup for enjoyable, agile development. ASP.NET MVC includes many features that enable fast, TDD-friendly development for creating sophisticated applications that use the latest web standards.
Visual Studio Express provides a free development tool that makes MVC development easy.

ASP.NET is a server side scripting technology that enables scripts (embedded in web pages) to be executed by an Internet server.

How Does ASP.NET Work?

  • When a browser requests an HTML file, the server returns the file
  • When a browser requests an ASP.NET file, IIS passes the request to the ASP.NET engine on the server
  • The ASP.NET engine reads the file, line by line, and executes the scripts in the file
  • Finally, the ASP.NET file is returned to the browser as plain HTML

Internet Information Services (IIS) – formerly called Internet Information Server – is a web server application and set of feature extension modules created by Microsoft for use with Microsoft Windows.

 The .NET Framework is an environment for building, deploying, and running Web applications and Web Services.


The .NET Framework consists of 3 main parts:

1- Programming languages:
  • C# (Pronounced C sharp)
  • Visual Basic (VB .NET)
  • J# (Pronounced J sharp)
2- Server technologies and client technologies:
  • ASP .NET (Active Server Pages)
  • Windows Forms (Windows desktop solutions)
  • Compact Framework (PDA / Mobile solutions)
3- Development environments:
  • Visual Studio .NET (VS .NET)
  • Visual Web Developer


VWD: VISUAL WEB DEVELOPER 2010 EXPRESS

Framework, web server, database, and tools you need to build and run websites and applications on the Microsoft Web Platform.