في ASP ، تعني FSO كائن نظام الملفات ، وهو كائن نظام الملفات.
يشير نظام ملفات الكمبيوتر الذي سنعالجه إلى وجوده على خادم الويب. لذلك ، تأكد من أن لديك الأذونات الصحيحة لهذا الغرض. من الناحية المثالية ، يمكنك إعداد خادم ويب على الجهاز الخاص بك بحيث يمكنك بسهولة إجراء الاختبار. في حالة تشغيل Windows ، جرب PWS Free Web Server المجاني من Microsoft.
كائنات نموذج FSO
كائن محرك الأقراص: كائنات محرك الأقراص للوصول إلى الأقراص أو محركات الشبكة
كائن FileSystemObject: كائنات نظام الملفات للوصول إلى نظام ملفات الكمبيوتر
كائن المجلد: كائن مجلد للوصول إلى جميع خصائص المجلد
كائن TextStream: كائن دفق النص للوصول إلى محتوى الملف
يمكنك استخدام الكائن أعلاه لفعل أي شيء على جهاز الكمبيوتر الخاص بك ، بما في ذلك أنشطة التخريب ؛ --( لذا ، كن حذرًا مع FSO. في بيئة ويب ، من المهم للغاية تخزين المعلومات ، مثل معلومات المستخدم ، وملفات السجل ، إلخ. يوفر طريقة قوية وبسيطة لحفظ البيانات بكفاءة.
يتم تشغيل FSO بواسطة Microsoft وربما لم يعد ASP متاحًا لأنظمة غير Windows.
كيف تستخدم FSO؟
من أجل استخدام FSO لأداء جميع الأعمال ، قم أولاً بإنشاء كائن ، مثل هذا الرمز:
| < ٪ set fso = server.createBject (scripting.filesystemObject) ٪ > |
هذا ينشئ FSO ويعين المتغير FSO. هنا يمكننا استخدام fso.method أو fso.property ، والتي سيتم رؤيتها في المثال التالي.
يقع طراز FSO في ملف DLL وقت تشغيل البرنامج النصي الذي توفره Microsoft ، وهو Scrrun.dll. يمكنك الرجوع إلى ملف DLL هذا في أي تطبيق ، مثل MS Access ، Word. أي أنه لا يقتصر فقط على تطبيقه في ASP.
فيما يلي قائمة موجزة بطرق FSO:
| طريقة FSO | |
| نسخ | انسخ ملف واحد أو أكثر إلى مسار جديد |
| CreateTextFile | قم بإنشاء ملف وإرجاع كائن TextStream |
| DeleteFile | حذف ملف |
| OpentExtFile | افتح الملف وإرجاع كائن TextStream للقراءة أو الإلحاق |
إذا كنت تريد معرفة أساليب وخصائص FSO الكاملة ، فيرجى الرجوع إلى Microsoft MSDN. دعونا نرى بعض الأمثلة أدناه.
لنفترض أنك تريد إنشاء دفتر زوار بسيط حيث يمكنك إنشاء قاعدة بيانات حيث تقوم بتخزين معلومات المستخدم. ومع ذلك ، فإن استخدام FSO لتخزين المعلومات سيوفر لك الوقت والمال إذا كانت قوة قاعدة البيانات غير مطلوبة. وقد يقيد بعض مزودي خدمة الإنترنت تطبيقات قاعدة البيانات على الويب.
لنفترض أنك قمت بجمع بعض معلومات المستخدم في نموذج ، إليك رمز HTML بسيط:
| < HTML > < الجسم > < form action = formhandler.asp method = post > < نوع الإدخال = حجم النص = 10 اسم = اسم المستخدم > < نوع الإدخال = حجم النص = 10 اسم = الصفحة الرئيسية > < نوع الإدخال = حجم النص = 10 اسم = البريد الإلكتروني > < /form > < /الجسم > < /html > |
دعنا نلقي نظرة على الكود الذي يعالج النماذج في formhandler.asp:
| < ٪ احصل على معلومات النموذج strname = request.form (اسم المستخدم) strhomepage = request.form (الصفحة الرئيسية) Stremail = request.form (البريد الإلكتروني) "إنشاء كائن FSO set fso = server.createObject (scripting.filesystemObject) |
حتى الآن ، لا شيء جديد ليس أكثر من الحصول على قيمة حقل النموذج وتعيين القيم للمتغيرات. يظهر جزء مثير للاهتمام أدناه - اكتب ملفًا:
| PATH = C: EMP EST.TXT forreading = 1 ، forwriting = 2 ، forappending = 3 افتح الملف تعيين ملف = fso.opentextFile (المسار ، forappending ، صحيح) اكتب المعلومات إلى الملف file.write (strname) & vbcrlf file.write (strhomepage) & vbcrlf file.write (stremail) & vbcrlf "إغلاق وتنظيف file.close تعيين ملف = لا شيء تعيين fso = لا شيء |
أذكر أن طريقة OpenTextFile تُرجع كائن TextStream ، وهو كائن آخر في نموذج FSO. يكشف كائن TextStream عن طرق لمعالجة محتوى الملف ، مثل الكتابة والقراءة وتخطي الخط. ينتج VBCRLF الثابت VB حرفًا جديدًا.
يتم تعريف TRUE في معلمة الأوامر من OpentExtFile ، والتي تخبر النظام أنه إذا لم يكن الملف موجودًا ، قم بإنشائه. إذا لم يكن الملف موجودًا ولم يتم تعريف المعلمة الحقيقية ، يحدث خطأ.
انتقل الآن إلى الدليل C: EMP ، Open Test.txt ، ويمكنك رؤية المعلومات التالية:
| اسم المستخدم الصفحة الرئيسية للمستخدم البريد الإلكتروني للمستخدم |
بالطبع ، يمكن استبدال هذه الكلمات بأي شيء يتم إدخاله في النموذج.
الآن يتم حفظ بعض معلومات المستخدم في ملف ، مثل قاعدة بيانات بسيطة. لنفترض أن هناك مستخدمًا يريد معرفة جميع الزوار وفصل الأجزاء ذات الصلة عن المعلومات المسجلة لأنه لا يوجد عمود منظم مثل قاعدة البيانات.
نحن نعلم أنه في الملف الذي تم إنشاؤه ، السطر 1 هو اسم المستخدم ، والسطر 2 هو صفحته الرئيسية ، والخط 3 هو عنوان بريدهم الإلكتروني. سيقوم المستخدمون المسجلون أيضًا بتخزين معلوماتهم في هذا الهيكل ، لذلك سيحتوي كل 3 أسطر على معلومات تسجيل مستخدم واحدة. معرفة ذلك ، يمكنك كتابة الكود التالي لعرض المعلومات:
| < ٪ "إنشاء كائن FSO set fso = server.createObject (scripting.filesystemObject) PATH = C: EMP EST.TXT افتح الملف تعيين ملف = fso.opentextFile (المسار ، 1) < - قراءة |
بعد ذلك ، قم بتحليل كل صف وتنسيق البيانات:
| افعل حتى file.atendofstream Response.write (الاسم: & file.readline &) Response.write (الصفحة الرئيسية: & file.readline &) Response.write (البريد الإلكتروني: & file.readline & < p >) حلقة "إغلاق وتنظيف file.close تعيين ملف = لا شيء تعيين fso = لا شيء ٪ > |
هذا مجرد إخراج بسيط للغاية ، ولكن يمكنك تضمين معلومات نموذج DHTML وفقًا للموقف.
إذا تم إنشاء الملف وكتابته بشكل صحيح ، فإن الحلقة الصغيرة أعلاه ستقوم بإدراج معلومات كل شخص في قاعدة البيانات بشكل صحيح. تقرأ طريقة ReadLine سطرًا من المحتوى حتى يتم مواجهة سطر جديد ، وسوف تقرأ مكالمة القراءة اللاحقة السطر التالي. atendofstream هي خاصية لكائن TextStream الذي يخبرنا عندما نواجه ذيل الملف.
افترض أنه لسبب ما ، لا نقوم بتكوين الملف بشكل صحيح ، إذا كان لدى المستخدم سطرين فقط من المعلومات بدلاً من 3 أسطر ، فسيحدث بعض الأخطاء. تستعيد حلقةنا هنا الأسطر الثلاثة التالية في الملف.
| خطأ كائن الخادم "ASP 0177: 800A003E" |
لذلك ، تأكد من إضافة بعض رمز معالجة الأخطاء لمنع إدراج الخطوط غير الضرورية في الملف أو مفقودة معلومات السطر اللازمة.
تمت مناقشة المعرفة الأساسية أعلاه ، ثم تتم مناقشة مسألة الأذونات. يعمل FSO مع حساب المستخدم الذي ينشئه ، وبعبارة أخرى ، إذا وصل شخص ما إلى صفحتك من الإنترنت ، فإن حساب الإنترنت هذا ينشئ FSO. إذا قمت بتسجيل الدخول إلى الكمبيوتر كمسؤول وتسجيل الدخول إلى الصفحة ، فإن حساب المسؤول ينشئ FSO. هذا مهم للغاية لأن حساب معين له أذونات معينة ، ويتطلب FSO بعض الأذونات لتنفيذ الوظائف بالكامل.
حسابات الإنترنت (iuser_machinenename ، اسم machinenenment هو اسم الخادم) بشكل عام فقط أذونات القراءة ، مما يعني أن المستخدم لن يتمكن من الكتابة إلى ملف دفتر الزوار. ومع ذلك ، هناك عدة خيارات لتجاوز هذه المشكلة.
بادئ ذي بدء ، من الصعب للغاية أيضًا ، مما يتطلب من المستخدمين تسجيل الدخول إلى الخادم قبل ملء دفتر الزوار. ومع ذلك ، فإن النقطة الرئيسية لشرف الزوار هي جمع المعلومات من المستخدمين المجهولين ، وإذا طُلب من المستخدم تسجيل الدخول ، فيجب أن تعرف من هم. لذلك ، تخطي هذا الخيار وشاهد الخيار التالي.
الطريقة الثانية هي إنشاء دليل أو ملف ، ولديه مستخدم iuser_machinenename أذونات الكتابة. قد يفتح القيام بذلك بعض نقاط الضعف المحتملة للأمان ، لأن أي شخص يعرف الدليل الصحيح ولديه بعض مهارات الويب يمكنه ملء المحتوى على الخادم. هذا محرمات خطيرة. لذلك يجب أن تؤكد أن معلومات هذه الدلائل القابلة للكتابة يتم حفظها في المكان المخفي ووضع هذه الدلائل خارج بنية دليل الويب قدر الإمكان (على سبيل المثال ، تحت Windows ، هذا دليل غير موجود في دليل InetPub).
قد تفكر: حسنًا ، الآن أعرف كيفية الكتابة إلى الملف. ولكن هل يمكننا أن نفعل المزيد؟ دعنا نحاول إنشاء وظيفة بحث لموقع الويب.
مفتاح بناء محرك البحث هو عودة. بشكل أساسي ، اكتب قطعة رمز للبحث عن الملفات في الدليل ، ثم قم بتنفيذ نفس الرمز على جميع حلقات الدلائل. نظرًا لأنه لا يمكن تحديد عدد الدلائل الفرعية التي يتم إجماليها ، يجب تنفيذ رمز البحث مرارًا وتكرارًا حتى يتم الانتهاء منه. المكالمات العودية جيدة جدا!
دعنا ننشئ صفحة بحث. لنفترض أنه تم إنشاء نموذج HTML ، حيث يدخل المستخدم سلسلة بحث.
| قاتمة objfolder خافت strsearchtext قاتمة objfso StrSearchText = request.form (searchText) < - سلسلة البحث "قم بإنشاء كائنات FSO والمجلد set fso = server.createObject (scripting.filesystemObject) تعيين objfolder = objfso.getfolder (server.mappath (/)) ابحث عن Objfolder |
يقوم الرمز أعلاه بتهيئة المتغيرات ببساطة ، وتنفيذ وظيفة البحث وظيفة البحث ، والتي تم وصفها على النحو التالي:
| البحث عن وظيفة (objfolder) قاتمة objsubfolder 'حلقة من خلال كل ملف في التيار مجلد لكل objfile في objfolder.files اضبط OBJTEXTSTREAM = OBJFSO.OPENTEXTFILE (OBJFILE.PATH ، 1) < - للقراءة "اقرأ محتويات الملف في عامل strfileContents = objtextstream.readall "إذا كانت سلسلة البحث في الملف ، إذن اكتب رابطًا إلى الملف إذا instr (1 ، strfileContents ، StrSearchText ، 1) ثم استجابة. write < a href =/ & objfile.name & _ > & objfile.name & < /a >< br > bolfilefound = صحيح إنهاء إذا objtextstream.close التالي "هذا هو الجزء المتكرر - لكل منهما المجلد الفرعي في هذا الدليل ، قم بتشغيل وظيفة البحث مرة أخرى لكل objsubfolder في objfolder.subfolders ابحث عن ObjSubfolder التالي وظيفة نهاية |
من أجل أن تكون قادرًا على فتح ملف ، يتطلب FSO مسار الملف الفعلي ، وليس مسار الويب. على سبيل المثال ، هو C: inetpubwwroot empiindex.html ، وليس www.enfused.com/temp/index.html أو /temp/index.html. من أجل تحويل الأخير إلى السابق ، استخدم server.mappath (اسم الملف) ، اسم الملف لتمثيل اسم مسار الويب.
سيتم تنفيذ الرمز أعلاه في كل دليل فرعي للمجلد ضمن الدليل الأولي الذي تحدده ، حيث يشير الدليل الأولي إلى دليل جذر الويب/. ثم افتح كل ملف في الدليل لمعرفة ما إذا كان يحتوي على السلسلة المحددة.
لاحظ أنه مع زيادة عدد الملفات والمدافع الفرعي ، سيزداد الوقت الذي يستغرقه عمليات البحث. إذا كنت بحاجة إلى أعمال بحث ثقيلة ، يُنصح بأخذ طرق أخرى ، مثل خادم فهرس خادم فهرس Microsoft.
في هذه المرحلة ، قد يكون لديك فهم جيد لـ FSO. دعونا نلقي نظرة أعمق على ذلك لحل مشاكل أكثر تعقيدًا.
أولاً ، قد ترغب في إعادة تسمية الملف. لتتبع جميع المستندات ، سترغب في إعادة تسميتها لتكون فريدة من نوعها بحيث يمكن تمييزها بسهولة من قبل النظام. لسوء الحظ ، لا تسمح FSO بعمليات تغيير اسم الملف البسيط ، لذلك يتعين علينا تعديلها.
| < ٪ "إنشاء كائن FSO SET FSO = server.createObject (scripting.filesystemObject) PATH = C: EMP EST.TXT strdate = استبدال (Date () ، /،) strdir = c: inetpubwwwrootartictlics & strdate strnewfilename = ساعة (الآن) & _ & minute (الآن) & _ & الثاني (الآن) و .html افتح الملف القديم تعيين ملف = fso.opentextFile (المسار ، 1) < - للقراءة strText = file.readall تعيين ملف = لا شيء تحقق من المجلد و/أو إنشاء مجلد إذا لم يكن fso.folderexists (server.mappath (strdir)) ثم set f = fso.createfolder (server.mappath (strdir)) آخر set f = fso.getfolder (server.mappath (strdir)) إنهاء إذا "إنشاء ملف جديد وكتابة تعيين ملف = fso.createTextFile (F.Path & & StrnewFilename) file.write (strtext) تعيين f = لا شيء file.close تعيين ملف = لا شيء حذف الملف القديم fso.deletefile (path & & rst (filename) & i) ' تنظيف تعيين fso = لا شيء ٪ > |
أصبح عدم وجود قدرات FSO ميزة هنا ، ويمكننا إجراء خطوتين في وقت واحد. أولاً ، افتح الملف وقراءة محتويات الملف. افترض هنا أنك تريد إنشاء مجلد فريد وملف فريد لتخزين المقالة. ومع ذلك ، نظرًا لأن المسار إلى المجلد سيتغير كل يوم ، يجب التحقق أولاً مما إذا كان المجلد موجودًا بالفعل وإذا لم يكن موجودًا ، فقم بإنشائه. يتم ذلك في مقتطف إذا لم يكن fso.folderexists. ثم ، خذ هذا المسار وإنشاء ملف جديد. بعد إنشاء الملف الجديد ، قم بحذف الملف القديم ، الذي يتم من خلال fso.deletefile.
هاتان الخطوتين هي: إعادة تسمية الملف ثم نقله إلى دليل أكثر ملاءمة. لاحظ أنه يمكنك أيضًا القيام بمزيد من العمليات على الملفات هنا ، مثل تحرير المحتوى قبل الكتابة إلى ملف جديد.
لدى FSO بعض نقاط الضعف - على سبيل المثال ، من الصعب التعامل مع الملفات الثنائية ، والتي تتضمن مستندات الكلمات ، والملفات في العديد من تنسيقات الرسوم ، وبعض الملفات الأخرى. ومع ذلك ، لا يزال بإمكانك معالجة هذه الملفات بطرق أخرى - تحريكها ، وحذفها ، وما إلى ذلك. كل ما لا يمكنك فعله هو فتح أو كتابتها.
القيد الآخر هو مشكلة طول الملف. عند قراءة بعض المحتوى وكتابته على الفور ، يتم تخزين جميع المعلومات في الذاكرة - كلما زادت المحتوى ، زادت الذاكرة التي تستهلكها. هذا سوف يتباطأ كل وظيفة. لذلك ، إذا كنت بحاجة إلى تشغيل ملفات كبيرة جدًا ، أو أعداد كبيرة من الملفات الصغيرة ، ففكر في تقسيم الملفات إلى قطع صغيرة ومسح الذاكرة بشكل متكرر. يمكن أن يؤدي دمج التطبيقات في مكونات كائن COM إلى تحسين سرعة البرنامج بشكل كبير.
وبالمثل ، لا يمكنك استخدام FSO لإدارة أذونات وخصائص الملفات والمجلد. غالبًا ما تستخدم هذه الطريقة في CGI و Perl ، ولكن لسوء الحظ ، لا توجد طريقة مرضية لتنفيذها مع FSO.
ماذا يمكنني أن أفعل مع FSO؟
هناك العديد من الميزات الرائعة في FSO ، لكن الكثير من الناس لا يدركون ذلك. غالبًا ما يتم اكتشاف هذه الوظائف بعد أن تشعر أنه من الصعب القيام بشيء ما.
فيما يلي بعض هذه الميزات incomon ولكن رائعة جدًا:
ميزات FSO التي نادراً ما يتم فهمها
تقوم طريقة GetSpecialfolder بإرجاع المسار إلى مجلد Windows معين: دليل نظام Windows ؛ تتطلب طريقة getabsolutepathname إرجاع المسار المطلق إلى المجلد (على غرار server.mappath) عند تخزين البيانات المؤقتة.
على سبيل المثال ، ستعيد fso.getabsolutepathname (المنطقة) نتيجة مماثلة لما يلي: C: MyDocsmyfolder Oxide
إرجاع طريقة GetSextensionName امتداد الجزء الأخير من المسار (على سبيل المثال: fso.getextensionName (c: docs est.txt) ستعيد txt) getBasename و GetParentFolder إرجاع المجلد الأصل في الجزء الأخير من المسار
(على سبيل المثال: ستعيد FSO.GetParentFolder (C: docsmydocs) "المستندات") إلى إرجاع الممتلكات مجموعة من جميع محركات الأقراص المتاحة محليًا لإنشاء واجهة مستخدم تشبه متصفح الموارد.
عند استخدام الوظائف أعلاه ، من الأفضل إنشاء رمز لمعالجة الأخطاء. لأنه إذا لم تكن المعلمات المطلوبة موجودة ، فسيتم إنشاء معلومات مزعجة.
لخص
كما رأينا ، فإن FSO مفيد للغاية ، وما نقدمه هنا هو مجرد غيض من الجبل الجليدي. يمكنك استخدام FSO لبناء تطبيقات قوية وإكمال العديد من المهام.