PHP CLI include() не находит файл

Структура моих файлов выглядит так:

config.php
script
|--myscript.php

myscript.php

<?php
require '../config.php';
?>

При выполнении php /path/to/myscript.php я получаю Warning: require(../config.php): failed to open stream: No such file or directory.

В чем причина?

Ответы

Ответ 1

Это потому, что ваш текущий рабочий каталог тот, который вы вызываете, а не тот, на котором находится ваш script.

Использование

require __DIR__ . '/../config.php';

вместо этого. __DIR__ - это константа, указывающая на текущий файл каталога.

Ответ 2

Один из способов сделать это:

php -d include_path=/path/to/config.PHP скрипт.php

-d используется для установки директив INI во время выполнения, поэтому у вас нет изменений кода/конфигов/каталогов.

Ответ 3

Скорее всего, у вас неправильный рабочий каталог, поэтому ваши относительные пути не указывают, где вы его ожидаете. Чтобы увидеть, как PHP добавляет:

echo getcwd();

в качестве первой строки вашего script.

Ответ 4

Если вы не хотите (или не можете) изменить строку require в своем коде, просто cd в каталог, который ожидает ваш script, прежде чем запускать script:

cd /path/to
php /path/to/myscript.php

Ответ 5

Вам нужно использовать полный путь или изменить рабочий каталог:

chdir(dirname(__FILE__));