← Index
NYTProf Performance Profile   « line view »
For webmerge/scripts/webmerge.pl
  Run on Mon Oct 7 02:42:42 2013
Reported on Mon Oct 7 03:03:23 2013

Filename/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/RTP/Webmerge/Embedder/PHP.pm
StatementsExecuted 15 statements in 5.71ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11118.1ms21.0msRTP::Webmerge::Embedder::PHP::::BEGIN@20RTP::Webmerge::Embedder::PHP::BEGIN@20
11196µs372µsRTP::Webmerge::Embedder::PHP::::BEGIN@8RTP::Webmerge::Embedder::PHP::BEGIN@8
11162µs243µsRTP::Webmerge::Embedder::PHP::::BEGIN@23RTP::Webmerge::Embedder::PHP::BEGIN@23
11155µs88µsRTP::Webmerge::Embedder::PHP::::BEGIN@10RTP::Webmerge::Embedder::PHP::BEGIN@10
11154µs282µsRTP::Webmerge::Embedder::PHP::::BEGIN@26RTP::Webmerge::Embedder::PHP::BEGIN@26
11153µs143µsRTP::Webmerge::Embedder::PHP::::BEGIN@9RTP::Webmerge::Embedder::PHP::BEGIN@9
11127µs27µsRTP::Webmerge::Embedder::PHP::::BEGIN@15RTP::Webmerge::Embedder::PHP::BEGIN@15
0000s0sRTP::Webmerge::Embedder::PHP::::embedderRTP::Webmerge::Embedder::PHP::embedder
0000s0sRTP::Webmerge::Embedder::PHP::::is_enabledRTP::Webmerge::Embedder::PHP::is_enabled
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1###################################################################################################
2# Copyright 2013 by Marcel Greter
3# This file is part of Webmerge (GPL3)
4###################################################################################################
5package RTP::Webmerge::Embedder::PHP;
6###################################################################################################
7
82170µs2649µs
# spent 372µs (96+276) within RTP::Webmerge::Embedder::PHP::BEGIN@8 which was called: # once (96µs+276µs) by RTP::Webmerge::Embedder::BEGIN@253 at line 8
use Carp;
# spent 372µs making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@8 # spent 276µs making 1 call to Exporter::import
92144µs2233µs
# spent 143µs (53+90) within RTP::Webmerge::Embedder::PHP::BEGIN@9 which was called: # once (53µs+90µs) by RTP::Webmerge::Embedder::BEGIN@253 at line 9
use strict;
# spent 143µs making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@9 # spent 90µs making 1 call to strict::import
102196µs2122µs
# spent 88µs (55+33) within RTP::Webmerge::Embedder::PHP::BEGIN@10 which was called: # once (55µs+33µs) by RTP::Webmerge::Embedder::BEGIN@253 at line 10
use warnings;
# spent 88µs making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@10 # spent 34µs making 1 call to warnings::import
11
12###################################################################################################
13
14# define our version string
151504µs127µs
# spent 27µs within RTP::Webmerge::Embedder::PHP::BEGIN@15 which was called: # once (27µs+0s) by RTP::Webmerge::Embedder::BEGIN@253 at line 15
BEGIN { $RTP::Webmerge::Embedder::PHP::VERSION = "0.70" }
# spent 27µs making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@15
16
17###################################################################################################
18
19# use module to dump php data
202716µs221.3ms
# spent 21.0ms (18.1+2.91) within RTP::Webmerge::Embedder::PHP::BEGIN@20 which was called: # once (18.1ms+2.91ms) by RTP::Webmerge::Embedder::BEGIN@253 at line 20
use Data::Dump::PHP qw(dump_php);
# spent 21.0ms making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@20 # spent 311µs making 1 call to Exporter::import
21
22# load our local modules
232287µs2424µs
# spent 243µs (62+181) within RTP::Webmerge::Embedder::PHP::BEGIN@23 which was called: # once (62µs+181µs) by RTP::Webmerge::Embedder::BEGIN@253 at line 23
use RTP::Webmerge::IO;
# spent 243µs making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@23 # spent 181µs making 1 call to Exporter::import
24
25# end of line in code
2623.66ms2510µs
# spent 282µs (54+228) within RTP::Webmerge::Embedder::PHP::BEGIN@26 which was called: # once (54µs+228µs) by RTP::Webmerge::Embedder::BEGIN@253 at line 26
use constant EOL => "\n";
# spent 282µs making 1 call to RTP::Webmerge::Embedder::PHP::BEGIN@26 # spent 228µs making 1 call to constant::import
27
28###################################################################################################
29
30sub is_enabled ($)
31{
32 return 0 unless (defined $_[0]);
33 return 1 if (lc $_[0] eq 'true');
34 return 1 if (lc $_[0] eq 'enabled');
35 return 0;
36}
37
38sub embedder
39{
40
41 # get variables and collections from parent
42 my ($domains, $contents, $features, $detects, $config) = @_;
43
44 # create switcher code
45 my $switcher = '';
46
47 # process all header detect entries
48 foreach my $detect (@{$detects || [] })
49 {
50
51 # get options for this detection
52 my $target = $detect->{'target'};
53 my $enabled = $detect->{'enabled'};
54 my $disabled = $detect->{'disabled'};
55
56 unless ( defined $detect->{'feature'} )
57 { die 'detect without feature id found'; }
58
59 my $id = $detect->{'feature'};
60 my $feature = $features->{$id};
61
62 unless ($feature || is_enabled($detect->{'optional'}))
63 { die "feature detection <$id> not available"; }
64
65 $switcher .= ' ' . ' // default feature setting' . EOL;
66 $switcher .= ' ' . '$enabled = NULL;' . EOL;
67
68 # process all header detect entries
69 foreach my $test (@{$feature->{'test'} || [] })
70 {
71
72 my $types = lc $test->{'type'};
73
74 foreach my $type (split(/\s*,\s*/, $types))
75 {
76
77 my $var;
78
79 unless (defined $type) { $var = '$_SERVER'; }
80 elsif ($type eq 'env') { $var = '$_ENV'; }
81 elsif ($type eq 'get') { $var = '$_GET'; }
82 elsif ($type eq 'post') { $var = '$_POST'; }
83 elsif ($type eq 'server') { $var = '$_SERVER'; }
84 elsif ($type eq 'cookie') { $var = '$_COOKIE'; }
85 elsif ($type eq 'session') { $var = '$_SESSION'; }
86 elsif ($type eq 'request') { $var = '$_REQUEST'; }
87 else { die "Fatal: unknown test type <$type>"; }
88
89 my ($enabled, $disabled) = ('true', 'false');
90
91 if (exists $test->{'enable'} && scalar(@{$test->{'enable'}}))
92 {
93 $enabled = 'preg_match(\'/^(?:'
94 . join( '|', @{$test->{'enable'}} )
95 . ')$/\', ' . $var . '[\'' . $test->{'key'} . '\'])';
96 }
97
98 if (exists $test->{'disable'} && scalar(@{$test->{'disable'}}))
99 {
100 $disabled = 'preg_match(\'/^(?:'
101 . join( '|', @{$test->{'disable'}} )
102 . ')$/\', ' . $var . '[\'' . $test->{'key'} . '\'])';
103 }
104
105 $switcher .= EOL;
106 $switcher .= ' ' . ' // sniff for useragent' . EOL;
107 $switcher .= ' ' . 'if (array_key_exists(\'' . $test->{'key'} . '\', ' . $var . ')) {' . EOL;
108 $switcher .= ' ' . '$enabled = ( $enabled || ( ' . $enabled . ' )) && ! ' . $disabled . ';' . EOL;
109 $switcher .= ' ' . '}' . EOL;
110
111 }
112
113 }
114
115 $switcher .= EOL;
116 $switcher .= ' ' . ' // change ' . $target . ' if feature is enabled' . EOL;
117 $switcher .= ' ' . 'if ($enabled === TRUE) { $' . $target .' = \'' . $enabled . '\'; }'. EOL if (defined $enabled);
118 $switcher .= ' ' . 'if ($enabled === FALSE) { $' . $target .' = \'' . $disabled . '\'; }'. EOL if (defined $disabled);
119
120 };
121 # EO each detect
122
123 # load the template (readfile will resolve path)
124 my $tmpl = readfile($config->{'tmpl-embed-php'});
125
126 # create data for template
127 my %data =
128 (
129 'switcher' => $switcher,
130 'includes' => dump_php($domains),
131 );
132
133 # insert data into loaded template
134 ${$tmpl} =~ s/%%([a-z]+)%%/$data{$1}/eg;
135
136 # return tmpl pointer
137 return $tmpl;
138
139}
140# EO sub embedder
141
142###################################################################################################
143
144# register this embedder type to parent module
145120µs133µsRTP::Webmerge::Embedder::register('php', \&embedder);
# spent 33µs making 1 call to RTP::Webmerge::Embedder::register
146
147###################################################################################################
148###################################################################################################
149117µs1;