【问题标题】:require_once works without include pathrequire_once 无需包含路径即可工作
【发布时间】:2011-04-02 13:27:19
【问题描述】:

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

编辑:

//-- file 1.php
//-- long list of requires...
set_include_path('.');
echo get_include_path();
require_once '2.php';

当 1.php 和 2.php 位于不同的文件夹中时,上述工作正常。

【问题讨论】:

  • 请详细说明所有相关文件的位置。
  • 有任何可以添加的代码吗?看起来确实很奇怪。
  • @VolkerK - 这里我们只有两个文件 1.php 和 2.php,它们位于两个不同的位置.. @Kevin - 添加了代码.. 感谢 cmets..
  • “不同的位置”像什么?喜欢/home/www/lala/1.php 和/var/temp/2.php?
  • 不同的位置,例如 /var/www/test/1.php 和 /var/www/test/abcd/2.php...你能解释一下这有什么关系吗??

标签: php require-once


【解决方案1】:

在设置空的包含路径后尝试echo get_include_path(),它可能设置在其他位置(例如在 Web 服务器配置文件中)。

【讨论】:

  • 描述中有错别字...我尝试放置一个 echo get_include_path().. 它在我的情况下列出了设置的路径 (.)..
【解决方案2】:

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

<?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';

【讨论】:

  • require 和 include 在查找文件时使用当前工作目录。因此,如果脚本将 cwd 设置为 2.php 的文件夹(如 VolkerK 建议的那样),则会发生所见行为。另一种选择是,1.php 被包含在 2.php 文件夹中的脚本中,因此 cwd 由于初始调用而存在。
  • @ZeissS - 我已经在 2.php 中做了一个 echo getcwd() ,但这里不是这样......
【解决方案3】:

为了争论,如果你把 2.php 放在和 1.php 相同的位置,新文件会被包含而不是旧文件吗?

你能告诉 use 你的open_basedir 的值是什么吗?

【讨论】:

  • 如果我把它们放在同一个地方,它工作正常.. open_basedir 在“无价值”中的值......我尝试在 require_once 中从 2.php 更改为 pinaki/2.php 并且它失败了...终于有点理智了:)...
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    PHP 中有一些包含魔法,我以前遇到过。
    我相信与自动加载相关的东西。
    它总是在运行类文件所在的文件夹中查找

    【讨论】:

    • hmmm..这看起来很有趣...我从哪里开始寻找任何自动加载魔法???
    • @pinaki 不知道,我正在研究源代码哈哈 :) 可能在一些 PHP OOP 手册中,因为自动加载是 OOP 功能
    猜你喜欢
    • 2021-09-20
    • 2011-04-03
    • 2021-11-07
    • 1970-01-01
    • 2021-05-08
    • 2012-03-10
    • 2018-04-02
    • 2017-12-04
    相关资源
    最近更新 更多