- - - - -
CGI :: Info - Informasi tentang lingkungan CGI
Versi 0.86
Terlalu sering program Perl memiliki informasi seperti nama skrip yang dikodekan ke sumbernya. Secara umum, coding keras adalah gaya yang buruk karena dapat membuat program sulit dibaca dan mengurangi keterbacaan dan portabilitas. CGI :: Info mencoba menghapus itu.
Selain itu, untuk membantu skrip debugging, CGI :: Info mencoba melakukan hal -hal yang masuk akal ketika Anda tidak menjalankan program dalam lingkungan CGI.
CGI :: Info juga menyediakan firewall aplikasi web sederhana. Sementara Anda tidak boleh mengandalkannya sendiri untuk memberikan keamanan ke situs web Anda, itu adalah lapisan lain dan setiap sedikit membantu.
use CGI::Info;
my $info = CGI::Info->new();
# ...
Membuat objek CGI :: Info.
Dibutuhkan empat argumen opsional, Logger, harapkan, dan unggah_dir, yang didokumentasikan dalam metode params ().
Mengambil syslog parameter opsional, untuk mencatat pesan ke sys :: syslog. Ini bisa menjadi boolean untuk mengaktifkan/menonaktifkan logging ke syslog, atau referensi ke hash untuk diberikan kepada sys :: syslog :: setlogsock.
Mengambil logger parameter opsional, objek yang digunakan untuk peringatan
Mengambil cache parameter opsional, objek yang digunakan untuk menangani pencarian IP. Objek cache ini adalah objek yang memahami pesan get () dan set (), seperti objek CHI.
Mengambil parameter opsional max_upload, yang merupakan ukuran file maksimum yang dapat Anda unggah (-1 tanpa batas), standarnya adalah 512MB.
Mengembalikan nama skrip CGI. Ini berguna untuk posting, sehingga menghindari menempatkan jalur hardcoded ke dalam bentuk
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";
Temukan nama jalur lengkap skrip.
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];
}
Mengembalikan direktori sistem file yang berisi skrip.
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';
Kembalikan nama host dari server web saat ini, menurut CGI. Jika nama tidak dapat ditentukan dari server Web, nama host sistem digunakan sebagai mundur. Ini mungkin tidak sama dengan mesin yang dijalankan oleh skrip CGI, beberapa ISP dan situs lain menjalankan skrip pada mesin yang berbeda dari mereka yang memberikan konten statis. Ada peluang bagus bahwa ini akan menjadi domain_name () yang dipersiapkan dengan 'www' atau '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 adalah nama domain pengendali untuk situs web ini. Biasanya itu akan mirip dengan host_name, tetapi akan kekurangan http: // atau awalan www.
Kembalikan URL mesin yang menjalankan skrip CGI.
Mengembalikan referensi ke daftar hash dari argumen CGI.
CGI :: Info membantu Anda untuk menguji skrip Anda sebelum penyebaran di situs web: jika tidak ada dalam lingkungan CGI (misalnya skrip sedang diuji dari baris perintah), argumen baris perintah program (daftar kunci = pasangan nilai) digunakan, jika tidak ada argumen baris perintah maka mereka dibaca dari Stdin sebagai daftar baris kunci = nilai. Anda juga dapat memberikan salah satu-tablet, --search-engine, --mobile dan--robot untuk meniru agen-agen tersebut. Misalnya:
./script.cgi --mobile name=Nigel
Mengembalikan undef jika parameter tidak dapat ditentukan atau jika tidak ada yang diberikan.
Jika suatu argumen diberikan dua kali atau lebih, maka nilainya dimasukkan ke dalam string yang dipisahkan koma.
Nilai hash yang dikembalikan dapat diteruskan ke CGI :: Untain.
Mengambil empat parameter opsional: Izinkan, harapkan, Logger dan unggah_dir. Parameter dilewatkan dalam hash, atau referensi ke hash. Yang terakhir lebih efisien karena kurang menempatkan tumpukan.
Izinkan adalah referensi ke daftar hash parameter CGI yang akan Anda izinkan. Nilai untuk setiap entri adalah ekspresi reguler dari nilai yang diizinkan untuk kunci. Nilai undef berarti nilai apa pun akan diizinkan. Argumen yang tidak dalam daftar diabaikan secara diam -diam. Ini berguna untuk membantu memblokir serangan di situs Anda.
Harapkan adalah referensi ke daftar argumen yang Anda harapkan untuk dilihat dan diteruskan. Argumen yang tidak dalam daftar diabaikan secara diam -diam. Ini berguna untuk membantu memblokir serangan di situs Anda. Penggunaannya sudah usang, penggunaannya malah. Harapkan akan dihapus dalam versi selanjutnya.
Unggah_dir adalah string yang berisi direktori tempat file diunggah akan disimpan.
Mengambil Parameter Logger Opsional, sebuah objek yang digunakan untuk peringatan dan jejak. Objek Logger ini adalah objek yang memahami pesan Warn () dan Trace (), seperti log :: log4perl atau log :: objek apa pun.
Argumen izin, harapkan, logger dan unggah_dir juga dapat diteruskan ke konstruktor.
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';
}
}
Jika permintaan adalah permintaan XML (yaitu jenis konten dari posting adalah teks/xml), cgi :: info akan menempatkan permintaan ke elemen params 'xml', dengan demikian:
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
Dapatkan satu parameter. Mengambil parameter string tunggal opsional yang merupakan argumen untuk dikembalikan. Jika parameter itu tidak diberikan param () adalah pembungkus ke params () tanpa argumen.
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $bar = $info->param('foo');
Jika parameter yang diminta tidak ada dalam daftar yang diizinkan, pesan kesalahan akan dilemparkan:
use CGI::Info;
my $allowed = {
foo => qr/d+/
};
my $xyzzy = $info->params(allow => $allowed);
my $bar = $info->param('bar'); # Gives an error message
Mengembalikan undef jika parameter yang diminta tidak diberikan
Mengembalikan boolean jika situs web dilihat di perangkat seluler seperti ponsel pintar. Semua tablet adalah mobile, tetapi tidak semua perangkat seluler adalah tablet.
Mengembalikan boolean jika situs web dilihat di tablet seperti iPad.
Mengembalikan parameter sebagai string, yang berguna untuk men -debug atau menghasilkan kunci untuk cache.
Mengembalikan protokol koneksi, mungkin 'http' atau 'https', atau undef jika tidak dapat ditentukan.
Mengembalikan nama direktori yang dapat Anda gunakan untuk membuat file sementara.
Rutin lebih disukai daripada "TMPDIR" di File :: Spec karena program CGI sering berjalan di server bersama. Setelah mengatakan itu, TMPDIR akan kembali ke file :: spec-> tmpdir () jika tidak dapat menemukan tempat yang lebih baik.
Jika parameter 'default' diberikan, maka gunakan direktori itu sebagai fall-back daripada nilai dalam file :: spec-> tmpdir (). Tidak ada tes kewarasan yang dilakukan, jadi jika Anda memberikan nilai default '/tidak ada', itu akan dikembalikan.
TMPDIR memungkinkan referensi opsi untuk dilewati.
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();
Mengembalikan root dokumen. Ini lebih disukai daripada melihat Document_root di lingkungan karena juga akan berfungsi ketika kita tidak berjalan sebagai skrip CGI, yang berguna untuk debugging skrip.
Ini dapat dijalankan sebagai metode kelas atau objek.
use CGI::Info;
print CGI::Info->rootdir();
Sinonim dari rootdir (), untuk kompatibilitas dengan chi.
Sinonim dari rootdir (), untuk kompatibilitas dengan Apache.
Mendapat dan menetapkan nama direktori yang dapat Anda gunakan untuk menyimpan log.
Apakah pengunjung orang sungguhan atau robot?
use CGI::Info;
my $info = CGI::Info->new();
unless($info->is_robot()) {
# update site visitor statistics
}
Apakah pengunjung mesin pencari?
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
}
Mengembalikan salah satu dari 'web', 'pencarian', 'robot' dan 'seluler'.
# 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();
Mengembalikan nilai cookie, atau undef jika tidak ada nama yang diberikan, atau cookie yang diminta tidak ada di dalam toples.
Tercerahkan - Gunakan cookie () sebagai gantinya.
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";
Mengembalikan nilai cookie, atau undef jika tidak ada nama yang diberikan, atau cookie yang diminta tidak ada di dalam toples. API sama dengan "param", itu akan menggantikan metode "get_cookie" di masa depan.
use CGI::Info;
my $name = CGI::Info->new()->cookie('name');
print "Your name is $namen";
Menetapkan atau mengembalikan status objek, 200 untuk OK, jika tidak kode kesalahan HTTP
Mengembalikan peringatan yang dihasilkan objek
Terkadang Anda tidak tahu apa penebang itu sampai Anda menanamkan kelas. Fungsi ini memperbaiki situasi Catch22.
Metode kelas untuk mengatur ulang kelas. Anda harus melakukan ini di lingkungan FCGI sebelum instantiating, tetapi di tempat lain.
Nigel Horne, <njh at bandsman.co.uk>
is_tablet () hanya saat ini mendeteksi PC iPad dan Windows. String Android tidak berbeda antara tablet dan ponsel pintar.
Harap laporkan bug atau permintaan fitur apa pun ke bug-cgi-info at rt.cpan.org , atau melalui antarmuka web di http://rt.cpan.org/noauth/reportbug.html?queue=cgi-info. Saya akan diberi tahu, dan kemudian Anda akan secara otomatis diberi tahu tentang kemajuan pada bug Anda saat saya membuat perubahan.
Params () mengembalikan REF yang berarti bahwa rutinitas panggilan dapat mengubah hash untuk rutinitas lain. Ambil salinan lokal sebelum membuat amandemen ke meja jika Anda tidak ingin hal -hal yang tidak terduga terjadi.
Http :: Browserdetect, https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
Anda dapat menemukan dokumentasi untuk modul ini dengan perintah Perldoc.
perldoc CGI::Info
Anda juga dapat mencari informasi di:
Metacpan
https://metacpan.org/dist/cgi-info
RT: Pelacak Permintaan CPAN
https://rt.cpan.org/noauth/bugs.html?dist=cgi-info
Matriks Penguji CPAN
http://matrix.cpantesters.org/?dist=cgi-info
Ketergantungan Penguji CPAN
http://deps.cpantesters.org/?module=cgi::info
Hak Cipta 2010-2024 Nigel Horne.
Program ini dirilis di bawah lisensi berikut: GPL2