php iç içe davranışları içerir

4 Cevap php

Benim kod birçok yerde, ben gibi şeyler yapın:

file1.php:
<?php
include('../file2.php');

file2.php:
<?php
include('anotherdirectory/file3.php');

Depending on the server or settings I try this on, it either sets the relative paths from the "includer" or from the "includee". This is really confusing. So file1 might try to include "../anotherdirectory/file3.php" or it might try "anotherdirectory/file3.php".

Ne ayarları bu davranış dikte? Ben bu üzerinde kontrole sahip olmak istiyorum ...

4 Cevap

Ben göreli yolları kullanmak gerektiğinde durumda ben aşağıdaki sözdizimini kullanın:

include (realpath(dirname(__FILE__)."/another_folder/myfile.php"));

Ben mutlak yollarını kullanarak öneriyoruz. Bu süre yapmak için iyi bir yol hala taşınabilir olma public_html / index.php böyle bir beyanda için:

define('ROOT', dirname(__FILE__));

Sonra yazabilirsiniz çok kolay olan bu gibi içerir:

include(ROOT.'/file.php');

Aksi takdirde, PHP php.ini tarafından tanımlanan dosya include path olup olmadığını görmek için denetler. Orada değilse, o anki komut dosyası göreli bir yol dener. Eğer nestingly farklı göreli konumlarını dosyaları dahil edilebilir beri öngörülemeyen ve unmaintainable Hangi.

Edit: Sürekli sınıf dosyaları bir sürü dahil ediyorsanız, içine bakmak isteyebilirsiniz autoloading. Eğer bir nesne yönelimli programlama tarzı konum eğer her şey yol basit hale getirir. Ben çok uzun bir süre için benim kod kelime 'include' yazılı şahsen hiç.

Düzenleme 2: Sen kullanabilirsiniz php.ini directive auto_prepend_file otomatik komut her birine KÖK tanımı ile bir satır dosya eklemek için.

Php öğrenme eğrisi üzerinde biri olarak, ben yolları dahil başvurmak için en iyi yolu bulduk yerleşik $ _SERVER superglobali kullanarak, mutlak konum değil, göreli gereğidir. Kendi dosyaları Ben başarı ile bu kullanıyorum:

include $_SERVER [ 'DOCUMENT_ROOT' ] . '/path_from_root/file_name.php';

Dahil dosya benim çağıran dosyasına göre, oturuyor ve ben tam sunucu yolu yazarak hakkında elle endişelenmenize gerek yok burada bu şekilde farketmez. (Belki bariz ..) Bu olursa olsun içeren çağrı iç içe nasıl çalışır, ve eğer / I, örneğin, farklı bir dizine arama dosyayı taşıdığınızda.

Sen dahil gerektirir, ve bir yol gereken herhangi bir diğer dosya ile ilgili fonksiyonları ile bu yöntemi kullanabilirsiniz.

İlgili bir not ..

$_SERVER [ 'PHP_SELF' ]

Geçerli dosyanın (köküne göre) yolunu dönecektir. Ben de bu biraz kullanın.

$ _SERVER Burada kontrol etmek isteyebilirsiniz diğer yararlı bilgi vardır:

http://php.net/manual/en/reserved.variables.server.php

Bu eski bir konu ise özür dilerim, ben burada yeniyim.

EDIT: daha sonra kullanmak üzere bir değişkene bu 'DOCUMENT_ROOT' kurtarabilir, ama sonra değişken kapsamı hakkında endişelenmenize gerek, çünkü yeni deneyim ben buna karşı tavsiye ederim. Yazılı olarak dahil hattı ne olursa olsun geçerli kapsamı her zaman çalışacaktır.

get_include_path() Bunun için sunucu yapılandırma ne olduğunu görebilirsiniz ile. Çoğu durumda bu gibi görünüyor:

.:/usr/lib/php

Bunun anlamı, ilk etapta php dahil bir dosya arıyor başka içeren yazısının dizin. Orada mevcut değilse, php / usr / php / lib arıyor. Eğer daha fazla yol eklerseniz, php de eşleşen dosya için orada bakacağız.

Başka birini içeren bir dosyayı, eklerseniz, "kök" yol ilk başta başka bir yer dosyasının yoludur.