我们在运行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");
将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风格的反斜杠目录分隔符的结果。
源