问题是我在与file _ get _ contents("body.html")
位于同一文件夹的类中使用方法body.html
。问题是我收到错误,说找不到该文件。这是因为我来自另一个类需要使用方法file _ get _ contents("body.html")
的文件,突然我必须使用“../body/body.html”作为文件路径..!
这有点奇怪吗?调用方法file _ get _ contents("body.html")
的类与body.html
位于同一个文件夹中,但由于其他类需要该类,我需要一个新的文件路径?!
以下是目录和文件的简短列表:
lib / main / main.php
lib / body / body.php
lib / body / body.html
这是body.php:
class Body {
public function getOutput(){
return file_get_contents("body.html");
}
}
这是main.php:
require '../body/body.php';
class Main {
private $title;
private $body;
function __construct() {
$this->body = new Body();
}
public function setTitle($title) {
$this->title = $title;
}
public function getOutput(){
//prints html with the body and other stuff..
}
}
$class = new Main();
$class->setTitle("Tittel");
echo $class->getOutput();
我要求的是对body.php
与body.html
位于同一文件夹中的错误的修复,但是当另一个类需要body.php
时,我必须更改路径方法file _ get _ contents("body.html")
谢谢!
答案 0 :(得分:8)
PHP基于文件的函数的范围始终从执行堆栈中第一个文件的位置开始。
如果请求index.php
,并且包含classes/Foo.php
,而index.php
又需要包含'body / body.php',则文件范围将为file_get_contents( dirname( __FILE__ ) . '/body.html' );
。
基本上是current working directory。
但是你有一些选择。如果要在与当前文件相同的目录中包含/打开文件,可以执行类似这样的操作
define( 'APP_ROOT', '/path/to/app/root/' );
file_get_contents( APP_ROOT . 'lib/body/body.html' );
或者,您可以在常量中定义基目录并将其用于包含
{{1}}
答案 1 :(得分:3)
作为使用dirname( FILE )回答的人的补充:
PHP 5.3添加 DIR 魔术常量。所以在PHP 5.3中
file_get_contents(__DIR__."/body.html");
应该为你做的伎俩。
答案 2 :(得分:1)
不,这并不奇怪。
PHP使用工作目录运行。这通常是“条目”脚本所在的目录。执行包含的脚本时,此工作目录不会更改。
如果您想阅读当前执行文件目录中的内容,请尝试使用
之类的内容$path = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR."body.php";
答案 3 :(得分:1)
如果您想知道当前文件所在的目录,请尝试dirname(__FILE__)
。你应该可以在那里工作。
答案 4 :(得分:1)
您需要在条目脚本中定义BASEPATH
常量...然后引用file_get_contents()
相对于BASEPATH
所以它可能是这样的:
define("BASEPATH","/var/www/htdocs/");
//and then somewhere else
file_get_contents(BASEPATH."body/body.html");