4

我有这个条件:

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

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

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

当我尝试添加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

4 回答 4

5

尝试类似的东西

require_once( dirname(__FILE__).'/../config.php')
于 2013-01-08T18:13:55.353 回答
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.)
于 2013-01-08T18:22:52.843 回答
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");
于 2013-01-08T18:16:40.777 回答
1

我相信相对路径名在这里咬你。相对路径(据我所知)基于当前活动脚本的目录。PHP 不chdir进入文件夹时includingrequiring文件。最好的建议(以我有限的经验)是尽可能使用绝对路径。所以像:

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

会成为:

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

dirname函数可以在这种情况下提供帮助。

于 2013-01-08T18:14:59.980 回答