- - - - - -
CGI :: معلومات - معلومات حول بيئة CGI
الإصدار 0.86
غالبًا ما تحتوي برامج Perl على معلومات مثل اسم البرنامج النصي المرحم بشاق في مصدرها. بشكل عام ، يعد الترميز الثابت أسلوبًا سيئًا لأنه يمكن أن يجعل القراءة من الصعب قراءة البرامج ويقلل من قابلية القراءة وقابلية النقل. CGI :: Info يحاول إزالة ذلك.
علاوة على ذلك ، لمساعدة تصحيح الأخطاء النصية ، يحاول CGI :: Info القيام بأشياء معقولة عندما لا تدير البرنامج في بيئة CGI.
يوفر CGI :: Info أيضًا جدار حماية تطبيق ويب بسيط. بينما يجب ألا تعتمد عليها بمفردها لتوفير الأمان لموقع الويب الخاص بك ، فهي طبقة أخرى وكل مساعدة صغيرة.
use CGI::Info;
my $info = CGI::Info->new();
# ...
يخلق كائن CGI :: معلومات.
يتطلب الأمر أربع وسيطات اختيارية ، وتتوقع ، وتوقع و expload_dir ، والتي تم توثيقها في طريقة params ().
يأخذ syslog معلمة اختيارية ، لتسجيل الرسائل إلى sys :: syslog. يمكن أن يكون منطقية لتمكين/تعطيل التسجيل إلى syslog ، أو إشارة إلى تجزئة ليتم إعطاؤها إلى sys :: syslog :: setlogsock.
يأخذ مسجل المعلمة اختياري ، كائن يستخدم للتحذيرات
يأخذ ذاكرة التخزين المؤقت للمعلمة اختيارية ، كائن يستخدم لتخزين عمليات البحث عن IP. كائن ذاكرة التخزين المؤقت هذا هو كائن يفهم رسائل GET () وضبط () ، مثل كائن CHI.
يأخذ المعلمة اختيارية MAX_UPLOAD ، وهو الحد الأقصى لحجم الملف الذي يمكنك تحميله (-1 لعدم وجود حد) ، الافتراضي هو 512 ميجابايت.
إرجاع اسم البرنامج النصي CGI. هذا مفيد للنشر ، وبالتالي تجنب وضع المسارات المتشددين في أشكال
use CGI::Info;
my $info = CGI::Info->new();
my $script_name = $info->script_name();
# ...
print "<form method="POST" action=$script_name name="my_form">n";
يجد اسم المسار الكامل للنص.
use CGI::Info;
my $info = CGI::Info->new();
my $fullname = $info->script_path();
my @statb = stat($fullname);
if(@statb) {
my $mtime = localtime $statb[9];
print "Last-Modified: $mtimen";
# TODO: only for HTTP/1.1 connections
# $etag = Digest::MD5::md5_hex($html);
printf "ETag: "%x"n", $statb[9];
}
إرجاع دليل نظام الملفات الذي يحتوي على البرنامج النصي.
use CGI::Info;
use File::Spec;
my $info = CGI::Info->new();
print 'HTML files are normally stored in ', $info->script_dir(), '/', File::Spec->updir(), "n";
# or
use lib CGI::Info::script_dir() . '../lib';
إرجاع اسم المضيف لخادم الويب الحالي ، وفقًا لـ CGI. إذا كان لا يمكن تحديد الاسم من خادم الويب ، فسيتم استخدام اسم مضيف النظام كقاء للتراجع. قد لا يكون هذا هو نفس الجهاز الذي يعمل عليه البرنامج النصي CGI ، حيث يقوم بعض مزودي خدمة الإنترنت والمواقع الأخرى بتشغيل البرامج النصية على أجهزة مختلفة من تلك التي تقدم محتوى ثابتًا. هناك فرصة جيدة لأن يكون هذا domain_name () مسبقًا مع "www" أو "CGI".
use CGI::Info;
my $info = CGI::Info->new();
my $host_name = $info->host_name();
my $protocol = $info->protocol();
# ...
print "Thank you for visiting our <A HREF="$protocol://$host_name">Website!</A>";
Domain_Name هو اسم المجال المسيحي لهذا الموقع. عادةً ما تكون مشابهة لـ Host_Name ، ولكنها تفتقر إلى بادئات HTTP: // أو www.
إرجاع عنوان URL للجهاز الذي يعمل على برنامج CGI.
إرجاع إشارة إلى قائمة التجزئة من وسيطات CGI.
تساعدك CGI :: Info على اختبار البرنامج النصي الخاص بك قبل النشر على موقع ويب: إذا لم يكن في بيئة CGI (على سبيل المثال ، يتم اختبار البرنامج النصي من سطر الأوامر) ، يتم استخدام وسيطات سطر أوامر البرنامج (قائمة مفتاح = أزواج القيمة) ، إذا لم يكن هناك أي وسيطات سطر أوامر ، فسيتم قراءة من stdin كقائمة مفتاح = قيمة القيمة. كما يمكنك إعطاء واحد من-tablet ،-البحث-محرك ،-mobile و-robot لتقليد تلك العوامل. على سبيل المثال:
./script.cgi --mobile name=Nigel
إرجاع undef إذا كان لا يمكن تحديد المعلمات أو إذا لم يتم إعطاء أي منها.
إذا تم إعطاء وسيطة مرتين أو أكثر ، فسيتم وضع القيم في سلسلة مفصولة فاصلة.
يمكن تمرير قيمة التجزئة التي تم إرجاعها إلى CGI :: Untaint.
يأخذ أربع معلمات اختيارية: السماح ، توقع ، المسجل و expload_dir. يتم تمرير المعلمات في تجزئة ، أو إشارة إلى تجزئة. هذا الأخير أكثر كفاءة لأنه يضع أقل على المكدس.
السماح هو إشارة إلى قائمة تجزئة معلمات CGI التي ستسمح بها. قيمة كل إدخال هي تعبير منتظم عن القيم المسموح بها للمفتاح. قيمة undef تعني أنه سيتم السماح بأي قيمة. يتم تجاهل الحجج غير الموجودة في القائمة بصمت. هذا مفيد للمساعدة في منع الهجمات على موقعك.
توقع إشارة إلى قائمة الحجج التي تتوقع رؤيتها وتقريرها. يتم تجاهل الحجج غير الموجودة في القائمة بصمت. هذا مفيد للمساعدة في منع الهجمات على موقعك. تم إهمال استخدامه ، والاستخدام السماح بدلاً من ذلك. تتوقع إزالة في نسخة لاحقة.
TOPLOAD_DIR عبارة عن سلسلة تحتوي على دليل يتم تخزين الملفات التي يتم تحميلها.
يأخذ سجل المعلمة اختياري ، كائن يستخدم للتحذيرات والآثار. كائن المسجل هذا هو كائن يفهم رسائل تحذير () و Trace () ، مثل log :: log4perl أو log :: أي كائن.
يمكن أيضًا تمرير وسيطات السماح والتوقع والمسجل و expload_dir إلى المُنشئ.
use CGI::Info;
use CGI::Untaint;
# ...
my $info = CGI::Info->new();
my %params;
if($info->params()) {
%params = %{$info->params()};
}
# ...
foreach(keys %params) {
print "$_ => $params{$_}n";
}
my $u = CGI::Untaint->new(%params);
use CGI::Info;
use CGI::IDS;
# ...
my $info = CGI::Info->new();
my $allowed = {
foo => qr/^d*$/, # foo must be a number, or empty
bar => undef, # bar can be given and be any value
xyzzy => qr/^[ws-]+$/, # must be alphanumeric
# to prevent XSS, and non-empty
# as a sanity check
};
my $paramsref = $info->params(allow => $allowed);
# or
my @expected = ('foo', 'bar');
my $paramsref = $info->params({
expect => @expected,
upload_dir = $info->tmpdir()
});
if(defined($paramsref)) {
my $ids = CGI::IDS->new();
$ids->set_scan_keys(scan_keys => 1);
if($ids->detect_attacks(request => $paramsref) > 0) {
die 'horribly';
}
}
إذا كان الطلب هو طلب XML (أي نوع المحتوى للنشر هو النص/XML) ، فإن CGI :: Info ستضع الطلب في عنصر Params "XML" ، وبالتالي:
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $paramsref = $info->params(); # See BUGS below
my $xml = $$paramsref{'XML'};
# ... parse and process the XML request in $xml
الحصول على معلمة واحدة. يأخذ معلمة سلسلة واحدة اختيارية وهي الوسيطة للعودة. إذا لم يتم إعطاء هذه المعلمة param () ، فهي عبارة عن غلاف إلى params () بدون وسيطات.
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $bar = $info->param('foo');
إذا لم تكن المعلمة المطلوبة في القائمة المسموح بها ، فسيتم طرح رسالة خطأ:
use CGI::Info;
my $allowed = {
foo => qr/d+/
};
my $xyzzy = $info->params(allow => $allowed);
my $bar = $info->param('bar'); # Gives an error message
إرجاع undef إذا لم يتم إعطاء المعلمة المطلوبة
إرجاع منطقية إذا تم عرض موقع الويب على جهاز محمول مثل الهاتف الذكي. جميع الأجهزة اللوحية متنقلة ، ولكن ليس كل الأجهزة المحمولة أقراص.
إرجاع منطقية إذا تم عرض موقع الويب على جهاز لوحي مثل جهاز iPad.
إرجاع المعلمات كسلسلة ، وهي مفيدة لتصحيح الأخطاء أو إنشاء مفاتيح لذاكرة التخزين المؤقت.
إرجاع بروتوكول الاتصال ، على الأرجح "HTTP" أو "HTTPS" ، أو UNDEF إذا كان لا يمكن تحديده.
إرجاع اسم الدليل الذي يمكنك استخدامه لإنشاء ملفات مؤقتة.
من الأفضل أن يكون الروتين "TMPDIR" في ملف :: Spec لأن برامج CGI غالبًا ما تعمل على الخوادم المشتركة. بعد قولي هذا ، سوف يعود TMPDIR إلى ملف :: spec-> tmpdir () إذا لم يتمكن من العثور على مكان أفضل.
إذا تم إعطاء المعلمة "الافتراضية" ، فاستخدم هذا الدليل كخلف بدلاً من القيمة في الملف :: spec-> tmpdir (). لا يتم إجراء أي اختبارات عقلانية ، لذلك إذا أعطيت القيمة الافتراضية لـ "/غير موجودة" ، فسيتم إرجاعها.
يسمح TMPDIR بالإشارة إلى تمرير الخيارات.
use CGI::Info;
my $info = CGI::Info->new();
my $dir = $info->tmpdir(default => '/var/tmp');
$dir = $info->tmpdir({ default => '/var/tmp' });
# or
my $dir = CGI::Info->tmpdir();
إرجاع جذر المستند. من الأفضل أن ينظر إلى المستندات في البيئة لأنه سيعمل أيضًا عندما لا نرفع كنص نصي CGI ، وهو أمر مفيد لتصحيح النصوص.
يمكن تشغيل هذا كطريقة فئة أو كائن.
use CGI::Info;
print CGI::Info->rootdir();
مرادف ROOTDIR () ، للتوافق مع CHI.
مرادف ROOTDIR () ، للتوافق مع Apache.
يحصل ويضع اسم الدليل الذي يمكنك استخدامه لتخزين السجلات.
هل الزائر شخص حقيقي أم روبوت؟
use CGI::Info;
my $info = CGI::Info->new();
unless($info->is_robot()) {
# update site visitor statistics
}
هل الزائر محرك بحث؟
use CGI::Info;
if(CGI::Info->new()->is_search_engine()) {
# display generic information about yourself
} else {
# allow the user to pick and choose something to display
}
إرجاع أحد "الويب" و "البحث" و "روبوت" و "موبايل".
# Code to display a different web page for a browser, search engine and
# smartphone
use Template;
use CGI::Info;
my $info = CGI::Info->new();
my $dir = $info->rootdir() . '/templates/' . $info->browser_type();
my $filename = ref($self);
$filename =~ s/::///g;
$filename = "$dir/$filename.tmpl";
if((!-f $filename) || (!-r $filename)) {
die "Can't open $filename";
}
my $template = Template->new();
$template->process($filename, {}) || die $template->error();
إرجاع قيمة ملف تعريف الارتباط ، أو undef إذا لم يتم إعطاء اسم ، أو ملف تعريف الارتباط المطلوب في الجرة.
تم إهمالها - استخدم ملف تعريف الارتباط () بدلاً من ذلك.
use CGI::Info;
my $i = CGI::Info->new();
my $name = $i->get_cookie(cookie_name => 'name');
print "Your name is $namen";
my $address = $i->get_cookie('address');
print "Your address is $addressn";
إرجاع قيمة ملف تعريف الارتباط ، أو undef إذا لم يتم إعطاء اسم ، أو ملف تعريف الارتباط المطلوب في الجرة. API هي نفسها "param" ، وسوف تحل محل طريقة "get_cookie" في المستقبل.
use CGI::Info;
my $name = CGI::Info->new()->cookie('name');
print "Your name is $namen";
يقوم بتعيين أو إرجاع حالة الكائن ، 200 لـ OK ، وإلا رمز خطأ HTTP
يعيد التحذيرات التي أنشأها الكائن
في بعض الأحيان لا تعرف ما هو المسجل حتى تقوم بتثبيت الفصل. هذه الوظيفة تعمل على إصلاح موقف catch22.
طريقة الفصل لإعادة ضبط الفصل. يجب عليك القيام بذلك في بيئة FCGI قبل إنشاء مثيل ، ولكن في أي مكان آخر.
Nigel Horne ، <njh at bandsman.co.uk>
IS_TABLET () لا يكتشف حاليًا أجهزة الكمبيوتر الخاصة بـ iPad و Windows. لا تختلف سلاسل Android بين الأجهزة اللوحية والهواتف الذكية.
يرجى الإبلاغ عن أي أخطاء أو طلبات ميزة إلى bug-cgi-info at rt.cpan.org ، أو من خلال واجهة الويب على http://rt.cpan.org/noauth/reportbug.html؟queue=cgi-info. سيتم إخطاري ، وبعد ذلك سيتم إخطارك تلقائيًا بالتقدم في الخطأ أثناء إجراء تغييرات.
تقوم Params () بإرجاع المرجع مما يعني أن إجراءات الاتصال يمكن أن تغير التجزئة للروتينات الأخرى. خذ نسخة محلية قبل إجراء تعديلات على الطاولة إذا كنت لا تريد حدوث أشياء غير متوقعة.
http :: browserdetect ، https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
يمكنك العثور على وثائق لهذه الوحدة مع أمر PERLDOC.
perldoc CGI::Info
يمكنك أيضًا البحث عن معلومات على:
metacpan
https://metacpan.org/dist/cgi-info
RT: تعقب طلب CPAN
https://rt.cpan.org/noauth/bugs.html؟dist=cgi-info
مصفوفة اختبار CPAN
http://matrix.cpantesters.org/؟dist=cgi-info
تبعيات اختبار CPAN
http://deps.cpantesters.org/؟module=cgi::Info
حقوق الطبع والنشر 2010-2024 نايجل هورن.
يتم إصدار هذا البرنامج بموجب الترخيص التالي: GPL2