php 5.3和5.6与include路径之间的差异


difference between php 5.3 and 5.6 with include path

我们在运行Windows 7的Apache 2.4.18服务器上将系统从PHP 5.3升级到5.6时,遇到了包含文件的问题。

我们使用完整路径进行包含,即

include("c:'webSpace'Library'employee.php");

这在5.3中运行得很好。但在更新的5.6和7版本中,以和"e"开头的文件名被转义,因此执行的代码看起来像这个

include("c:'webSpace'Librarymployee.php");

我们提出了两个解决方案:

1.逃离

include("c:'webSpace'Library''employee.php");
  1. 将include路径添加到php.ini文件中,如下所示:

    include_path=".;C:''webSpace''Library"

然后包含的内容看起来是这样的:

include("employee.php");

我的问题是:

1.在版本5.3和5.6之间发生了什么,导致了这个问题

2.为什么不是以"e"开头的文件执行得很好:

include("c:'webSpace'Library'payScale.php");
您看到的是转义序列'e的结果,它是ESC字符(ASCII中的0x1B(27))。这是在PHP 5.4.4中添加的,它解释了版本之间的差异。这种情况只发生在确切的字符序列("''e")中,这解释了为什么其他路径工作正常。

此外,这种情况只发生在双引号字符串中,因此另一种解决方案是简单地在路径周围使用单引号。

需要明确的是,如果您的路径使用任何转义序列,例如'n(换行)或't(制表符),则会出现类似的问题。请参阅下面的链接以获取完整列表。这只是在双引号字符串中使用Windows风格的反斜杠目录分隔符的结果。