2013-03-19 14 views
0

Когда я бегу мой сайт он продолжает говорить мнеPHP файл не найден, но там

Warning: require_once(../../functions.inc.php): failed to open stream: No such file or directory in F:\xampp\htdocs\FinalYear\inc\functions\LoginOrRegister.inc.php on line 5 

Но файл ровно 2 папки выше файла я, требующий. Когда я делаю следующее:

set_include_path(dirname(__FILE__)."/../../"); 
require_once('functions.inc.php'); 

Он работает (я не получаю сообщение об ошибке для несуществующего файла НО В functions.inc.php есть новый объект, созданный из database.php.

$db = new database(); 

Я могу назвать это на любом другом сайте, просто не в моем LoginOrRegister.php. Он всегда говорит мне, что этот объект не существует, даже, когда я создаю его сам в файл. Любая помощь?

+0

PHP не лжет. Если он говорит, что файл «F: \ xampp \ htdocs \ FinalYear \ inc \ functions \ LoginOrRegister.inc.php» не существует, то он не существует. Возможно ли, что вы нуждаетесь в нем в другом месте, и там есть правильный путь? Вы уверены, что этот путь полностью верен? –

+0

'F: \ xampp \ htdocs \ FinalYear \ inc \ functions \ LoginOrRegister.inc.php' должен существовать, так как это скрипт работает и имеет ошибку в первую очередь. – bardiir

ответ

4

It loo ks для меня, как будто вы включаете файл из включенного файла. Если это так, относительный путь должен быть относительно сценария, который выполняется, а не сценарий, который включен в первый скрипт.

Гораздо проще использовать абсолютные пути (используйте dirname(__FILE__) перед относительным путем).

require_once(dirname(__FILE__)."/../../functions.inc.php"); 
+0

О, боже, да, ты прав. Я включаю файл, в который я включаю тот же файл ... Но все же, почему он не знает $ db = new database(); тогда? – loomie

+0

@ TheoTzaferis Что я не знаю, я не думаю, что вы разместили достаточно кода для меня, чтобы понять, что там происходит. – CodePB

1

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

Так считают этот stucture:

|- htdocs 
    |- index.php 
    |- inc 
     |- test.php (A) 
     |- inc 
      |- test.php (B) 

Если Вы вызываете /index.php и файл index.php будет включать в себя вкл/test.php это будет включать в файл A.

Если внутри test.php (A), который мы также называем include inc/test.php, он будет включать test.php (A) снова, потому что путь относится к index.php. Если вместо этого вы вызываете /inc/test.php из веб-браузера, в то время как там присутствует inc/test.php, он будет включать test.php (B) в вызываемый test.php (A)

Это потому что PHP обрабатывает include, такой как исходный код включенного файла, заменит строку include, поэтому в основном вы перемещаете исходный код в другое место.

0

Я всегда делаю это, чтобы избежать такого рода проблем:

$root = $_SERVER['DOCUMENT_ROOT']; //your website's root folder, where the index.php is 
include("$root/path"); 
Смежные вопросы