Nasıl php iş filepaths yapar?

5 Cevap php

Sorun body.html olarak aynı klasörde olan bir sınıf yöntemi file _ get _ contents("body.html") kullanmaktır. Sorun dosyanın bulunamadığını belirten bir hata alıyorum olmasıdır. Başka bir sınıftan ben yöntemi file _ get _ contents("body.html") kullanan dosyası gerektiren, ve aniden filepath gibi ".. / Beden / body.html" kullanmak zorunda çünkü bu ..!

Değil mi biraz garip değil mi? Yöntemini çağırır sınıfı file _ get _ contents("body.html") body.html olarak aynı klasörde, ancak sınıf başka bir yerde başka bir sınıftan gereklidir, çünkü ben yeni bir dosya yolunu gerekiyor?!

İşte dizinler ve dosyalar üzerinde kısa bir listesi:

lib/main/main.php
lib/body/body.php
lib/body/body.html

Bu body.php olduğunu:

class Body {

 public function getOutput(){
  return file_get_contents("body.html");
 }
}

Bu main.php olduğunu:

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();

Ben sormak şey [(0)] body.php body.html olarak aynı klasörde ama ben bir başka class {gerektirir yolunu değiştirmek zorunda hata bir düzeltmedir } başka bir yerde açıklanan yöntemle in file _ get _ contents("body.html")

Teşekkürler!

5 Cevap

PHP'nin dosya tabanlı fonksiyonların kapsamı her zaman yürütme yığını ilk dosyanın noktada başlar.

index.php talep ve classes/Foo.php da 'beden / body.php' dahil ihtiyacı olan içerir ise, dosya kapsamı index.php bu olacaktır.

Esas olarak, current working directory.

Eğer olsa, bazı seçenekler var. Eğer geçerli dosyasıyla aynı dizinde bir dosya açmak / eklemek istiyorsanız, böyle bir şey yapabilirsiniz

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

Veya, bir sabiti bir temel dizini tanımlamak ve eklenmesi için kullanabiliriz

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

Hayır, bu garip değil.

PHP bir çalışma dizini ile çalıştırılır. Bu genellikle "giriş" script dahil bir komut dosyası çalıştırdığınızda bu çalışma dizini değişmez yaşadığı dizin.

Eğer şu anda idam dosyasının dizininde bir şeyler okumak istiyorsanız, böyle bir şey deneyin

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

Sen ... giriş script bir BASEPATH sabit tanımlamak ve sonra BASEPATH için file_get_contents() akrabası tarafından gerekli olan tüm dosyaları başvurmak gerekir

Yani şöyle bir şey olabilir:

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

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

Dirname ile cevap birine ek olarak (FILE):

PHP 5.3 DIR sihirli sabit ekler. Yani PHP 5.3

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

Sizin için hile yapmak gerekir.

Denemek, geçerli dosya ne olduğunu dizin bilmek istiyorsanız dirname(__FILE__). Orada çalışmak gerekir.