级联的奇怪行为包括(两个服务器的行为不同)


Strange behaviour with cascading includes (2 servers acts differently)

我们重现了在一个生产服务器上发生的一种错误。它是这样的:

我们有3个PHP文件

test1.php:

Test 1
<?php require_once('test2.php'); ?>

test2.php:

Test 2
<?php require_once('test3.php'); ?>

test3.php

Test 3

include_path在两个服务器上是相同的,并且由于其他原因没有包含在其中:

php_value include_path/var/www/xxxxxx/php/zendframework/1.11.x/:/var/www/xxxxxx/php/

在我们的开发服务器上一切都很好(输出Test 1 Test 2 Test 3),在线,当我们上传文件时,我们第一次加载/test1.php,它是ok的,第二次调用等等,我们得到:

测试1测试2

警告:require_once(test3.php) [function。Require-once]:失败在第2行中没有这样的文件或目录

致命错误:require_once() [function。:打开失败要求"test3.php"(include_path = "/var/www/xxxxxx/php/ZendFramework/1.11.x/:/var/www/xxxxxx/php/')在第2行

除了include_path之外,还有什么我们应该知道的影响PHP中包含文件行为的事情吗?我不得不区分可能发生的事情,因为我暂时无法访问服务器配置文件。为什么它第一次在生产服务器上工作,然后就失败了?我只是无法解释这可能是什么。

编辑:我们有时也会在错误信息中得到奇怪的字符(以及每次刷新时的更改):

[…在第4行°µ4ª中没有这样的文件或目录

你用的是什么版本控制软件?我们过去在使用Perforce时遇到过一些问题,我们从开发集成到生产,文件没有被复制到所有的负载均衡器上。这是棘手的故障排除第一次,因为它似乎是一个不一致的PHP错误,并取决于您正在检查的生产服务器,该文件将最有可能在那里。