Допустим, у меня есть 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.
Я что-то упустил в настройках сервера?
Изменить вас 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
,
Приветствия.
Других решений пока нет …