我有这个条件:
/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',但仍无效。
谢谢!
答案 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)
我相信相对的路径名字在这里咬你。基于当前活动脚本的目录,相对路径(据我所知)。当chdir
或including
文件时,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");