2011-06-28 13 views
8

Chcę ustawić ścieżkę dołączania PHP do innego katalogu. Próbowałem umieścić to w pliku .htaccess, ale to nie zadziałało. Jedyne, co widzę, to ścieżka dołączania ustawiona w httpd.conf, ale nie ta, którą próbowałem dodać.Jak ustawić ścieżkę dołączania PHP przez .htaccess?

<IfModule mod_php5.c> 
php_value include_path ".:/var/www/mywebsite/" 
</IfModule> 

Co robię źle? Zrobiłem a2enmod mod_php5, ale już działało, więc przypuszczam, że PHP5 już działa jako moduł Apache.

[EDIT] W moim vhost config mam to:

<Directory ~ "^/var/www/.*"> 
     AllowOverride All 
     Options FollowSymLinks -Indexes -MultiViews 
     php_value include_path ".:./include:./.include/:/var/www/.include/:/var/www/" 
</Directory> 

Więcej informacji (phpinfo()):

Loaded Modules core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_auth_mysql mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_status 

include_path .:./include:./.include/:/var/www/.include/:/var/www/ .:/usr/share/php:/usr/share/pear 

Pozdrowienia, Kevin

+0

Jeśli używasz go jako modułu php, powinien działać. Sprawdź dwukrotnie, czy masz zainstalowany moduł mod_php5.c i sprawdź dokładnie ścieżkę. 'phpinfo()' jest twoim przyjacielem. – hakre

+0

Dzięki, opublikuję moje 'phpinfo()' wkrótce;). –

+0

Nieco offtopic, ale jeśli masz wspólny plik konfiguracyjny, możesz użyć ['set_include_path()'] (http://www.php.net/set_include_path), aby zmodyfikować 'include_path' w czasie wykonywania. – binaryLV

Odpowiedz

7

Apache musi być skonfigurowany w celu umożliwienia ustawienia do zastąpienia przez .htaccess. Sprawdź swój plik konfiguracyjny Apache (httpd.conf) przez nadpisanie katalogu:

<Directory "/directory/containing/your/htaccess/file"> 
    AllowOverride All 
</Directory> 

Place to w definicji vhost na swojej stronie.

Jeśli jest to zmiana globalna, powinieneś zmienić ustawienie include_path w pliku php.ini zamiast używać .htaccess.

Obie te zmiany będą wymagać ponownego uruchomienia Apache.

EDIT:

Jest to cytat z Apache Core features page.

„Przypuśćmy, że nazwa pliku uzyskiwany jest /home/abc/public_html/abc/index.html Serwer uważa siebie// home,/home/abc,/home/abc/public_html, i/home/abc/public_html/abc w tej kolejności. W Apache 1.2, kiedy/home/abc jest brane pod uwagę, wyrażenie regularne będzie pasowało i będzie W Apache 1.3 wyrażenie regularne nie jest w ogóle brane pod uwagę w tym punkcie drzewa, nie będzie ono brane pod uwagę, dopóki wszystkie normalne pliki s i .htaccess nie zostaną zastosowane. wyrażenie regularne będzie pasowało do/home/abc/public_html/abc i zostanie zastosowane. "

Wydaje mi się, na podstawie tych informacji, że Twoje oświadczenie php_value include_path jest oceniane po pliku .htaccess. W takim przypadku wartość, której używasz dla adresu include_path w pliku .htaccess, jest nadpisywana. Czy możesz spróbować tymczasowo usunąć linię include_path z <Directory>, aby przetestować tę teorię?

+0

Dzięki. Mam AllowOverride, ale to nie działa. A może kapitał jest problemem? (Patrz edytuj) Nie, to nie jest globalne. –

+0

@Kevin: Zobacz moją aktualizację, z dodatkowymi informacjami. –

+0

@George: Nice finding! – hakre

1

próbowałeś to w kodzie PHP (w górnej części kodu):

<?php 
$path = "../folder/folder/file_name.inc.php"; 
require_once($path); 
?> 
+0

Nie, to byłoby za dużo pracy;), i tak dziękuję. –

+0

W przypadku dużych witryn może to stać się prawie niemożliwie niewykonalne! –

0

można spróbować użyć chdir() w pliku php użyć innej lokalizacji jako lokalizację bazową dla wszystkich plików funkcje, w tym obejmuje =)

+0

Thnx;), ale byłoby to zbyt dużo pracy i nie jest tak ogólne; jeśli zmieniam nazwę tego folderu, muszę zmienić wszystkie pliki PHP wskazujące na ten folder. –

+0

to nie tyle praca, jeśli użyjesz jednego podstawowego skryptu startowego =) – Greenisha

+0

Tak, ale wciąż wolę jedną linię '.htaccess' :) –

Powiązane problemy