require_once inside require_once创建路径问题

时间:2013-01-08 18:08:48

标签: php

我有这个条件:

  • 文件:/public_html/folderX/test.php有一行:require_once '../functions/sendemail.php'
  • 另一方面,/public_html/functions/sendemail.php有一行:require_once '../config.php'

config.php在这种情况下完美加载。

当我尝试将functions/sendemail.php添加到不在folderX中的文件时出现问题,例如:

当我尝试在require_once 'functions/sendemail.php'上添加public_html/test.php时收到此错误消息:

  

警告:require_once(../ config-min.php)[function.require-once]:无法打开流:public_html / test.php中没有这样的文件或目录

如何使require_once '../config.php'内部函数/ sendemail.php“独立”工作,所以无论在任何文件中包含这个'require_once'问题都不会再发生了。

我尝试更改为'include_once',但仍无效。

谢谢!

4 个答案:

答案 0 :(得分:3)

尝试类似

的内容
require_once( dirname(__FILE__).'/../config.php')

答案 1 :(得分:2)

尝试使用__DIR__获取脚本的当前路径。

require_once(__DIR__.'../config.php');

__DIR__仅适用于php 5.3

 __DIR__ 

The directory of the file. If used inside an include, the directory of 
the included file is returned. This is equivalent to dirname(__FILE__). 
This directory name does not have a trailing slash unless it is the root directory. 
(Added in PHP 5.3.0.)

答案 2 :(得分:1)

我相信相对的路径名字在这里咬你。基于当前活动脚本的目录,相对路径(据我所知)。当chdirincluding文件时,PHP不会requiring进入文件夹。对于这种事情,最好的建议(在我有限的经验中)是尽可能使用绝对路径。如下所示:

require_once('../config.php');

会变成:

require_once('/home/myuser/config.php'); // Or wherever the file really is

dirname功能可以帮助解决这种情况。

答案 3 :(得分:1)

您必须了解PHP将目录更改为最外层脚本的目录。当您使用相对路径(例如以./../开头的那些路径或那些不以/开头的路径)时,PHP将使用当前目录来解析相对路径。当您在代码中复制粘贴包含行时,这会导致问题。考虑这个目录结构:

/index.php
/admin/index.php
/lib/include.php

假设两个索引文件包含以下行:

include_once("lib/include.php");

上述行在调用/index.php时有效,但在调用/admin/index.php时无效。

解决方案是不复制粘贴代码,在包含调用中使用正确的相对文件路径:

/index.php       -> include_once("lib/include.php");
/admin/index.php -> include_once("../lib/include.php");