mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
Add Perl's index.fcgi to samples
This commit is contained in:
102
samples/Perl/index.fcgi
Executable file
102
samples/Perl/index.fcgi
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use CGI::Fast;
|
||||
use XML::Hash::XS;
|
||||
use File::Spec;
|
||||
use FindBin qw($Bin);
|
||||
|
||||
#use lib File::Spec->catdir($Bin, qw(.. lib));
|
||||
|
||||
my $_stop = 0;
|
||||
my $request;
|
||||
$SIG{'PIPE'} = 'IGNORE';
|
||||
|
||||
$SIG{'INT'} = $SIG{'TERM'} = sub {
|
||||
$_stop = 1;
|
||||
|
||||
exit(0) unless defined($request);
|
||||
};
|
||||
|
||||
unless ($ENV{'SERVER_SOFTWARE'}) { # for nginx external fcgi
|
||||
$CGI::Fast::Ext_Request = FCGI::Request(
|
||||
\*STDIN, \*STDOUT, \*STDERR,
|
||||
\%ENV, int($ARGV[0] || 0), 1
|
||||
);
|
||||
}
|
||||
|
||||
my $conv = XML::Hash::XS->new(
|
||||
use_attr => 1,
|
||||
indent => 2,
|
||||
output => \*STDOUT,
|
||||
xml_decl => 1
|
||||
);
|
||||
|
||||
my $tmpl_path = File::Spec->catdir($Bin, qw|.. tmpl|);
|
||||
|
||||
|
||||
my $data = {
|
||||
name => {
|
||||
nick => 'cono'
|
||||
},
|
||||
tree => {
|
||||
example => [
|
||||
{ name => 'Encyclopaedia', parent => 0, id => 1 },
|
||||
{ name => 'Science', parent => 1, id => 2 },
|
||||
{ name => 'Culture', parent => 1, id => 3 },
|
||||
{ name => 'Art', parent => 3, id => 4 },
|
||||
{ name => 'Craft', parent => 3, id => 5 }
|
||||
],
|
||||
},
|
||||
third_party => {
|
||||
results => [
|
||||
{ artist_name => 'Madonna', venue => 'Kitchen', event => 'cooking', date => '2013-04-21' },
|
||||
{ artist_name => 'cono', venue => 'Provectus-IT', event => 'presentation', date => '2013-04-20' },
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
while (1) {
|
||||
eval {
|
||||
$request = CGI::Fast->new();
|
||||
unless ($request) {
|
||||
$_stop = 1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
my ($tmpl, $output) = ('nick');
|
||||
if ($ENV{'REQUEST_URI'} =~ m|/([a-zA-Z0-9_]+)|) {
|
||||
$tmpl = $1;
|
||||
$output = $data->{$tmpl} if exists $data->{$tmpl};
|
||||
}
|
||||
|
||||
die "Bad request" unless $output;
|
||||
|
||||
if (-e File::Spec->catfile($tmpl_path, "$tmpl.xslt")) {
|
||||
print "X-Xslt-Stylesheet: /$tmpl.xslt\r\n";
|
||||
}
|
||||
|
||||
print qq(Content-type:application/xml;charset=utf-8\r\n\r\n);
|
||||
$conv->hash2xml($output);
|
||||
|
||||
};
|
||||
|
||||
if ($@) {
|
||||
print qq(Content-type:text/html;charset=utf-8\r\n\r\nError: $@);
|
||||
}
|
||||
|
||||
$request = undef;
|
||||
last if $_stop;
|
||||
|
||||
if (-M $0 < 0) {
|
||||
unless ($ENV{'SERVER_SOFTWARE'}) { # for nginx external fcgi
|
||||
system("$0 ". int($ARGV[0] || 0).' &');
|
||||
}
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
||||
Reference in New Issue
Block a user