PHP включает в себя относительно пути URL, а не путь к файлу, как вы можете изменить это? - PullRequest
2 голосов
/ 27 декабря 2010

У меня есть файл PHP /a/b/file.php со строкой

require("../connect.php");

В connect.php есть строка

require("../config.inc.php");

Все это прекрасно работает на моем локальном сервере. Есть несколько файлов, использующих connect.php, и все они тоже отлично работают.

Однако на хостинг-сайте /a/b/file.php выдает ошибку:

Fatal error: require() [function.require]: Failed opening required 
'../config.inc.php' (include_path='.:/usr/local/php5/lib/php') in
/******/connect.php on line 3

Я подозреваю, что хотя connect.php находится в другой папке, он ищет его относительно / a / b. Есть ли настройка php.ini, чтобы изменить это?

Ответы [ 4 ]

2 голосов
/ 27 декабря 2010

Почему бы вам не использовать что-то вроде:

require( dirname(__FILE__).DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."connect.php");

Таким образом вы избежите проблем, таких как разработка приложения в системе Unix-Like и его развертывание в системах Windows или наоборот.

1 голос
/ 27 декабря 2010

Обычно я лично создаю файл с именем global.php (который находится в каталоге root проекта), где я define() является константой, включая libs и т. Д.

<?php
// ...
define('APP_INCLUDE_DIR', dirname(__FILE__) .'/');
// ...
?>

После этого я включаю этот файл во все другие файлы, расположенные в том же каталоге (например, index.php с require('global.php'). Теперь, когда все выполняется на этом уровне каталога, вы можете использовать константу APP_INCLUDE_DIR в каждом включаемом файле .

<?php
require('global.php');

// ...
require_once(APP_INCLUDE_DIR .'a/b/c/connect.php');
?>

А в a/b/c/connect.php вы могли бы написать, например,

<?php
// ...
require_once(APP_INCLUDE_DIR .'a/b/config.inc.php');
?>
1 голос
/ 27 декабря 2010

Я не знаю, есть ли настройка php.ini, но обычно я использую $_SERVER['DOCUMENT_ROOT'] для своих включенных файлов.

require $_SERVER['DOCUMENT_ROOT']."/path/relative/to/document_root/file.php";

В некоторых случаях относительный путь лучше, но большую часть времени файлы, которые вы хотите включить, будут оставаться в том же каталоге.

0 голосов
/ 27 декабря 2010

Проверьте ваш include_path в файле PHP.ini. http://php.net/manual/en/function.set-include-path.php

Например, на моем локальном сервере (XAMPP) это выглядит так: `include_path.; C: \ xampp \ php \ PEAR

Вы можете сделать phpinfo (), чтобы узнать также.

...