2009-11-10 73 views
2

問題是我在與body.html位於同一文件夾中的類中使用方法file _ get _ contents("body.html")。問題是我得到一個錯誤,說該文件找不到。這是因爲我從另一個班級需要使用方法file _ get _ contents("body.html")的文件,並且突然間我必須使用「../body/body.html」作爲文件路徑。php中的filepath如何工作?

這是不是有點奇怪?調用方法file _ get _ contents("body.html")的類與body.html位於同一文件夾中,但由於該類是其他位置的其他類所必需的,因此我需要一個新的文件路徑?!

這裏結束了目錄和文件的簡短列表:

的lib /主/ main.php
的lib /體/ body.php
的lib /體/ body.html

這是身體.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")

由於改變路徑!

回答

8

PHP的基於文件的函數的範圍始終從執行堆棧中的第一個文件開始。

如果index.php被請求,並且包括classes/Foo.php而後者需要包含'body/body.php',則文件範圍將爲index.php

本質上,current working directory

雖然有一些選擇。如果您要包括/開在同一個目錄作爲當前文件的文件,你可以做這樣的事情

file_get_contents(dirname(__FILE__) . '/body.html'); 

或者,你可以在一個恆定的定義基本目錄和使用,爲您的包容

define('APP_ROOT', '/path/to/app/root/'); 
file_get_contents(APP_ROOT . 'lib/body/body.html'); 
+0

這也幫助了我,謝謝! – ItsMeDom 2014-03-31 03:04:11

1

不,這並不奇怪。

PHP與工作目錄一起運行。這通常是「條目」腳本所在的目錄。當您執行包含的腳本時,此工作目錄不會更改。

如果你想讀在當前執行文件的目錄的東西,你可以試試

$path = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR."body.php"; 
1

如果你想知道當前文件在哪個目錄,嘗試dirname(__FILE__)。你應該可以從那裏工作。

1

您需要定義一個BASEPATH常數項腳本...,然後引用由file_get_contents()相對需要對BASEPATH

所以它可以像所有文件:

define("BASEPATH","/var/www/htdocs/"); 

//and then somewhere else 
file_get_contents(BASEPATH."body/body.html"); 
3

作爲除了一個誰與目錄名回答(FILE):

PHP 5.3增加了一個DIR魔法不變。所以在PHP 5.3中

file_get_contents(__DIR__."/body.html"); 

應該爲你做竅門。