Voor een PHP script heb ik een class TemplateParser geschreven. Deze kan door middel van Regular Expressions een HTML opsplitsen in losse templates.
Deze losse templates worden aangegeven d.m.v. een 'start' en een 'end' tag in HTML comment formaat. Deze zien er zo uit: <!--#START:template_name--> en <!--#END:template_name-->.
Het uiteindelijke doel is dat deze templates los van elkaar in de database worden geplaatst en het dus gemakkelijker is pagina's te construeren.
Nu is het geval, dat er bij het aanroepen van preg_match_all een CGI error plaats vind, namelijk de volgende:
De fout vind zich plaats in de volgende PHP code:
Nog enkele opmerkelijke dingen:
Deze losse templates worden aangegeven d.m.v. een 'start' en een 'end' tag in HTML comment formaat. Deze zien er zo uit: <!--#START:template_name--> en <!--#END:template_name-->.
Het uiteindelijke doel is dat deze templates los van elkaar in de database worden geplaatst en het dus gemakkelijker is pagina's te construeren.
Nu is het geval, dat er bij het aanroepen van preg_match_all een CGI error plaats vind, namelijk de volgende:
Ik heb gegoogled op deze error, en heb een aantal oplossingen gevonden:CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
- Niet de juiste rechten op extensions/php.exe
- Een PHP bug (bron: http://bugs.php.net/bug.php?id=25504)
maar dit is niet helemaal mijn situatie. - Het gebruik van de CLI versie van php.exe in plaats van de CGI versie.
De fout vind zich plaats in de volgende PHP code:
PHP:
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
| function AddCompleteTemplate($input) { //First check input if (!empty($input)) { // First thing to do is to split up the template $successive = false; $matches = array(); $regex = "/(<!--#START:(.+)-->)((.|\n)*)(<!--#END:\\2-->)/"; // HIER gaat het fout preg_match_all($regex, $input, $matches); //------------------------- // Loop through the matches for ($i = 0; $i < count($matches[0]); $i++) { if ($this->addtemplate($matches[2][$i], $matches[3][$i])) { $successive = true; } else { $successive = false; } } return $successive; } else { // Invalid input return false; } /* * De rest van TemplateParser */ |
Nog enkele opmerkelijke dingen:
- PHP 4.4.0 draait als CGI module onder IIS 5 (Windows XP)
- De gebruikte regular expression is getest.
- preg_replace werkt wel.
[ Voor 3% gewijzigd door Verwijderd op 17-09-2005 13:28 ]