Почему PHP «требуют» не находит файл? - PullRequest
2 голосов
/ 20 октября 2010

У меня следующая структура файлов:

temp
    main
        index.php
    a.php
    b.php

Вот файлы;

index.php

echo "index.php ---> " . __DIR__ . "<br />";

require('../a.php');

echo "OK<br />"

a.php

echo "a.php ---> " . __DIR__ . "<br />";

require('./b.php');

echo "a is here<br />"

b.php

echo "b is here<br />"

При вызове index.php я получил следующую ошибку:

index.php ---> D:\Programs\WampServer 2\www\temp\main
a.php ---> D:\Programs\WampServer 2\www\temp

Warning: require(./b.php) [function.require]: failed to open stream: No such file or directory in D:\Programs\WampServer 2\www\temp\a.php on line 5

Fatal error: require() [function.require]: Failed opening required './b.php' (include_path='.;C:\php5\pear') in D:\Programs\WampServer 2\www\temp\a.php on line 5

Я заметил, что если я изменюсь

require('./b.php');

до

require('b.php');

Почему это? работает как положено.

Ответы [ 2 ]

14 голосов
/ 20 октября 2010

Когда вы используете include или require, включаемый вами файл будет действовать так, как если бы он был частью сценария, который его включал.В этом случае файл a.php может находиться в том же каталоге, что и b.php, но когда код выполняется, он работает в контексте index.php.Если бы вы использовали __FILE__ вместо __DIR__, вы бы увидели, что a.php возвращает то же значение, что и index.php, когда он работает как включенный файл в index.php.

, поскольку относительнаяпуть меняется в зависимости от того, где используются файлы, всегда лучше использовать абсолютный путь относительно корня сервера.Если машина настроена нормально, это будет начинаться с $_SERVER["DOCUMENT_ROOT"], затем добавьте путь к приложению и путь включений.На некоторых серверах общего хостинга вам, возможно, придется где-то жестко закодировать корень (или добавить его в файл .htaccess).

0 голосов
/ 20 октября 2010

Использование require('..\a.php');

В руководстве PHP сказано, что include использует обратную косую черту для Windows.

Edit:

К сожалению. Я неправильно прочитал код. Не обращайте внимания на этот ответ.

...