Wyłączenie parsowania PHP przez DAV
Posted on Wed 20 January 2016 in Tips4Unices • 1 min read
Konfiguruję klienta DAV np. Coda2 albo Transmit i gdy pobieram plik do edycji zamiast oryginalnego kodu źródłowego dostaję przeparsowany HTML.
O co chodzi?
Klient DAV wysyła GET i plik PHP jest parsowany, dokładnie tak jak ma to miejsce gdy wywołuje się go z przeglądarki.
Rozwiązanie proponowane przez wielu użytkowników (czyt. wygooglane) ale NIEPRAWIDŁOWE!!!,  wygląda następująco:
należy wyłączyć interpretację PHP dla danego katalogu gdy używany jest WebDAV.
Do /etc/httpd/conf.d/dav.conf (np. w CentOS)
albo
do /etc/httpd/extra/httpd-vhosts.conf (np. w Slackware)
dopisać dla danego katalogu linie:
# Fix for PHP WebDAV <IfModule mod_dav.c> php_value engine off </IfModule>
czyli pełna konfiguracja może wyglądać tak:
<Directory "/var/www/htdocs/test"> Dav On # Fix for PHP WebDAV <IfModule mod_dav.c> php_value engine off </IfModule> </Directory>
Ale to niestety działa tylko w jedną stronę, wprawdzie klient DAV pobierze pliki jak tekstowe, bez ich parsowania ale to samo będzie dotyczyć zapytania z przeglądarki.
Zamiast ładnej strony pokaże się kod źródłowy.
Prawidłowym rozwiązaniem są aliasy, opisane w manualu Apache pod nazwą: Complex Configurations.
Alias "/phparea" "/home/gstein/php_files" Alias "/php-source" "/home/gstein/php_files" <Location "/php-source"> Dav On ForceType text/plain </Location>
W kliencie DAV należy podać jako "Remote Root" nazwę aliasu "php-source" (albo inną, który ustawiliśmy).
Przeglądarka wyśle GET do serwera, a ten przetworzy pliki z aliasu "php-area" zwracając PHP przeparsowany na HTML, natomiast żądanie klienta DAV obsłuży z aliasu "php-source", i wyłączając parsowanie, zwróci czysty kod źródłowy.