Корень документа параллельного пути Apache

У меня есть сайт, настроенный в apache2 (Windows 7), скажем, у моего DocumentRoot есть / mysite / content

но у меня также есть в параллельном каталоге, скажем / mysite / lib

поэтому мой файл index.php говорит:

require_once("/mysite/lib/myfile.php"); 

но он не найдет файл, потому что он берет его из корня документа. поэтому он ищет

 /mysite/content/mysite/lib/myfile.php instead of /mysite/lib/myfile.php 

и я не могу сделать root / mysite, потому что включенные файлы относятся к корню, mysite / content. любые идеи, как обойти это?

вам нужно изменить путь включения в файле php.ini

При включении попытки использовать полное имя пути, таким образом, вы никогда не столкнетесь с этими проблемами, не требуя файлов php. Вы можете использовать константу __DIR__ в сочетании с realpath, чтобы установить тип корневого каталога, а затем включить то, что вам нужно.

Предположим, что корневой каталог является чем-то / общедоступным, и вы хотите включить его из чего-то / libs. Предполагая, что вы находитесь в index.php от чего-то / публичного, вы бы сделали следующее:

 $rootPath = realpath(__DIR__ . "/../"); require_once $rootPath . "/libs/somefile.php"; 

Я думаю, что это должно помочь вашей проблеме. На системах * nix будьте осторожны с тем фактом, что вам нужно, чтобы apache имел права на каталог libs, чтобы читать оттуда.

Суть этого ответа заключается в нахождении текущей позиции index.php и определении базового пути вашего приложения, а затем с использованием этого базового пути, адресации чего-либо в вашем приложении относительно и легко.

Вы можете получить информацию от php: примерные пути ниже для настройки сервера xampp, вы можете (возможно) получить разные результаты, но они (я надеюсь) будут правильными.

 $path = str_replace('\\','/',dirname(__FILE__)); 

это даст вам относительный путь сервера для index.php, который, например: 'd: / xampp / htdocs / mysite / content'

то вы можете удалить 'content'

 $path = substr($path, 0, strrpos($path,'/')+1); 

теперь у вас будет что-то вроде вашего корня приложения:

'D: / XAMPP / HTDOCS / MySite /'

теперь вы можете получить доступ к lib, просто сказав:

 require_once($path.'lib/myfile.php'); 

надеюсь, это полезно.

Это, скорее всего, проблема с вашим php.ini.

Создайте файл на своем веб-сайте phpinfo.php с содержимым:

 <?php phpinfo(); 

И ничего больше. Сохраните его, а затем загрузите в свой веб-браузер, вы ищете две вещи

  1. безопасный режим
  2. open_basedir

Если safe_mode включен, выключите его. Если open_basedir – ничего, кроме none, установите его равным none. Если вы не можете редактировать php.ini по какой-либо причине, вы можете установить это в .htaccess с помощью:

 php_admin_value open_basedir none 

Источники :
http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-include-dir
http://www.php.net/manual/en/ini.core.php#ini.open-basedir

Вы можете использовать что-то вроде этого, прежде чем вызывать require_once("myfile.php"); :

 $base = realpath(dirname(__FILE__) . '/../'); $paths = array( $base . '/mysite/lib', '.', get_include_path() ); set_include_path(implode(PATH_SEPARATOR, $paths));