4 Nov
Od jakiegoś czasu wśród moich serwerów pojawił się jeden działający w oparciu Plesk postawiony na Debianie. Generalnie jestem zadowolony z tego rozwiązania, ale oczywiście od czasu do czasu napotykam na różne kwiatki (choć rzadko). Jednym z takich kwiatków okazał się PEAR (choć to nie jego wina, tylko Pleska).
W czym rzecz? Ano w tym, że niby mam PEAR, ale nie działa. Tzn. można instalować pakiety, ale za diabła żaden skrypt PHP nie może uzyskać dostępu do plików PEAR. Próba uruchomienia poniższego skryptu
<?php
require ("PEAR.php");
?>
kończy się tak:
Fatal error: require() [function.require]: Failed opening required ‘PEAR.php’ (include_path=’.:/usr/share/php’) in /var/www/vhosts/domena.com/httpdocs/pear.php on line 2
Zacząłem więc po kolei sprawdzać w czym rzecz. Najpierw odpaliłem phpinfo().
| Directive | Local Value | Master Value |
|---|---|---|
| include_path | .:/usr/share/php | .:/usr/share/php |
| open_basedir | /var/www/vhosts/domena.com/httpdocs:/tmp | /usr/share/php |
include_path
PEAR znajduje się w include_path, czyli w /usr/share/php, więc powinno chodzić. No ale nie chodzi.
open_basedir
No to jesteśmy (prawie) w domu. Nadrzędna wartość open_basedir jest OK – zawiera /usr/share/php, ale LOKALNA już nie – i dlatego nie działa.
Rozwiązanie
Trzeba przygotować sobie plik vhost.conf o zawartości analogicznej do poniższej i wgrać go do katalogu /var/www/vhosts/domena.com/conf/. Jest to jedyne rozwiązanie żeby na trwałe zmienić konfigurację dla wybranego vhosta (bo musimy zmienić LOKALNĄ wartość). Broń Boże wprowadzać zmainy w pliku httpd.include!
<Directory /var/www/vhosts/domena.com/httpdocs>
php_admin_flag safe_mode off
php_admin_value open_basedir "/var/www/vhosts/domena.com/httpdocs:/tmp:/usr/share/php"
</Directory>
Na koniec trzeba powiadomić Pleska o tym, że zmieniła się konfiguracja serwera. Robimy to takim poleceniem:
/usr/local/psa/admin/bin/websrvmng -a
Podobno nie trzeba po tym nawet Apache’a restartować, ale bez tego mi nie działało. Dlatego dorzucamy jeszcze to:
/etc/init.d/apache2 restart
I teraz wszystko pięknie hula!