هذا هو الأمر eperl الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
ePerl - لغة بيرل 5 المدمجة
VERSION
@الخامس@
موجز
com.eperl [-d الاسم=قيمنا] [-D الاسم=قيمنا] [-B begin_delimiter] [-E end_delimiter] [-i] [-m
طريقة] [-o ملف إلاخراج] [-k] [-I دليل] [-P] [-C] [-L] [-x] [-T] [-w] [-c] [ملف الإدخال]
com.eperl [-r] [-l] [-v] [-V]
الوصف
الملخص
يفسر ePerl ملف ASCII المليء ببيانات برنامج Perl 5 من خلال تقييم
رمز Perl 5 أثناء المرور عبر بيانات ASCII العادية. يمكن أن تعمل بطرق مختلفة: كما
مرشح Unix مستقل أو وحدة Perl 5 متكاملة لمهام إنشاء الملفات العامة
وكلغة برمجة نصية قوية لخادم الويب لبرمجة صفحات HTML الديناميكية.
المُقدّمة
ال com.eperl البرنامج هو جزءا لا يتجزأ من بيرل 5 اللغة مترجم. هذا حقا كامل -
مترجم Perl 5 المميز، ولكن مع بيئة اتصال وملف مصدر مختلفين
تخطيط من مترجم بيرل الافتراضي (عادة ما يكون الملف القابل للتنفيذ بيرل or بيرل 5 على الأكثر
الأنظمة). إنه مصمم لإنشاء ملفات ASCII العامة بفلسفة
تضمين رمز برنامج Perl 5 في بيانات ASCII بدلاً من الطريقة المعتادة حيث يمكنك
تضمين بيانات ASCII في برنامج Perl 5 (عادة عن طريق اقتباس البيانات واستخدامها عبر
عبارات "طباعة"). لذلك، بدلاً من كتابة نص Perl عادي مثل
#!/path/to/Perl
طباعة "foo bar\n";
طباعة "baz quux\n";
for ($i = 0; $i < 10; $i++) { print "foo #${i}\n"; }
طباعة "foo bar\n";
طباعة "baz quux\n";
يمكنك كتابته الآن كبرنامج نصي ePerl:
#!/path/to/eperl
فو بار
باز كووكس
<: for ($i = 0; $i < 10; $i++) { print "foo #${i}\n"; } :>
فو بار
باز كووكس
على الرغم من أن متغير ePerl يحتوي على تخطيط ملف مصدر مختلف، إلا أن الدلالة هي نفسها،
أي أن كلا البرنامجين ينشئان نفس البيانات الناتجة تمامًا على "STDOUT".
نية
ePerl هو ببساطة رمز لاصق يجمع بين قوة البرمجة لمترجم Perl 5
مكتبة بتقنية التضمين الصعبة. إن خدعة التضمين هي هذه: فهي تقوم بتحويل ملف
الملف المصدر إلى برنامج نصي Perl صالح والذي يتم بعد ذلك الحصول عليه تماما تم تقييمه بواسطة واحد فقط
المثيل الداخلي لمترجم Perl 5. ولتحقيق ذلك، يترجم ePerl كل شيء بسهولة
رمز في (نجا) سلاسل بيرل 5 وضعت في طباعة يبني في حين يمر عبر كل شيء
رمز بيرل 5 الأصلي المضمن. كما ترون، ePerl نفسه يفعل الشيء نفسه تمامًا
داخليًا، كان على المبرمج السخيف أن يفعل ذلك عند كتابة نص بسيط لتوليد لغة بيرل.
ونظرًا لطبيعة هذه التعليمات البرمجية الخشنة، فإن ePerl هي حقًا المحاولة الأفضل عندما يكون
تحتوي بيانات ASCII التي تم إنشاؤها على بيانات أكثر ثباتًا مثل البيانات الديناميكية. أو بمعنى آخر: استعمل
ePerl if لصحتك! تريد إلى احتفظ القادم أكثر of القادم ولدت ASCII البيانات in عادي شكل في حين م
البرمجة بعض شعيرات أمور. لا تستخدمه عند إنشاء بيانات ديناميكية خالصة. انها هناك
لا يجلب أي فائدة لرمز البرنامج العادي لبرنامج Perl النصي العادي. إذن، الساكنة
يجب أن يكون الجزء 60٪ على الأقل أو تصبح الميزة عيبًا.
تم تصميم ePerl في الأصل لموقف متطرف: كخادم ويب
لغة البرمجة النصية لإنشاء صفحات HTML أثناء التنقل. هنا لديك الحالة النموذجية
أن 90٪ من البيانات عادةً تتكون من علامات HTML ثابتة خالصة وASCII عادي بينما فقط
أما نسبة الـ 10% المتبقية فهي عبارة عن بنيات برمجية تولد المزيد من التعليمات البرمجية الترميزية بشكل ديناميكي.
هذا هو السبب وراء دعم ePerl أيضًا لوضع وقت تشغيل تصفية Unix القياسي
واجهات CGI/1.1 وNPH-CGI/1.1.
جزءا لا يتجزأ من بيرل بناء الجملة
من الناحية العملية، يمكنك وضع أي بنيات Perl صالحة داخل كتل ePerl المستخدمة في Perl 5
مكتبة مترجم يمكن تقييمها. ولكن هناك بعض النقاط الهامة التي يجب عليك دائما
تذكر ولا تنسى أبدًا عند استخدام ePerl:
1. المحددات . دائما مهملة.
من التافه أن نقول، ولكن ينبغي أن نذكر مرة واحدة على الأقل. محددات كتلة ePerl
يتم التخلص منها دائمًا وهي ضرورية فقط لـ ePerl للتعرف على Perl المضمن
يبني. ولا يتم تمريرها أبدًا إلى الإخراج النهائي.
2. ولدت محتوى لديها إلى go إلى "STDOUT".
على الرغم من أنه يمكنك تحديد الإجراءات الفرعية وحساب بعض البيانات وما إلى ذلك داخل كتل ePerl
يتم توسيع البيانات التي تتم كتابتها بشكل صريح إلى معالج الملفات "STDOUT" فقط. في أخرى
الكلمات: عندما لا تقوم كتلة ePerl بإنشاء محتوى على "STDOUT"، فهي كذلك تمامًا
تم استبداله بسلسلة فارغة في الإخراج النهائي. ولكن عندما يتم إنشاء المحتوى، فهو كذلك
يتم وضعها عند نقطة كتلة ePerl في الإخراج النهائي. عادة ما يتم إنشاء المحتويات
عبر بنيات "الطباعة" الخالصة التي تستخدم ضمنيًا "STDOUT" عندما لا يتم توفير مقبض ملف.
3. ولدت محتوى on "ستدير" دائما يؤدي إلى an خطأ.
عندما يتم إنشاء محتوى على مقبض الملف "STDERR"، يعرض ePerl خطأ
(بما في ذلك محتوى STDERR). استخدم هذا للخروج من الأخطاء أثناء تمرير الأخطاء من
يحظر ePerl بيئة الاتصال.
4. اللقب فاصلة منقوطة.
بسبب النقطة 6 التالية (انظر أدناه) وحقيقة أن معظم المستخدمين لا يفعلون ذلك
ضع في اعتبارك ترجمات كتلة ePerl الداخلية، فإن ePerl ذكي فيما يتعلق بالأخيرة
فاصلة منقوطة. عادةً، يجب أن تنتهي كل كتلة ePerl بالفاصلة المنقوطة الأخيرة
أمر.
<: كمد؛ ...; كمد؛ :>
ولكن عندما تكون الفاصلة المنقوطة الأخيرة مفقودة، تتم إضافتها تلقائيًا بواسطة ePerl، أي
<: كمد؛ ...; كمد:>
هو أيضا بناء الجملة الصحيح. ولكن في بعض الأحيان يكون من الضروري فرض ePerl ليست لإضافة
فاصلة منقوطة. ثم يمكنك إضافة ``"_"'' (شرطة سفلية) كآخر مسافة غير بيضاء
الحرف الموجود في الكتلة لإجبار ePerl على ترك الفاصلة المنقوطة الأخيرة. استخدم هذا ل
يبني مثل ما يلي
<: إذا (...) { _:>
فو
<: } آخر { _:>
شريط
<: } :>
حيث تريد نشر توجيه Perl على المزيد من كتل ePerl.
5. اختزال لـ "الطباعة" - فقط كتل.
لأنه في معظم الأحيان يتم استخدام ePerl فقط لاستكمال المتغيرات، على سبيل المثال
<: طباعة متغير $؛ :>
من المفيد توفير اختصار لهذا النوع من التركيبات. لذا يوفر ePerl ملفًا
الاختصار عبر الحرف "=". عندما يتم ذلك على الفور (غير مسموح بالمسافات البيضاء هنا)
يتبع محدد البداية لكتلة ePerl عبارة "الطباعة" تكون ضمنيًا
تم إنشاؤها، أي أن الكتلة المذكورة أعلاه تعادل
<:=$متغير:>
لاحظ أنه تمت إزالة الفاصلة المنقوطة هنا أيضًا، لأنه تتم إضافتها تلقائيًا
(أنظر فوق).
6. ملصقات خاصة نهاية الخط تجاهل أمر لـ ePerl كتل.
يوفر ePerl أمر تجاهل خاصًا يسمى ``"//"'' والذي يتجاهل جميع البيانات حتى
وتضمين حرف السطر الجديد التالي عند اتباع كتلة النهاية مباشرةً
محدد. عادة عندما تكتب
فو
<: $x = 1; :>
quux
النتيجه هي
فو
quux
لأن ePerl يحفظ دائمًا التعليمات البرمجية حول كتل ePerl، حتى الأسطر الجديدة فقط. لكن عندما
انت تكتب
فو
<: $x = 1; :>//
quux
النتيجه هي
فو
quux
لأن ``"//"'' حذفت كل الأشياء حتى نهاية السطر، بما فيها السطر الجديد.
7. قيود in تفسير.
كل برنامج له قيوده، وكذلك ePerl. إن عائقها هو أن لغة Perl ليست مجرد لغة
لغة غنية، فهي فظيعة وفقا لتحليل بنياتها. ربما أنت
تعرف على عبارة ,,فقط بيرل يمكن تحليل بيرل''. فكر في الأمر. الآثار المترتبة على هذا
هو أن ePerl لا يحاول أبدًا تحليل كتل ePerl نفسها. يعتمد بشكل كامل على
مكتبة مترجم بيرل، لأنها المثيل الوحيد الذي يمكنه القيام بذلك بدونها
أخطاء. لكن المشكلة تكمن في أن ePerl على الأقل عليه أن يتعرف على البداية والنهاية
مواضع كتل ePerl تلك.
هناك طريقتان: إما البحث عن محدد النهاية أثناء التحليل ولكن في
الأقل التعرف على السلاسل المقتبسة (حيث يتم التعامل مع محدد النهاية كبيانات خالصة). أو
يمكنه فقط المضي قدمًا إلى محدد النهاية التالي والقول بأن ذلك لم يحدث
داخل بنيات بيرل. في ePerl 2.0 تم استخدام الثاني، بينما في ePerl 2.1 تم استخدام
تم أخذ أول واحد لأن الكثير من المستخدمين أرادوا ذلك بهذه الطريقة أثناء استخدام نهاية سيئة
محددات مثل ``">"''. ولكن في الواقع قام المؤلف بمراجعة رأيه مرة أخرى و
قررت أخيرا استخدام النهج الثاني الذي تم استخدامه منذ ePerl 2.2 الآن. لأن
في حين أن الأول يسمح بمزيد من المحددات التافهة (والتي في حد ذاتها ليست جيدة حقًا
الفكرة)، فإنها تفشل عند استخدام بنيات مثل ``"m|"[^"]+"|"'' وما إلى ذلك داخل ePerl
كتل. ومن الأسهل الهروب من محددات النهاية داخل بنيات Perl (على سبيل المثال
عبر خطوط مائلة عكسية في سلاسل مقتبسة) من إعادة كتابة بنيات Perl المعقدة لاستخدامها حتى
عدد الاقتباسات.
لذلك، عندما يحدث محدد النهاية الخاص بك أيضًا داخل بنيات Perl، يجب عليك الهروب
ذلك بأي شكل من الأشكال.
8. HTML كيان التحويل.
نظرًا لأن أحد استخدامات ePerl هو بمثابة لغة برمجة نصية من جانب الخادم لصفحات HTML،
هناك مشكلة شائعة مع برامج تحرير HTML. لا يمكنهم معرفة ePerl
الكتل، لذلك عندما تقوم بإدخال تلك الكتل داخل المحررين، فإنها عادة ما تقوم بتشفير بعضها
الأحرف مع كيانات HTML المقابلة. المشكلة هي أن هذا الترميز
يؤدي إلى كود بيرل غير صالح. يوفر ePerl الخيار -C لفك رموز هذه الكيانات
والذي يتم تشغيله تلقائيًا في أوضاع CGI. انظر الوصف أدناه تحت الخيار -C
لمزيد من التفاصيل.
وقت التشغيل وسائط
يمكن أن يعمل ePerl في ثلاثة أوضاع مختلفة لوقت التشغيل:
قائمة بذاتها يونكس تصفية طريقة
هذا هو وضع التشغيل الافتراضي عند استخدامه كأداة إنشاء من غلاف Unix
أو كأداة لمعالجة الدفعات من داخل البرامج أو البرامج النصية الأخرى:
$ eperl [خيارات] - <inputfile>outputfile
$ eperl [خيارات] ملف الإدخال> ملف الإخراج
$ eperl [خيارات] -o ملف الإخراج - < ملف الإدخال
$ eperl [خيارات] -o ملف إدخال ملف الإخراج
كما ترون، يمكن استخدام ePerl في أي مجموعة من ملفات STDIO والملفات الخارجية.
بالإضافة إلى ذلك، هناك نوعان مختلفان مثيران للاهتمام لاستخدام هذا الوضع. أولا يمكنك استخدام
ePerl بالتزامن مع Unix كوخ تقنية سحرية لتحديدها ضمنيًا
المترجم للبرنامج النصي الخاص بك يشبه الطريقة التي اعتدت عليها مع لغة Perl البسيطة
مترجم:
#!/path/to/eperl [خيارات]
فو
<: طباعة "شريط"; :>
quux
ثانيًا، يمكنك استخدام ePerl مع Bourne-Shell هنا وثيقة تقنية
من داخل البرامج النصية الخاصة بك:
#!/ بن / ش
إيبرل [خيارات] - <
فو
<: طباعة "quux"; :>
quux
EOS
إذا كنت بحاجة إلى إنشاء shell أو نصوص برمجية أخرى باستخدام ePerl، أي أنك بحاجة إلى shebang
سطر في إخراج eperl، يجب عليك إضافة سطر shebang يحتوي على سبيل المثال
"#!/usr/bin/eperl" أولاً، لأن eperl سيقوم بتجريد السطر الأول من الإدخال إذا كان
هو خط شيبانج. مثال:
#!/usr/bin/eperl
#!/ بن / ش
صدى <: طباعة "quux"؛ :>
سيؤدي إلى الإخراج التالي:
#!/ بن / ش
echo quux
وبدلاً من ذلك، يمكنك إضافة تعليق المعالج الأولي في السطر الأول، على سبيل المثال مثل هذا:
#ج هذا تعليق للحفاظ على خط الشيبانج في السطر التالي
#!/ بن / ش
صدى <: طباعة "quux"؛ :>
وأخيرًا يمكنك استخدام ePerl مباشرة من داخل برامج Perl عن طريق استخدام ملف
تحليل::ePerl(3) الحزمة (بافتراض أنك قمت بتثبيت هذا أيضًا؛ راجع الملف تثبيت
داخل توزيع ePerl لمزيد من التفاصيل):
#!/path/to/Perl
استخدم Parse::ePerl;
$ البرنامج النصي = <
فو
<: طباعة "quux"; :>
quux
محكمة تكافؤ الفرص
$result = Parse::ePerl::Expand({
البرنامج النصي => البرنامج النصي $،
النتيجة => \$النتيجة،
})؛
طباعة نتيجة $؛
يرى تحليل::ePerl(3) لمزيد من التفاصيل.
CGI / 1.1 متوافقة الواجهة طريقة
هذا هو وضع وقت التشغيل حيث يستخدم ePerl واجهة CGI/1.1 لخادم الويب عندما
تستخدم ك من جانب الخادم البرمجة اللغة على الويب. يدخل ePerl في هذا الوضع
تلقائيًا عند تعيين متغير البيئة CGI/1.1 "PATH_TRANSLATED" وملفه
أو اسم ملف البرامج النصية يفعل ذلك ليست تبدأ بالبادئة NPH ``nph-''. في وقت التشغيل هذا
في الوضع، فإنه يبدأ البيانات الناتجة بـ HTTP/1.0 (افتراضي) أو HTTP/1.1 (إذا تم تحديده
بواسطة خادم الويب) خطوط رأس الاستجابة المتوافقة.
يتعرف ePerl أيضًا على أسطر رأس HTTP في بداية البرامج النصية التي تم إنشاؤها
البيانات، على سبيل المثال يمكنك إنشاء رؤوس HTTP الخاصة بك مثل
<؟ $url = "..";
طباعة "الموقع: $url\n";
طباعة "URI: $url\n\n"; !>
لكن لاحظ أنه بينما يمكنك إخراج رؤوس عشوائية، فإن معظم خوادم الويب تقيد
الرؤوس التي يتم قبولها عبر واجهة CGI/1.1. عادة يمكنك تقديم فقط أ
عدد قليل من رؤوس HTTP المحددة مثل "الموقع" أو "الحالة". إذا كنت بحاجة إلى مزيد من السيطرة عليك
عليك استخدام وضع الواجهة NPH-CGI/1.1.
بالإضافة إلى ذلك، يوفر ePerl ميزة مفيدة في هذا الوضع: يمكنه تبديل UID/GID الخاص به
لمالك البرنامج النصي إذا كان يعمل بنظام Unix SetUID البرنامج (انظر أدناه تحت
الأمان وخيار ``u+s'' الخاص بـ شمود(1)).
هناك طريقتان معروفتان لاستخدام وضع واجهة CGI/1.1 على الويب.
أولاً، يمكنك استخدامه لتحويل ملفات HTML العادية بشكل صريح إلى نصوص CGI/1.1
عبر كوخ التقنية (انظر أعلاه). بالنسبة لخادم الويب Apache، فقط ضع ما يلي
السطر كالسطر الأول من الملف:
#!/path/to/eperl -mc
ثم قم بإعادة تسمية البرنامج النصي من file.html إلى file.cgi وتعيين بت التنفيذ عبر
$ mv file.html file.cgi
$ chmod a+rx file.cgi
تأكد الآن من قبول Apache file.cgi كبرنامج CGI من خلال تمكين دعم CGI
للدليل حيث file.cgi يتواجد. لهذا أضف السطر
خيارات + ExecCGI
إلى . هتكس الملف في هذا الدليل. أخيرًا تأكد من أن Apache حقًا
يتعرف على الامتداد .cgi. ربما يتعين عليك أيضًا إضافة السطر التالي
لديك httpd.conf و ملف:
AddHandler cgi-script .cgi
الآن يمكنك استخدام file.cgi بدلا من file.html والاستفادة مما تحقق
القدرة على البرمجة عن طريق الشعر الخشن file.cgi باستخدام كتل Perl الخاصة بك (أو
سيكون التحويل إلى برنامج نصي CGI عديم الفائدة).
وبدلاً من ذلك (أو حتى بشكل إضافي)، يمكن لمشرف الموقع تمكين دعم ePerl بطريقة أكثر
طريقة سلسة من خلال تكوين ePerl كلغة برمجة نصية ضمنية حقيقية من جانب الخادم.
يتم ذلك عن طريق تعيين نوع MIME لمختلف امتدادات ملفات ePerl الصالحة و
إجبار جميع الملفات التي تحتوي على نوع MIME هذا على المعالجة داخليًا عبر ePerl
مترجم. يمكنك تحقيق ذلك لـ Apache عن طريق إضافة ما يلي إلى ملفك
httpd.conf و ملف
تطبيق AddType/x-httpd-eperl .phtml .eperl .epl
تطبيق الإجراء/x-httpd-eperl /internal/cgi/eperl
ScriptAlias /internal/cgi /path/to/Apache/cgi-bin
وإنشاء نسخة من com.eperl البرنامج الموجود في دليل CGI الخاص بك:
$ cp -p /path/to/eperl /path/to/Apache/cgi-bin/eperl
الآن جميع الملفات ذات الامتدادات .phtml, .eperl و .epl تتم معالجتها تلقائيا
بواسطة مترجم ePerl. ليست هناك حاجة ل كوخ خط أو أي تمكين محليا
وضع CGI.
تلميح أخير: عندما تريد اختبار البرامج النصية الخاصة بك في وضع عدم الاتصال، ما عليك سوى تشغيلها بالقوة
وضع CGI/1.1 من الصدفة الخاصة بك. ولكن تأكد من إعداد كافة متغيرات البيئة الخاصة بك
يعتمد البرنامج النصي على، على سبيل المثال "QUERY_STRING" أو "PATH_INFO".
$ التصدير QUERY_STRING = "key1=value1&key2=value2"
$ eperl -mc file.phtml
NPH-CGI/1.1 متوافقة الواجهة طريقة
يعد وضع وقت التشغيل هذا متغيرًا خاصًا لوضع واجهة CGI/1.1، نظرًا لأن معظم
توفره خوادم الويب (مثل Apache) لأغراض خاصة. إنه شائع مثل غير محلل-
رأس (NPH) CGI/1.1 وعادة ما يستخدمه خادم الويب عندما يكون اسم الملف
برنامج CGI مسبوق بـ ``"nph-"''. في هذا الوضع لا يفعل خادم الويب
المعالجة على رؤوس استجابة HTTP وعدم التخزين المؤقت للبيانات الناتجة، على سبيل المثال
يجب على برنامج CGI في الواقع توفير استجابة HTTP كاملة بنفسه. الميزة
هو أن البرنامج يمكنه إنشاء رؤوس HTTP عشوائية أو كتل متعددة مشفرة بـ MIME
الرسائل.
لذلك، أعلاه قمنا بإعادة تسمية الملف إلى file.cgi مما قيدنا قليلا. متى
نحن بدلا من ذلك إعادة تسمية file.html إلى nph-file.cgi وفرض واجهة NPH-CGI/1.1
الوضع عبر الخيار مين ثم يصبح هذا الملف برنامجًا متوافقًا مع NPH-CGI/1.1 ضمن
أباتشي وخوادم الويب الأخرى. الآن يمكن للبرنامج النصي الخاص بنا تقديم استجابة HTTP الخاصة به (يحتاج إلى
لا، لأنه عند غياب ePerl يوفر خيارًا افتراضيًا له).
#!/path/to/bin/eperl -mn
<؟ طباعة "HTTP/1.0 200 Ok\n";
طباعة "X-MyHeader: Foo Bar Quux\n";
طباعة "نوع المحتوى: نص/html\n\n";
كما تتوقع، يمكن استخدام هذا أيضًا مع لغة البرمجة النصية الضمنية من جانب الخادم
تقنية. يضع
تطبيق AddType/x-httpd-eperl .phtml .eperl .epl
تطبيق الإجراء/x-httpd-eperl /internal/cgi/nph-eperl
ScriptAlias /internal/cgi /path/to/Apache/cgi-bin
الدخول الى حسابك httpd.conf و وقم بتشغيل الأمر
$ cp -p /path/to/eperl /path/to/Apache/cgi-bin/nph-eperl
من قوقعتك. هذه is القادم المفضل طريق of استخدام ePerl as a من جانب الخادم البرمجة
لغة، لان it ويوفر أكثر مرونة.
الأمن
عندما تقوم بتثبيت ePerl كبرنامج متوافق مع CGI/1.1 أو NPH-CGI/1.1 (انظر أعلاه لمعرفة
وصف تفصيلي لهذه الأوضاع) عبر
$ cp -p /path/to/eperl /path/to/Apache/cgi-bin/eperl
$ chown root /path/to/Apache/cgi-bin/eperl
$ chmod u+s /path/to/Apache/cgi-bin/eperl
or
$ cp -p /path/to/eperl /path/to/Apache/cgi-bin/nph-eperl
$ chown root /path/to/Apache/cgi-bin/nph-eperl
$ chmod u+s /path/to/Apache/cgi-bin/nph-eperl
أي مع SetUID قليلا تمكين ل جذر المستخدم، يمكن لـ ePerl التبديل إلى UID/GID الخاص بـ
مخطوطات كاتوا ديلز. على الرغم من أن هذه ميزة مفيدة جدًا لمبرمجي البرامج النصية (لأن one
لم تعد بحاجة إلى جعل الملفات المساعدة قابلة للقراءة عالميًا والملفات المؤقتة عالميًا-
قابل للكتابة!) ، فقد يكون الأمر محفوفًا بالمخاطر بالنسبة لك عندما تشعر بجنون العظمة بشأن أمان SetUID
البرامج. إذا كان الأمر كذلك، فلا تقم بتثبيت ePerl مع بت SetUID الممكّن! هذا هو السبب
يتم تثبيت ePerl افتراضيًا فقط كمرشح Unix مستقل والذي لا يحتاج إلى هذا أبدًا
ميزة.
بالنسبة لأولئك منا الذين قرروا أن هذه الميزة ضرورية بالنسبة لهم، تحاول ePerl حقًا
من الصعب جعلها آمنة. يجب اجتياز الخطوات التالية بنجاح قبل ePerl
في الواقع يقوم بتبديل UID/GID الخاص به (بهذا الترتيب):
1. يجب أن يتطابق البرنامج النصي مع الامتدادات التالية:
.html، .phtml، .ephtml، .epl، .pl، .cgi
2. يجب أن يكون المعرف الفريد (UID) لعملية الاتصال معرفًا فريدًا (UID) صالحًا،
أي أنه يجب العثور عليه في ملف كلمة مرور الأنظمة
3. يجب أن يتطابق المعرف الفريد (UID) لعملية الاتصال مع
المستخدمين التاليين: الجذر، لا أحد
4. يجب أن يكون UID الخاص بمالك البرنامج النصي UID صالحًا،
أي أنه يجب العثور عليه في ملف كلمة مرور الأنظمة
5. يجب أن يكون معرف المجموعة النصية (GID) صالحًا،
أي أنه يجب العثور عليه في ملف مجموعة الأنظمة
6. يجب أن يبقى النص أدناه أو في دليل المنزل الخاص بالمالكين
IF فقط ONE OF أولئك STEPS يفشل، لا UID/GID التبديل يأخذ مكان!. بالإضافة إلى (إذا
تم تعريف "DO_ON_FAILED_STEP" على أنه "STOP_AND_ERROR" في eperl_security.h - ليس افتراضيا
تم تحديده بهذه الطريقة!) يمكن لـ ePerl إيقاف المعالجة تمامًا وعرض صفحة الخطأ الخاصة به. هذا هو
لأصحاب المواقع بجنون العظمة حقا. افتراضيًا عندما تفشل أي خطوة في تبديل UID/GID
تم تعطيله للتو، لكن ePerl يستمر في المعالجة. بدلا من ذلك يمكنك تعطيل بعض
الخطوات في وقت التجميع. يرى eperl_security.h.
أيضا تذكر أن ePerl دائما يقضي على القادم ستارفيل معرف المستخدم/معرف الهوية العالمي، مستقل of القادم
وقت التشغيل طريقة و مستقل if ePerl لديها تحول إلى القادم UID/GID of القادم . في حالة
أمن أسباب ، القادم ستارفيل UID/GID is دائما دمر قبل القادم سيناريو is أعدم.
ePerl قبل المعالج
يوفر ePerl معالجًا مسبقًا خاصًا به CPP في الاسلوب الذي إما تمكين
يدويا عبر الخيار -P أو تلقائيًا عند تشغيل ePerl في وضع (NPH-)CGI. الأتى
يتم دعم التوجيهات:
"#تضمين المسار"
هذا التوجيه عبارة عن توجيه تضمين يمكن استخدامه لتضمين أي أشياء حقًا،
ولكن تم تصميمه بالفعل ليتم استخدامه ليشمل ملفات مصدر ePerl أخرى. ال مسار يمكن
يكون إما مسارًا نسبيًا أو مطلقًا لنظام الملفات المحلي أو مسارًا مؤهلاً بالكامل
عنوان URL لـ HTTP.
في حالة المسار المطلق، يتم الوصول إلى الملف مباشرة على نظام الملفات، بينما
يتم البحث عن المسار النسبي أولاً في دليل العمل الحالي ثم في الكل
الدلائل المحددة عبر الخيار -I. في الحالة الثالثة (HTTP URL) يكون الملف
يسترد عبر طلب HTTP/1.0 على الشبكة. هنا تتم إعادة توجيه HTTP (رموز الاستجابة
301 و302) مدعومة أيضًا.
ملاحظة: بينما يحتفظ ePerl بدقة بأرقام الأسطر عند ترجمة النص الخشن
ePerl إلى تنسيق Perl عادي، لا يستطيع معالج ePerl القيام بذلك (لأنه
قبلالمعالج الذي يتوسع) لهذا التوجيه. لذلك، كلما استخدمت "#include"،
تذكر أن أرقام الأسطر في رسائل الخطأ خاطئة.
لاحظ أيضًا جانبًا أمنيًا مهمًا: لأنه يمكنك تضمين أي أشياء كما هي
مع توفير هذا التوجيه، استخدمه فقط للأشياء التي تقع تحت توجيهك المباشر
يتحكم. لا تستخدم هذا التوجيه لتضمين البيانات الأجنبية، على الأقل ليس من الخارج
خوادم الويب. على سبيل المثال، لنفترض أن لديك صفحة ePerl تحتوي على "#include
http://www.foreigner.com/nice-page.html" وبناء على الطلب التالي من هذه الصفحة الخاص بك
تم فقدان نظام الملفات! لماذا؟ لأن الأجنبي يدرك أنك تضم صفحته
ويستخدمون ePerl ويضعون فقط ``" بسيطة "'' في
صفحة. فكر في الأمر. NEVER استخدام #يشمل لأي أي بيانات التي IS لا UNDER بتحديث يمتلك
مراقبة. بدلاً من ذلك، استخدم دائمًا "#sinclude" لمثل هذه المواقف.
"#تضمين المسار"
هذا هو البديل الآمن لـ "#include" حيث يتم بعد قراءة البيانات منه مسار الكل
تتم إزالة محددات البداية والنهاية لـ ePerl. لذلك فقدت كتل ePerl المحفوفة بالمخاطر معناها
ويتم تحويلها إلى نص عادي. استخدم هذا التوجيه دائمًا عندما تريد التضمين
البيانات التي ليست تحت سيطرتك.
"#if expr"، "#elsif expr"، "#else"، "#endif"
تقوم هذه بتنفيذ بنية "#if-[#else-]#endif" على نمط CPP، ولكن باستخدام دلالات Perl.
في حين أن التوجيهات الأخرى هي أوامر حقيقية للمعالج المسبق والتي يتم تقييمها في
في خطوة المعالجة المسبقة، يتم تحويل هذا البناء في الواقع إلى ePerl منخفض المستوى
بناء، لذلك هو ليست تم تقييمها فعليًا في خطوة المعالجة المسبقة. إنها مجرد أ
اختصار مفيد لما يلي (حيث BD هو محدد البداية المستخدم حاليًا و
ED محدد النهاية):
``#if expr'' -> ``BD if (expr) { _ ED//''
``#elsif expr'' -> ``BD } elsif (expr) { _ ED//''
``#else'' -> ``BD } else { _ ED//''
``#endif'' -> ``BD } _ ED//''
ميزة هذا النهج غير المعتاد هو أن شرط if يمكن أن يكون صالحًا حقًا
تعبير بيرل الذي يوفر أقصى قدر من المرونة. العيب هو أنك
لا يمكن استخدام if-construct لاتخاذ قرارات معالجة مسبقة حقيقية. كما ترون،
كان هدف التصميم هو توفير اختصار لبنيات بيرل الأكثر تعقيدًا.
"#ج"
هذا هو توجيه التعليق الذي يتجاهل جميع البيانات حتى بما في ذلك
حرف السطر الجديد. استخدم هذا للتعليق على أي شيء، حتى المعالج المسبق الآخر
توجيهات.
المقدمة الية عمل سفينة نوح
لتعرف أنك تفهم أن ePerl يوفر وسيلة رائعة لتضمين كود Perl فيه
أي بيانات ASCII. لكن السؤال النموذجي الآن هو: ما هو كود Perl الذي يمكن وضعه فيه؟
كتل ePerl وهل يوفر ePerl أي وظائف خاصة داخل كتل ePerl هذه؟
الإجابات هي: أولا، يمكنك وضع حقا أي وقت رمز Perl في كتل ePerl الموجودة
صالح لمترجم Perl الذي تم ربط ePerl به. ثانيا، ePerl يفعل ذلك ليست تقديم أي
وظائف خاصة داخل كتل ePerl هذه، لأن لغة Perl متطورة بالفعل
كافٍ ؛-)
الآثار المترتبة على ذلك هي: لأنه يمكنك استخدام أي كود Perl صالح يمكنك الاستفادة منه
جميع وحدات Perl 5 المتوفرة، حتى تلك التي تستخدم كائنات مشتركة (لأن ePerl is a
مترجم بيرل، بما في ذلك دعم DynaLoader). لذلك، انتقل إلى لغة Perl الشاملة
شبكة الأرشيف (CPAN) عبر http://www.perl.com/perl/CPAN واحصل على الحزم المفضلة لديك
والتي يمكن أن تجعل حياتك أسهل (سواء من خلال نصوص Perl البسيطة و البرامج النصية ePerl)
واستخدم فقط البنية ``"استخدام الاسم؛"'' في أي كتلة ePerl لاستخدامها من الداخل
ePerl.
عند استخدام ePerl كلغة برمجة نصية من جانب الخادم، أوصيك حقًا بالتثبيت على
الأقل الحزم CGI.pm (الإصدار 2.36 حاليًا)، HTML ستريم (1.40) ليبنت (1.0505) و
libwww- بيرل (5.08). عندما تريد إنشاء صور سريعة أيضًا، أنصحك بذلك
بالإضافة إلى تثبيت على الأقل GD (1.14) و حجم الصورة (2.3). مترجم ePerl في
بالتزامن مع وحدات Perl 5 المتطورة حقًا ستوفر لك الحد الأقصى
المرونة والوظيفة. بعبارة أخرى: المصنع تستخدم of أقصى تطبيقات الكمبيوتر الرافعة المالية in
القادم قراصنة العالم of بيرل as عظيم as ممكن.
OPTIONS
-d الاسم=قيمنا
يضبط متغير Perl في الحزمة "الرئيسية" والتي يمكن الرجوع إليها عبر $name أو أكثر
صراحة عبر $main::name. الامر
eperl -d الاسم = القيمة ..
في الواقع يعادل وجود
في بداية ملف الإدخال. يمكن أن يحدث هذا الخيار أكثر من مرة.
-D الاسم=قيمنا
يعين متغير بيئة يمكن الرجوع إليه عبر $ENV{'variable'} داخل ملف
كتل بيرل. الامر
eperl -D الاسم = القيمة ..
في الواقع يعادل
اسم التصدير = القيمة؛ ايبرل ...
لكن ميزة هذا الخيار هو أنه لا يتلاعب بالمتصلين
بيئة. يمكن أن يحدث هذا الخيار أكثر من مرة.
-B begin_delimiter
يقوم بتعيين سلسلة محددة تبدأ من كتلة Perl. استخدم هذا بالتزامن مع "-E" للضبط
محددات مختلفة عند استخدام ePerl كلغة إنشاء HTML غير متصلة بالإنترنت أثناء الاستمرار
استخدامها كلغة برمجة HTML عبر الإنترنت. المحددات الافتراضية هي " "
لأوضاع CGI و"<:" و":>" لوضع تصفية Unix المستقل.
هناك الكثير من الاختلافات المحتملة التي يمكنك اختيارها: ""<:"" و"":>"" (ملف
محددات وضع التصفية المستقلة الافتراضية لـ ePerl)، "" "" (الافتراضي
محددات وضع واجهة ePerl CGI)، "" "" and "" ""
(نمط لغة البرمجة النصية القياسية HTML)، "" "" and
"" "" (إصدار HTML3.2+ المرتقب والمعروف أيضًا باسم نمط Cougar)، "" "" و "" ""
(نمط يشبه HTML)، "" "" (نمط NeoScript وSSI) أو
حتى "" "" (نمط PHP/FI؛ لكن هذا لم يعد موصى به لأنه يمكن ذلك
يؤدي إلى مشاكل التحليل. يجب استخدامه فقط للتوافق مع الإصدارات السابقة من ePerl القديم
الإصدارات 1.x).
يتم البحث في محددات البداية والنهاية بشكل غير حساس لحالة الأحرف.
-E end_delimiter
يضبط سلسلة محدد نهاية كتلة Perl. انظر أيضا الخيار -B.
-i يفرض البحث عن محددات البداية والنهاية بطريقة غير حساسة لحالة الأحرف. استخدم هذا عندما
أنت تستخدم محددات مثل ``" "..." "" أو غيرها من النصوص النصية.
-m طريقة
وهذا يفرض على ePerl العمل في وضع تشغيل محدد. انظر أعلاه للحصول على تفاصيل
وصف الأوضاع الثلاثة الممكنة: مرشح مستقل (طريقة= "f"، أي الخيار
-مف)، وضع واجهة CGI/1.1 (طريقة= "ج"، أي الخيار -مك) أو واجهة NPH-CGI/1.1
الوضع (طريقة= "ن"، أي الخيار مين).
-o ملف إلاخراج
يفرض الإخراج ليتم الكتابة إليه ملف إلاخراج بدلا من STDOUT. استخدم هذا الخيار عندما
باستخدام ePerl كمرشح. ملف الإخراج ``-'' مجموعات STDOUT كمقبض الإخراج
صراحة. لاحظ أن هذا الملف مرتبط بدليل الملف المصدر عندما يكون ملف
يتم فرض وضع التشغيل على CGI أو NPH-CGI.
-k يفرض على ePerl الاحتفاظ بدليل العمل الحالي من حيث بدأ. لكل
سيتم تغيير ePerl الافتراضي إلى الدليل حيث يبقى الملف المراد تنفيذه. هذا
يكون الخيار مفيدًا إذا كنت تستخدم ePerl كمرشح غير متصل لملف مؤقت.
-x يؤدي هذا إلى تعيين وضع التصحيح حيث يقوم ePerl بإخراج البرنامج النصي Perl الذي تم إنشاؤه داخليًا إلى ملف
وحدة التحكم (/ ديف / tty) قبل تنفيذها. فقط لتصحيح المشاكل مع ملف الإدخال
التحويل.
-I دليل
حدد الدليل الذي يتم استخدامه لتوجيهات "#include" و"#sinclude".
المعالج المسبق لـ ePerl وإضافته إلى @INC أثناء وقت التشغيل. يمكن أن يحدث هذا الخيار أكثر
من مرة.
-P تمكين معالج ePerl الخاص يدويًا (انظر أعلاه). تم تمكين هذا الخيار
لجميع أوضاع CGI تلقائيًا.
-C يؤدي ذلك إلى تمكين تحويل كيان HTML لكتل ePerl. يتم هذا الخيار تلقائيًا
القسري في أوضاع CGI.
المشكلة التي تم حلها هنا هي ما يلي: عند استخدام ePerl كجانب الخادم-
لغة البرمجة النصية لصفحات HTML ويمكنك تحرير ملفات مصدر ePerl عبر HTML
محرر، هناك احتمال كبير أن يقوم محررك بترجمة بعض الأحرف المدخلة إلى HTML
الكيانات، على سبيل المثال ``"<"'' إلى ``"<"''. يؤدي هذا إلى رمز Perl غير صالح بالداخل
كتل ePerl، لأن محرر HTML ليس لديه أي معرفة حول كتل ePerl. باستخدام هذا
الخيار الذي يقوم محلل ePerl تلقائيًا بتحويل جميع الكيانات الموجودة داخل كتل ePerl
العودة إلى الأحرف العادية، لذلك يتلقى مترجم Perl مرة أخرى كتل تعليمات برمجية صالحة.
-L يؤدي ذلك إلى تمكين حرف استمرار السطر ``"\"'' (خط مائل عكسي) خارج كتل ePerl.
باستخدام هذا الخيار، يمكنك نشر بيانات الخط الواحد على عدد أكبر من الخطوط. لكن استخدم بحذر: هذا
يغير الخيار بياناتك (خارج كتل ePerl). عادةً ما يمر ePerl حقًا
جميع البيانات المحيطة كبيانات أولية. مع هذا الخيار تصبح الأسطر الجديدة دلالات جديدة.
-T هذا مكن بيرل تلطيخ طريقة حيث يتخذ مترجم Perl احتياطات خاصة
تسمى فحوصات الشوائب لمنع الفخاخ الواضحة والدقيقة. يرى بيرلسيك(1) للمزيد
تفاصيل.
-w يؤدي ذلك إلى تمكين التحذيرات حيث ينتج مترجم Perl بعض التشخيصات الرائعة. يرى
perldiag(1) لمزيد من التفاصيل.
-c يؤدي هذا إلى إجراء فحص بناء جملة خالص يشبه ``"Perl -c"''.
-r يؤدي هذا إلى طباعة ملف ePerl README الداخلي على وحدة التحكم.
-l يؤدي هذا إلى طباعة ملف ترخيص ePerl الداخلي على وحدة التحكم.
-v يؤدي هذا إلى طباعة معلومات إصدار ePerl إلى وحدة التحكم.
-V نفس الخيار -v ولكنه يعرض بالإضافة إلى ذلك معلمات تجميع Perl.
البيئة
مستعمل المتغيرات
"PATH_TRANSLATED"
يتم استخدام متغير CGI/1.1 لتحديد الملف المصدر عندما يعمل ePerl كملف
برنامج NPH-CGI/1.1 في بيئة خادم الويب.
المقدمة المتغيرات
"SCRIPT_SRC_PATH"
اسم المسار المطلق للبرنامج النصي. استخدم هذا عندما تريد الوصول مباشرة إلى
البرنامج النصي من داخل نفسه، على سبيل المثال، للقيام بـ "stat()" واستدعاءات أخرى.
"SCRIPT_SRC_PATH_DIR"
جزء الدليل من "SCRIPT_SRC_PATH". استخدم هذا عندما تريد الوصول مباشرة
الملفات الأخرى الموجودة في نفس الدليل مثل البرنامج النصي، على سبيل المثال لقراءة التكوين
الملفات، الخ.
"SCRIPT_SRC_PATH_FILE"
جزء اسم الملف من "SCRIPT_SRC_PATH". استخدم هذا عندما تحتاج إلى اسم
البرنامج النصي، على سبيل المثال للمراجع الذاتية النسبية من خلال عناوين URL.
"SCRIPT_SRC_URL"
عنوان URL المؤهل بالكامل للبرنامج النصي. استخدم هذا عندما تحتاج إلى عنوان URL للموقع الذاتي
مرجع.
"SCRIPT_SRC_URL_DIR"
جزء الدليل من "SCRIPT_SRC_URL". استخدم هذا عندما تريد الوصول مباشرة
الملفات الأخرى الموجودة في نفس الدليل مثل البرنامج النصي عبر الويب، على سبيل المثال
الصور المرجعية، الخ.
"SCRIPT_SRC_URL_FILE"
جزء اسم الملف من "SCRIPT_SRC_URL". استخدم هذا عندما تحتاج إلى اسم
البرنامج النصي، على سبيل المثال للمراجع الذاتية النسبية من خلال عناوين URL. في الواقع نفس
"SCRIPT_SRC_PATH_FILE"، ولكن تم توفيره للاتساق.
"SCRIPT_SRC_SIZE"
حجم الملف النصي بالبايت.
"SCRIPT_SRC_MODIFIED"
آخر وقت تعديل للبرنامج النصي، بالثواني منذ 0 ساعة، 0 دقيقة، 0
ثواني، 1 يناير 1970، التوقيت العالمي المنسق.
"SCRIPT_SRC_MODIFIED_CTIME"
آخر وقت تعديل للبرنامج النصي، في ctime(3) التنسيق (``WDAY MMM DD HH:MM:SS
YYYY\n'').
"SCRIPT_SRC_MODIFIED_ISOTIME"
آخر وقت تعديل للبرنامج النصي، بتنسيق ISO (``DD-MM-YYYY HH:MM'').
"SCRIPT_SRC_OWNER"
اسم المستخدم لمالك البرنامج النصي.
"VERSION_interpreter"
سلسلة تعريف ePerl.
"VERSION_LANGUAGE"
سلسلة التعريف الخاصة بمكتبة مترجم Perl المستخدمة.
المقدمة مدمج صور منشأة بالذكاء الاصطناعي
يمكن الوصول إلى الصور المدمجة التالية عبر عنوان URL "/url/to/nph-eperl/"اسم".gif":
"الشعار.gif"
شعار ePerl القياسي من فضلك لا تدرج هذا على موقع الويب الخاص بك.
"بدعم.gif"
إن "مدعوم by ePerl 2.2'' شعار. لا تتردد في استخدام هذا على موقع الويب الخاص بك.
استخدم eperl عبر الإنترنت باستخدام خدمات onworks.net