Файл включает в себя путаницу и ошибки - PullRequest
0 голосов
/ 12 июня 2018

У меня следующая структура каталогов.

public_html
    |----------app1
    |            |---------config.php
    |            |---------index.php 
    |
    |----------app2
                 |---------import.php

app1 / config.php

define('ABC', 'hello');

app1 / index.php

require_once 'config.php';
echo ABC;

Вызов app1/index.php печатает:

Привет

app2 / import.php

require_once('../app1/index.php');

Звонит app2/import.php печатает:

Примечание: использование неопределенной константы ABC - предполагается, что 'ABC' в /abs/path/public_html/app1/index.php в строке 10 (строка эха ABC)

ABC

Почему это происходит?

Как включить, чтобы все работало правильно?

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Используйте

require_once __DIR__ . '/config.php';

вместо require_once 'config.php';

Ссылка: Пути к PHP-файлам и магические константы

0 голосов
/ 12 июня 2018

Проблема в том, что вы запускаете скрипт php app2/import.php из папки public_html, а не из public_html/app2.
Если вы сделаете это:

cd app2 && php import.php

Все будет работать!

Ваш пример с require_once 'config.php'; в app1/index.php работает, потому что файлы index.php и config.php помещены в одно и то жекаталог.
Но app2/import.php помещен в другой каталог из app1/config.php, поэтому вы не можете использовать этот подход в этом случае.

Чтобы избежать этой путаницы с относительными путями, вы должны использовать константу __DIR__ вваши пути в import.php, например:

<?php
require_once(__DIR__ . '/../app1/index.php');

, и теперь вы можете запустить этот скрипт из каталога public_html.

0 голосов
/ 12 июня 2018

Вы должны прочитать документацию о include и require.Относительные пути всегда разрешаются относительно первого вызванного скрипта.

Итак, когда вы вызываете app1/index.php, require_once('config.php') загружает app1/index.php, но при вызове app2/import.php, require_once('config.php') пытается для загрузки app2/config.php, который не существует.

Совет 1 : повысить вас уровень сообщений об ошибках при кодировании,вы получите больше подсказок о том, что не так.В этом случае, include через хотя бы уведомление.

Совет 2 : избегайте include, если у вас нет веских причин, используйте require_once, что приведет к фатальной ошибке, когданевозможно загрузить файл.

...