Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-相同的路径,但需要获取不同的文件(localhost vs server)_Php - Fatal编程技术网

PHP-相同的路径,但需要获取不同的文件(localhost vs server)

PHP-相同的路径,但需要获取不同的文件(localhost vs server),php,Php,我目前正在做一个写得很差的遗留web项目,但仍然试图理解它的某些奇怪之处。 假设我有以下文件结构 - htdocs/ -- index.php -- vendor/ --- autoload.php -- src/ --- news2.php --- vendor/ ---- autoload.php htdocs/index.php文件包括htdocs/src/news2.php文件。 而htdocs/src/news2.php包含了这一行 require 'vendor/autoload.

我目前正在做一个写得很差的遗留web项目,但仍然试图理解它的某些奇怪之处。 假设我有以下文件结构

- htdocs/
-- index.php
-- vendor/
--- autoload.php
-- src/
--- news2.php
--- vendor/
---- autoload.php
htdocs/index.php
文件包括
htdocs/src/news2.php
文件。 而
htdocs/src/news2.php
包含了这一行

require 'vendor/autoload.php';
本地XAMPP副本按预期工作,包括
htdocs/src/vendor/autoload.php
但是,服务器版本的行为不同,而是包含
htdocs/vendor/autoload.php
。 这是正常的行为吗?原因是什么? 我检查了是否有任何符号链接,但没有。否则,我就不知所措了。
PHP是5.6,服务器或多或少有一个常规的Ubuntu灯。

PHP包含路径是根据PHP.ini配置文件中的
include\u path
值解析的

include\u path
值是由
分隔的目录列表:

include\u path
的默认值类似于
“:/usr/share/php”

在这种情况下,PHP将首先查看当前工作目录(
),然后查看
/usr/share/PHP

如果在此目录中找不到要包含的文件,它将在
require
所在的脚本目录中查找

可能您在本地php.ini中的
include_path
设置前面没有点,并且include路径总是相对于脚本目录进行解析

您可以在服务器上删除
include\u path
设置中的点,或者将
news2.php
中的行更改为
require\u DIR\uuuu/供应商/autoload.php

您还可以使用
get_include_path
检查当前配置,并使用
set_include_path
函数以编程方式更改
include_path
设置,而无需编辑php.ini

从PHP手册:


根据评论进行编辑:

在XAMPP for Windows下,
include\u path
的默认值是
C:\path\u to\u XAMPP\php\PEAR
要与Linux的默认值保持一致,您需要添加

在Windows下,必须使用分号(
)而不是冒号(
)来分隔多个路径。无论如何,如果使用多路径,则必须用引号将所有内容括起来:

include_path= ".;C:path_to_xampp\php\PEAR"
如果这仍然不能解决问题,请记住Apache的配置可以用
php\u值
覆盖任何设置

您可以在
httpd.conf
.htaccess
中查找出现的
php\u值

从PHP手册:


您可以尝试检查php的当前工作目录
echo getcwd()
这两个
autoload.php
文件是相同的还是基本相似的?一个疯狂的猜测是,最初的开发者复制了这些,可能是不必要的。我想知道它是一个自动加载的作曲家(我猜不是)还是一些自制的东西。它可能值得向我们展示autoload.php的内容,因为这可能会提供一些有用的上下文。完全正确!我的服务器路径是
:usr/share/php5:/usr/share/php5/PEAR
,而我的本地路径是
\xampp\php\PEAR
,非常感谢!这是我第一次遇到这个问题,我从来不需要理解
include_path
设置。然而,当我试图将我的本地XAMPP
include_path
更改为
:\XAMPP\php\PEAR
时,由于某种原因,它仍然包含
htdocs/src
目录中的文件……您重新启动了apache服务吗?当然。所以我设置了
include\u path=\xampp\php\PEAR
,重新启动apache
get\u include\u path
输出
,但包含的文件仍然提供
C:\source\htdocs\src\vendor\autoload.php
,值得一提的是,我正在尝试将本地主机与服务器同步,而不是相反的方式(只需重新阅读我的初始帖子,它可能会说明相反的情况)。