Es wird wohl den meisten von uns so gehen, wie mir… Man will sich ein neues geniales PHP-Framework ansehen und wird unerwartet mit Fehlern konfrontiert (die es doch nicht geben dürfte).

Bevor Sie also am eigenen Verstand zweifeln, hier ein Hilfreicher Tipp zur Fehlermeldung:

Parse error: syntax error, unexpected T_STRING .../protected/viewc/***. on line 1

Wenn man in dooframework/view/DooView.php reinschaut und die render()-Methode so anschaut, fällt auf, dass es mit $vfilename, $cfilename hantiert wird. Noch interessanter wird diese Stelle:

if(filemtime($cfilename)>=filemtime($vfilename)){

Und wenn man sich diese Zeit Zeilen anschaut wir’s noch interessanter:

$cfilename = Doo::conf()->SITE_PATH . "protected/viewc/$file.php";
$vfilename = Doo::conf()->SITE_PATH . "protected/view/$file.html";

Da gibt es einen Ordner für HTML-Templates (namens „view“) und einen mit PHP-Dateien (namens „viewc“). Doch wozu? Diese Zeile lässt es schon vermuten:

$this->compile($file, $vfilename, $cfilename);

Die Templates werden für eine schnellere Ausführung kompilliert und als PHP-Dateien abgelegt. Da dort das PHP im XHTML/XML verwendet wird, muss ja die Datei mit ‚

version="1.0" encoding="utf-8"

… und das kann nicht gut gehen. Die einzige Möglichkeit besteht darin die PHP-Konfigurationsvariable „short_open_tag“ zu deaktivieren. In der globalen php.ini würde ich das aber nicht machen. Wer weiß wo ich vor Jahren „geschlampt“ habe und das „<? “ verwendet… Doch „ini_set“ in index.php der -App zu setzen brint meist auch keinen Erfolg.

DIE LÖSUNG besteht darin, dies in .htaccess im Ordner der index.php der Doo-PHP-App zu erledigen. Haben Sie diese Datei noch nicht? Dann sollten Sie es per „cp .htaccess.example .htaccess“ kopieren, damit auch das Routing funktioniert. Wenn es auch dann nicht läut, schauen sie in der -Konfiguration nach bzw. fragen Sie Ihren Provider nach „AllowOverride„-Option für Ihren Ordner. Es sollte in etwa so aussehen:

<Directory .../dooPHP/.../>
 AllowOverride All
</Directory>

(mit dem „All“ bin ich mir nicht sicher – „Options“ dürfte eigentlich auch reichen).

RewriteEngine On
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule .* index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

php_flag short_open_tag 0

in .htaccess löst all unsere Probleme. Routing ist damit eingeschaltet und das PHP meldet keine Fehler mehr!

Jetzt den Apache neu starten und loslegen!

… Und nur so BTW: in protected/.htaccess würde ich mal ein

Order Deny,Allow
Deny from all

empfehlen. Es muss ja nicht jeder alles sehen oder? Vor allem dann, wenn protected nicht unterhalb des Document_Root abgelegt werden kann.

Reblog this post [with Zemanta]