Monday, February 6, 2012

Error PHP Ketika Dijalankan Dengan Module moduserdir

Ada yang aneh ketika saya mencoba menjalankan script PHP di direktori ~/public_html, browser selalu berusaha untuk mengunduh script yang sedang dipanggil alih-alih menampilkannya di browser. Padahal ketika script yang sama diletakkan di /var/www tidak ada masalah. Seharusnya ini artinya dukungan PHP untuk web server Apache belum dipasang, namun karena script PHP sudah terbukti berjalan berarti ada sesuatu yang salah dengan moduserdir. Sebagi informasi, moduserdir adalah modul apache yang memungkinkan user di sistem dapat memiliki berkas-berkas html/php sendiri yang diletakkan di public_html di direktori home masing-masing.
Setelah mentok mencari-cari konfigurasi yang berkaitan dengan hal ini di /etc/apache2, saya menyerah dan memutuskan untuk Googling saja. Dan tak butuh waktu lama, ketemu juga jawabannya di Forum Ubuntu. Ternyata di Debian dan Ubuntu, PHP memang tidak diperbolehkan untuk berjalan dengan moduserdir. Jika memang membutuhkannya maka kita harus mengubah konfigurasinya yang tedapat di /etc/apache2/mods-available/php5.conf. Pastikan untuk memagari baris berikut:

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_value engine Off
    </Directory>
</IfModule>
Sehingga isi dari /etc/apache2/mods-available/php5.conf menjadi seperti ini:

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    #<IfModule mod_userdir.c>
    #    <Directory /home/*/public_html>
    #        php_admin_value engine Off
    #    </Directory>
    #</IfModule>
</IfModule>
Jangan lupa untuk merestart Apache untuk mengaktifkan konfigurasi baru ini.
service apache2 force-reload
 Problem solved!