У меня есть сайт, настроенный в 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();
И ничего больше. Сохраните его, а затем загрузите в свой веб-браузер, вы ищете две вещи
Если 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));