Функция определения PHP не работает во включаемом файле

Допустим, у меня есть 3 PHP-файла.

file1.php

<?php
define('INTRO','Hello world');
?>

file2.php

<?php
include('file1.php');
echo 'My first text is = ' . INTRO;
?>

file3.php

<?php
include('file2.php');
echo 'My Second text is = ' . INTRO;
?>

Когда я запускаю файл file2.phpотображается текст «Мой первый текст = Привет, мир», что нормально.

Но проблема в том, что при запуске файла file3.php отображается

My first text is = INTRO
My Second text is = INTRO

должно отображаться как

My first text is = Hello world
My Second text is = Hello world

Это потому, что постоянное значение от file1.php не перешел на file3.php

Он отлично работал на моем компьютере, но не на сервере.

И мой компьютер, и сервер используют Windows Server 2016 64bit + Apache2.4 64bit + Php5.6 64bit.

Я что-то упустил в настройках сервера?

0

Решение

Изменить вас include в require и вы можете увидеть, что ваш файл не включен, include будет молчать.

Я думаю, у вас, вероятно, есть проблема с заглавными буквами, файловая система Linux не чувствительна к регистру Windows. Так что, если ваше включение использует file1.php но ваш файл называется File1.php с большой буквы он будет работать на Windows, а не на Linux,

Тогда включающий просто умирает, не сказав вам. С кодом нет проблем, так как он работает локально, так что остается только среда.

Также может быть полезно включить отчеты об ошибках в первом файле, который вы называете put

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

Вы должны получить уведомление о неопределенной константе, которая затем использует php по умолчанию, используя имя константы для ее значения («INTRO»).

Вот почему вы получаете текст INTRO, что означает, что ваша константа не определена. Единственный способ увидеть, что происходит, — это если файл не включен. И если это работает локально, а не на сервере, это хорошая ставка, это проблема корпуса.

Я предполагаю, что вы используете Windows локально и Linux на вашем сервере, но, как это часто бывает, это не большой скачок логики, чтобы понять это.

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

if(!defined("INTRO")) define('INTRO','Hello world');

Который проверяет, определен ли он перед определением, но лучше просто использовать require_once

Также семантически, если требуется включить файл (т. Е. Ваша программа ломается без него), то он должен быть включен с помощью require,

Приветствия.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector