( ! ) Notice: Undefined property: Flash::$tmp in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 66
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 51
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 62
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 51
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 62
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined property: Flash::$codeEmbed in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 92
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41
200.09633556824Flash->setValue( ).../Flash.php:63

( ! ) Notice: Undefined property: Flash::$codeObject in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 93
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41
200.09633556824Flash->setValue( ).../Flash.php:63

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 51
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 62
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 51
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 62
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 51
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 62
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined variable: gotflashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 51
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.09253555752Flash->parseInput( ).../Flash.php:41

( ! ) Notice: Undefined property: Flash::$flashvars in /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php on line 108
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.01791844424MediaWiki->performRequestForTitle( ).../index.php:117
30.01871897760MediaWiki->performAction( ).../Wiki.php:70
40.01881899144Article->view( ).../Wiki.php:493
50.04173059912Article->showDiffPage( ).../Article.php:790
60.04213080368DifferenceEngine->showDiffPage( ).../Article.php:966
70.08443493112DifferenceEngine->renderNewRevision( ).../DifferenceInterface.php:381
80.08533501344OutputPage->addWikiTextTidy( ).../DifferenceInterface.php:448
90.08533501472OutputPage->addWikiTextTitleTidy( ).../OutputPage.php:1004
100.08533501656OutputPage->addWikiTextTitle( ).../OutputPage.php:993
110.08563501896Parser->parse( ).../OutputPage.php:1026
120.08593537944Parser->internalParse( ).../Parser.php:330
130.08593545280Parser->replaceVariables( ).../Parser.php:930
140.09193547056PPFrame_DOM->expand( ).../Parser.php:2728
150.09223553920Parser->extensionSubstitution( ).../Preprocessor_DOM.php:1029
160.09253555320call_user_func_array:{/var/www/tera-wurfl.com/web/wiki/includes/parser/Parser.php:3333} ( ).../Parser.php:3333
170.09253555408renderFlash( ).../Parser.php:3333
180.09253555680Flash->Flash( ).../Flash.php:129
190.10163558240Flash->genCode( ).../Flash.php:42

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php:66) in /var/www/tera-wurfl.com/web/wiki/includes/WebResponse.php on line 16
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.15443906728MediaWiki->finalCleanup( ).../index.php:118
30.15453907816OutputPage->output( ).../Wiki.php:376
40.15493929360WebResponse->header( ).../OutputPage.php:1597
50.15493929456header ( ).../WebResponse.php:16

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php:66) in /var/www/tera-wurfl.com/web/wiki/includes/WebResponse.php on line 16
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.15443906728MediaWiki->finalCleanup( ).../index.php:118
30.15453907816OutputPage->output( ).../Wiki.php:376
40.15523929344WebResponse->header( ).../OutputPage.php:1598
50.15523929440header ( ).../WebResponse.php:16
Main Page - Tera-WURFL

Main Page

From Tera-WURFL

