Php 包含/要求路径解析

Php 包含/要求路径解析,php,ubuntu,include,Php,Ubuntu,Include,我在PHP中遇到这样的情况,一台服务器上缺少一个include,而另一台服务器上没有(我没有设置服务器,所以我不能告诉您更多;我不是真正的devops人,所以我在这里问这个问题)。两台服务器上的代码都是相同的,并且都运行带有PHP FPM 5.5.9的Ubuntu 14.04 以下是一个例子: file1.php <?php var_export('1'); include_once('somedir/file2.php'); include_once('include.php

我在PHP中遇到这样的情况,一台服务器上缺少一个
include
,而另一台服务器上没有(我没有设置服务器,所以我不能告诉您更多;我不是真正的devops人,所以我在这里问这个问题)。两台服务器上的代码都是相同的,并且都运行带有PHP FPM 5.5.9的Ubuntu 14.04

以下是一个例子:

file1.php

<?php
  var_export('1');
  include_once('somedir/file2.php');
  include_once('include.php');
?>

include.php

<?php
  var_export('2');

  function foo() {}
?>
<?php
  var_export('4');

  function foo() {}
?>

somedir/file2.php

<?php
  var_export('3');
  //notice it has the same name as include.php in the starting directory
  include_once('include.php');
?>

somedir/include.php

<?php
  var_export('2');

  function foo() {}
?>
<?php
  var_export('4');

  function foo() {}
?>

如果导航到file1.php,工作服务器将打印1、3、2。如果我在“断开”的服务器上导航到file1.php,我会得到一个错误,说函数foo不能被重新定义


我的“坏”服务器上是否存在导致它包含第二个包含的设置?谢谢

在两个系统上都将其放入file1.php中:
echo get_include_path()看看发生了什么(TM)。

基本上就是错误所说的,只有定义了特定的函数,如果你包括两个文件,它们都试图定义<代码>()/<代码>,它报告的错误并不是你认为会被破坏的。也许您在没有投诉的服务器上报告了错误。我的问题是,为什么一台服务器包含
include.php
,为什么一台服务器同时包含
include.php
somedir/include.php
。这两个函数(foo)是不同的还是相同的?他们两人都被成功呼叫的可能性很小。不能有两个同名的函数。请在一台服务器或另一台服务器上检查
set\u include\u path
。我敢打赌,一个有效的包含路径集。我认为
phpinfo()
将告诉您。嗯,并告诉我们发生了什么,好吗?看起来有人正在使用nginx中的匹配模式将php文件定向到php fpm,并将当时的include_路径设置为$document_root/someotherstuff。返回到以开头的正常包含路径。似乎产生了我所期望的行为。谢谢