Php require_once在没有包含路径的情况下工作

Php require_once在没有包含路径的情况下工作,php,require-once,Php,Require Once,我的文件1.php有一个require_once for 2.php(它们都在不同的文件夹中)。我遇到的问题是1.php似乎神奇地包含了2.php,因为2.php的路径不在1.php中。当然,我甚至在require_once“2.php”之前添加了一个set_include_path('.'),但它仍然有效。。。有没有什么明显的东西我遗漏了,或者这很奇怪 编辑: 当1.php和2.php在不同的文件夹中时,上述方法可以正常工作。Tryecho get_include_path()设置空包含路径后

我的文件1.php有一个require_once for 2.php(它们都在不同的文件夹中)。我遇到的问题是1.php似乎神奇地包含了2.php,因为2.php的路径不在1.php中。当然,我甚至在require_once“2.php”之前添加了一个set_include_path('.'),但它仍然有效。。。有没有什么明显的东西我遗漏了,或者这很奇怪

编辑:


当1.php和2.php在不同的文件夹中时,上述方法可以正常工作。

Try
echo get_include_path()
设置空包含路径后,可以在其他地方设置它(如web服务器配置文件中)。

Try
echo get_include_path()
设置空包含路径后,可以在其他地方设置它(与web服务器配置文件类似)。

很简单,但可能其他包含的文件之一更改了当前工作目录:

<?php
echo 'cwd at the beginning of 1.php: ', getcwd(), "\n";
//-- file 1.php
//-- long list of requires...
set_include_path('.');
echo 'include_path: ', get_include_path(), " \n";
echo 'cwd: ', getcwd(), "\n";
require_once '2.php';

很简单,但可能其他包含的文件之一更改了当前工作目录:

<?php
echo 'cwd at the beginning of 1.php: ', getcwd(), "\n";
//-- file 1.php
//-- long list of requires...
set_include_path('.');
echo 'include_path: ', get_include_path(), " \n";
echo 'cwd: ', getcwd(), "\n";
require_once '2.php';

为了便于讨论,如果将2.php放在与1.php相同的位置,是否会包含新文件而不是旧文件


你能告诉use你的
open\u basedir
的值是多少吗?

为了便于讨论,如果你把一个2.php文件放在与1.php相同的位置,新文件会被包含而不是旧文件吗


你能告诉use你的
open\u basedir
的值是什么吗?

也许你在文件1的路径中有一个与文件2同名的文件。

也许你在文件1的路径中有一个与文件2同名的文件。

PHP中有一些包含魔法,我以前见过它。
我相信与自动加载相关的东西。

它总是在运行类的文件所在的文件夹中查找

PHP中有一些include magic,我以前见过它。
我相信与自动加载相关的东西。


它总是显示在运行类的文件所在的文件夹中

请更详细地说明所有相关文件的位置。是否有可以添加的代码?这看起来很奇怪。@VolkerK-这里我们只有两个文件1.php和2.php,它们位于两个不同的位置。@Kevin-添加了代码。。感谢您的评论。。“不同地点"比如什么?比如
/home/www/lala/1.php
/var/temp/2.php
?不同的位置,比如/var/www/test/1.php和/var/www/test/abcd/2.php……你能解释一下这是如何相关的吗?请更具体地说明所有涉及的文件的位置。你能添加任何代码吗?这看起来很奇怪。@VolkerK-这里我们只有两个文件1.php和2.php,它们位于两个不同的位置。@Kevin-添加了代码。.感谢您的评论。.“不同的位置”比如什么?比如
/home/www/lala/1.php
/var/temp/2.php
?不同的位置,比如/var/www/test/1.php和/var/www/test/abcd/2.php……你能解释一下这有什么关系吗?描述中有一个打字错误……我试着放一个echo get\u include\u path()。它列出了设置的路径(.)在我的例子中..描述中有一个输入错误..我尝试放置一个echo get_include_path()…在我的例子中它列出了设置的路径(.)..
require
include
在查找文件时使用当前的工作目录。因此,如果脚本将cwd设置为2.php文件夹(如VolkerK建议的那样)另一个选项是,
1.php
包含在
2.php
文件夹中的脚本中,因此由于初始调用,cwd在那里。@ZeissS-我已经做了一个echo getcwd()在2.php内部,这里不是这样…
require
include
在查找文件时使用当前工作目录。因此,如果脚本将cwd设置为2.php文件夹(如VolkerK建议的那样)另一个选项是,
1.php
包含在
2.php
文件夹中的脚本中,因此由于初始调用,cwd在那里。@ZeissS-我已经做了一个echo getcwd()在2.php中,情况并非如此……如果我将它们放在同一个位置,它就可以正常工作……在“无值”中打开\u basedir值……我曾尝试在require\u中从2.php更改为pinaki/2.php,但失败了……最后,有些理智:)……如果我将它们放在同一个位置,它就可以正常工作。。在“无值”中打开\u basedir值。。。我曾尝试在require_中从2.php更改为pinaki/2.php,但失败了。。。终于理智了:)……嗯。。这看起来很有趣。。。我从哪里开始寻找任何自动加载的魔法???@pinaki dunno,我正在寻找一些PHP OOP手册中的源代码lol:),因为自动加载是OOP特性HMMM。。这看起来很有趣。。。我从哪里开始寻找任何自动加载的魔法???@pinaki dunno,我正在寻找一些PHP OOP手册中的源代码lol:),因为自动加载是OOP特性