(Difference between revisions)
Jump to: navigation, search
Line 2: Line 2:
__TOC__
__TOC__
__FORCETOC__
__FORCETOC__
-
== About Tera-WURFL ==
+
== What is Tera-WURFL ==
Tera-WURFL is a PHP & MySQL based library that uses the Wireless Universal Resource File (WURFL). The [http://wurfl.sourceforge.net WURFL website] nicely defines the WURFL as follows:
Tera-WURFL is a PHP & MySQL based library that uses the Wireless Universal Resource File (WURFL). The [http://wurfl.sourceforge.net WURFL website] nicely defines the WURFL as follows:
<blockquote style="background-color: rgb(255, 225, 227); border: 2px solid rgb(255, 202, 206); margin: 5px; padding: 5px; width: 500px;">
<blockquote style="background-color: rgb(255, 225, 227); border: 2px solid rgb(255, 202, 206); margin: 5px; padding: 5px; width: 500px;">
Line 12: Line 12:
The author of Tera-WURFL is [http://www.teratechnologies.net/stevekamerman Steve Kamerman], a professional PHP Programmer, MySQL DBA, Flash/Flex Actionscript Developer, Linux Administrator, IT Manager and part-time American Soldier. This project was originally sponsored by [http://www.teratechnologies.net Tera Technologies] and was developed as an internal project used for delivering content to customers of the mobile ringtone and image creation site [http://www.tera-tones.com Tera-Tones.com].
The author of Tera-WURFL is [http://www.teratechnologies.net/stevekamerman Steve Kamerman], a professional PHP Programmer, MySQL DBA, Flash/Flex Actionscript Developer, Linux Administrator, IT Manager and part-time American Soldier. This project was originally sponsored by [http://www.teratechnologies.net Tera Technologies] and was developed as an internal project used for delivering content to customers of the mobile ringtone and image creation site [http://www.tera-tones.com Tera-Tones.com].
-
== WALL4PHP Support ==
+
==How does it work?==
-
With the release of [http://wall.laacz.lv/ WALL4PHP 1.1 (the Wireless Abstraction Library)], Kaspars Foigts has been nice enough to add support for Tera-WURFL. As of Tera-WURFL 2.0, a modified version of WALL4PHP that is designed to work with Tera-WURFL is available from the [[Downloads]] page.
+
When a web browser (mobile or non-mobile) visits your site, it sends a '''User Agent''' along with the request for your page.  The user agent contains information about the type of device and browser that is being used; unfortunately, this information is very limited and often times is not representative of the actual device.  The [http://wurfl.sourceforge.net WURFL Project] collects these user agents and puts them into an XML file, commonly referred to as the WURFL File.  This file also contains detailed information about each device i.e. the screen resolution, audio playback capabilities, streaming video capabilities, J2ME [[Support|support]] and so on.  This data is constantly updated by WURFL contributors from around the world via the [http://www.wurflpro.com WURFL Device Database].  Tera-WURFL takes the data from this WURFL file and puts it into a MySQL database (MSSQL [[Support|support]] is experimental) for faster access, and determines which device is the most similar to the one that's requesting your content.  The library the returns the capabilities associated with that device to your scripts via a PHP Associative Array.<br>
 +
Here's the logical flow of a typical request:
 +
===Device Requests a Page===
 +
Someone requests one of your pages from their mobile device.  Their User Agent is passed to the Tera-WURFL library for evaluation.
 +
===Request is Evaluated===
 +
Tera-WURFL takes the requestor's user agent and puts it through a filter to determine which UserAgentMatcher to use on it.  Each UserAgentMatcher is specifically designed to best match the device from a group of similar devices using Reduction in String and/or the [http://en.wikipedia.org/wiki/Levenshtein_distance Levenshtein Distance algorithm].
 +
===Capabilities Array is Built===
 +
Each device in the WURFL file and WURFL database ''falls back'' onto another device, for example the iPhone 3GS has only a handful of capabilities, then it falls back onto the iPhone 3G, which adds to those capabilities and falls back onto the original iPhone, then onto a generic device that contains the default capabilities.  Through this method of inheritance, the device entries remain very small in size.  In our example, once the User Agent has been matched, the capabilities from this device are stored into the capabilities array, then the next device in its fallback tree (its parent device) is looked up, and its capabilities are add, all the way up to the most generic device.
 +
===Results are Cached===
 +
The capabilities array is now cached with the User Agent so the next time the device visits the site it will be detected extremely quickly.
 +
===Capabilities are Available to the Server===
 +
The process is finished and the capabilities are now available for use in your scripts.  One common use, for example, is to redirect mobile devices to a mobile version of the site:
 +
<pre><?php
 +
require_once('./TeraWurfl.php');
 +
$wurflObj = new TeraWurfl();
 +
$wurflObj->getDeviceCapabilitiesFromAgent();
 +
 
 +
// see if this client is on a wireless device
 +
if($wurflObj->getDeviceCapability("is_wireless_device")){
 +
header("Location: http://yourwebsite.mobi/");
 +
}
 +
?></pre>
 +
 
 +
== WALL4PHP [[Support|Support]] ==
 +
With the release of [http://wall.laacz.lv/ WALL4PHP 1.1 (the Wireless Abstraction Library)], Kaspars Foigts has been nice enough to add [[Support|support]] for Tera-WURFL. As of Tera-WURFL 2.0, a modified version of WALL4PHP that is designed to work with Tera-WURFL is available from the [[Downloads]] page.
== Online Demo ==
== Online Demo ==
Line 20: Line 44:
'''Demo #1''': [http://www.tera-wurfl.com/tera_wurfl_test/tera_wurfl_test.php Tera-WURFL identifying over 800 devices in real time]
'''Demo #1''': [http://www.tera-wurfl.com/tera_wurfl_test/tera_wurfl_test.php Tera-WURFL identifying over 800 devices in real time]
-
This demo churns through my database of unique user agents / http headers and attempts to identify every device. As of version 1.5.0, Tera-WURFL now uses a caching system to increase performance and decrease server load. As of version 2.0, Tera-WURFL uses many User Agent Matchers to apply specifiy detection methods to specific brands of devices. This greatly increases detection accuracy. Version 2.0 also introduces the [http://en.wikipedia.org/wiki/Levenshtein_distance Levenshtein Distance algorithim] to better detect ambiguous user agents.
+
This demo churns through my database of unique user agents / http headers and attempts to identify every device. As of version 1.5.0, Tera-WURFL now uses a caching system to increase performance and decrease server load. As of version 2.0, Tera-WURFL uses many User Agent Matchers to apply specifiy detection methods to specific brands of devices. This greatly increases detection accuracy. Version 2.0 also introduces the [http://en.wikipedia.org/wiki/Levenshtein_distance Levenshtein Distance algorithm] to better detect ambiguous user agents.
'''Demo #2''': [http://www.tera-wurfl.com/Tera-Wurfl/admin/ Tera-WURFL Web Administration]
'''Demo #2''': [http://www.tera-wurfl.com/Tera-Wurfl/admin/ Tera-WURFL Web Administration]
-
This is the web administration page that comes with Tera-WURFL. It allows you to update the WURFL database over the Internet (or locally), update your database with your custom patch file and test your current configuration with manually entered user agents.
+
This is the [[Web_Administration_Page|web administration page]] that comes with Tera-WURFL. It allows you to update the WURFL database over the Internet (or locally), update your database with your custom patch file and test your current configuration with manually entered user agents.
'''Demo #3''': [http://www.tera-wurfl.com/Tera-Wurfl/check_wurfl.php Tera-WURFL Manual Test Script]
'''Demo #3''': [http://www.tera-wurfl.com/Tera-Wurfl/check_wurfl.php Tera-WURFL Manual Test Script]
Line 30: Line 54:
This script is very similar to the "check_wurfl.php" script used in the standard PHP Tools library.
This script is very similar to the "check_wurfl.php" script used in the standard PHP Tools library.
-
== Download, Installation, Support ==
+
== Download, [[Installation|Installation]], [[Support|Support]] ==
The following pages will guide you through downloading, installing, configuring and extending Tera-WURFL:
The following pages will guide you through downloading, installing, configuring and extending Tera-WURFL:
<ul><li>'''[[Downloads]]'''</li>
<ul><li>'''[[Downloads]]'''</li>
<li>'''[[Installation]]'''</li>
<li>'''[[Installation]]'''</li>
<li>'''[[Support]]'''</li>
<li>'''[[Support]]'''</li>

Revision as of 16:46, 3 February 2010

Contents


What is Tera-WURFL

Tera-WURFL is a PHP & MySQL based library that uses the Wireless Universal Resource File (WURFL). The WURFL website nicely defines the WURFL as follows:

The WURFL is an "ambitious" configuration file that contains info about all known Wireless devices on earth. Of course, new devices are created and released at all times. While this configuration file is bound to be out of date one day after each update, chances are that the WURFL lists all of the WAP devices you can purchase in the nearest shops.

Tera-WURFL takes some functionality from the original PHP Tools Library by Andrea Trasatti and a prerelease version of the Java WURFL Evolution by Luca Passani. It serves as a drop in replacement for the original PHP Tools with only minor changes to your existing code. Since Tera-WURFL uses a database backend (MySQL4, MySQL5, MSSQL is experimental), the real world performance increase over the existing PHP Tools implementation is extremely high; normally between 5x and 10x faster!

The author of Tera-WURFL is Steve Kamerman, a professional PHP Programmer, MySQL DBA, Flash/Flex Actionscript Developer, Linux Administrator, IT Manager and part-time American Soldier. This project was originally sponsored by Tera Technologies and was developed as an internal project used for delivering content to customers of the mobile ringtone and image creation site Tera-Tones.com.

How does it work?

When a web browser (mobile or non-mobile) visits your site, it sends a User Agent along with the request for your page. The user agent contains information about the type of device and browser that is being used; unfortunately, this information is very limited and often times is not representative of the actual device. The WURFL Project collects these user agents and puts them into an XML file, commonly referred to as the WURFL File. This file also contains detailed information about each device i.e. the screen resolution, audio playback capabilities, streaming video capabilities, J2ME support and so on. This data is constantly updated by WURFL contributors from around the world via the WURFL Device Database. Tera-WURFL takes the data from this WURFL file and puts it into a MySQL database (MSSQL support is experimental) for faster access, and determines which device is the most similar to the one that's requesting your content. The library the returns the capabilities associated with that device to your scripts via a PHP Associative Array.
Here's the logical flow of a typical request:

Device Requests a Page

Someone requests one of your pages from their mobile device. Their User Agent is passed to the Tera-WURFL library for evaluation.

Request is Evaluated

Tera-WURFL takes the requestor's user agent and puts it through a filter to determine which UserAgentMatcher to use on it. Each UserAgentMatcher is specifically designed to best match the device from a group of similar devices using Reduction in String and/or the Levenshtein Distance algorithm.

Capabilities Array is Built

Each device in the WURFL file and WURFL database falls back onto another device, for example the iPhone 3GS has only a handful of capabilities, then it falls back onto the iPhone 3G, which adds to those capabilities and falls back onto the original iPhone, then onto a generic device that contains the default capabilities. Through this method of inheritance, the device entries remain very small in size. In our example, once the User Agent has been matched, the capabilities from this device are stored into the capabilities array, then the next device in its fallback tree (its parent device) is looked up, and its capabilities are add, all the way up to the most generic device.

Results are Cached

The capabilities array is now cached with the User Agent so the next time the device visits the site it will be detected extremely quickly.

Capabilities are Available to the Server

The process is finished and the capabilities are now available for use in your scripts. One common use, for example, is to redirect mobile devices to a mobile version of the site:

<?php
require_once('./TeraWurfl.php');
$wurflObj = new TeraWurfl();
$wurflObj->getDeviceCapabilitiesFromAgent();

// see if this client is on a wireless device
if($wurflObj->getDeviceCapability("is_wireless_device")){
	header("Location: http://yourwebsite.mobi/");
}
?>

WALL4PHP Support

With the release of WALL4PHP 1.1 (the Wireless Abstraction Library), Kaspars Foigts has been nice enough to add support for Tera-WURFL. As of Tera-WURFL 2.0, a modified version of WALL4PHP that is designed to work with Tera-WURFL is available from the Downloads page.

Online Demo

Check out Tera-WURFL in action before you even install it! I've put a couple demos up for you, check 'em out:

Demo #1: Tera-WURFL identifying over 800 devices in real time

This demo churns through my database of unique user agents / http headers and attempts to identify every device. As of version 1.5.0, Tera-WURFL now uses a caching system to increase performance and decrease server load. As of version 2.0, Tera-WURFL uses many User Agent Matchers to apply specifiy detection methods to specific brands of devices. This greatly increases detection accuracy. Version 2.0 also introduces the Levenshtein Distance algorithm to better detect ambiguous user agents.

Demo #2: Tera-WURFL Web Administration

This is the web administration page that comes with Tera-WURFL. It allows you to update the WURFL database over the Internet (or locally), update your database with your custom patch file and test your current configuration with manually entered user agents.

Demo #3: Tera-WURFL Manual Test Script

This script is very similar to the "check_wurfl.php" script used in the standard PHP Tools library.

Download, Installation, Support

The following pages will guide you through downloading, installing, configuring and extending Tera-WURFL:

Personal tools
Namespaces
Variants
Actions
WURFL DBAPI
Toolbox

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php:66) in /var/www/tera-wurfl.com/web/wiki/includes/WebResponse.php on line 16
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.15443906728MediaWiki->finalCleanup( ).../index.php:118
30.15453907816OutputPage->output( ).../Wiki.php:376
40.24824054224OutputPage->sendCacheControl( ).../OutputPage.php:1619
50.24834054416WebResponse->header( ).../OutputPage.php:1400
60.24834054512header ( ).../WebResponse.php:16

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php:66) in /var/www/tera-wurfl.com/web/wiki/includes/WebResponse.php on line 16
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.15443906728MediaWiki->finalCleanup( ).../index.php:118
30.15453907816OutputPage->output( ).../Wiki.php:376
40.24824054224OutputPage->sendCacheControl( ).../OutputPage.php:1619
50.24874054472WebResponse->header( ).../OutputPage.php:1434
60.24874054568header ( ).../WebResponse.php:16

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /var/www/tera-wurfl.com/web/wiki/extensions/Flash.php:66) in /var/www/tera-wurfl.com/web/wiki/includes/WebResponse.php on line 16
Call Stack
#TimeMemoryFunctionLocation
10.0001234744{main}( ).../index.php:0
20.15443906728MediaWiki->finalCleanup( ).../index.php:118
30.15453907816OutputPage->output( ).../Wiki.php:376
40.24824054224OutputPage->sendCacheControl( ).../OutputPage.php:1619
50.24904054416WebResponse->header( ).../OutputPage.php:1435
60.24904054512header ( ).../WebResponse.php:16