Я запускаю несколько приложений PHP на своем Mac, работает под управлением OS X 10.5.6, Apache 2, PHP 5. У меня есть настройка субдоменов для каждого проекта, записи файла хоста для каждого субдомена и блоки Virtual Directory в конфигурации Apache. Так
project1.localhost переходит в / Library / WebServer / Documents / Project1
project2.localhost переходит в / Library / WebServer / Documents / Project2
и т.д…
Однако этот метод действительно не «изолирует» веб-приложения. Например, если я включаю такой скрипт:
<?php include("/includes/include.php"); ?>
Он ссылается на скрипт из базового каталога моего компьютера. Таким образом, он обращается к
C: /includes/include.php
Есть ли способ для меня сделать ссылку
C: /Library/WebServer/Documents/Project2/includes/include.php
В принципе, сделайте так, чтобы он не знал ничего за пределами своего собственного каталога. Кроме того, есть ли способ использовать php.ini на основе поддомена?
Я считаю, что можно установить php.ini для виртуального хоста
<VirtualHost *:80> ... PHPINIDir /full/path/to/php/ini/ </VirtualHost>
таким образом вы можете настроить open_basedir и другие
Вы можете ограничить способность скриптов видеть что-либо выше определенного дерева папок, добавив директиву open_basedir в папку httpd.conf. Он должен выглядеть так:
<DIRECTORY / полный / путь / в / папка / содержащий / script />
php_admin_value open_basedir "/ full / path / to / top / folder / of / wish / tree /"
</ Directory>
Одно дело – если вы не закончите путь с помощью a /, то это подстановочный знак. Другими словами, «/ var / etc / my» будет соответствовать «/ var / etc / myFolder», а также «/ var / etc / myMothersFolder», в то время как «/ var / etc / my /» будет соответствовать только этой точной папке имя.
Что касается изоляции приложения ~ это касается обеспечения PHP-скриптов, чтобы они не могли получить доступ к другим? Пожалуйста, дополните –
Что касается php.ini – я не знаю, как использовать конкретный php.ini для каждого каталога, но вы могли бы создать страницу с php include с пучком строк ini_set (), возможно, что-то вроде этого.
<?php // in your header or along top of all php modules in your pap require_once ( '/path/to/includes/ini_set.php' ); // ... ?>
и скрипт ini_set.php:
<?php // one of these for each override of defaults set in php.ini file -- ini_set ( $varname, $newvalue ); ini_set ( $varname, $newvalue ); ini_set ( $varname, $newvalue ); ?>
Если вам интересно узнать больше о функции ini_set (), вот страница документации на php.net: http://us3.php.net/ini_set
Надеюсь, это было несколько полезно ~
Лучший способ сделать это – использовать PHP через FCGI (mod_fcgid). Таким образом, вы можете запускать PHP с использованием другого пользователя и другого php.ini для vHost.
Вот пример того, как настроить такую конфигурацию на Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10
Если вы хотите использовать полное имя пути, вы можете использовать следующее:
<?php include dirname( __FILE__ ) . '/includes/include.php'; ?>
Возможное решение для файла php.ini
Попробуйте относительный путь! Подобно:
<?php include("./includes/include.php"); ?>
в<?php include("./includes/include.php"); ?>
или
<?php include("includes/include.php"); ?>
в<?php include("includes/include.php"); ?>