PHP定义函数在包含文件

时间:2018-03-12 03:21:58

标签: php include constants

假设我有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时,显示的文字是&#39;我的第一个文字是= Hello world&#39;,这没关系。

但问题是当我运行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。

我在服务器设置中遗漏了什么吗?

1 个答案:

答案 0 :(得分:1)

include更改为require,您可能会看到您的文件未被包含,包含将无声地失败。

我的猜测是你可能有大写问题,Linux文件系统是区分大小写的窗口不是。因此,如果您的包含使用file1.php,但您的文件名为File1.php,其资本可用于Windows,而不适用于Linux,

然后包括在没有告诉你的情况下死去。代码没有问题,因为它在本地工作,因此只留下环境。

在您调用的第一个文件

中打开错误报告可能会有所帮助
<?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包含它。

干杯。