Cara mudah untuk memiliki jalan yang mutlak dari naskah awalnya dieksekusi , dalam naskah dan script lainnya termasuk dengan include
, require
, require_once
adalah dengan menggunakan konstan dan menyimpan ada jalan naskah saat di awal dari script utama :
define( 'SCRIPT_ROOT', __FILE__ );
Solusi di atas cocok ketika ada satu "utama" skrip yang include
setiap skrip lain yang diperlukan, seperti di sebagian besar aplikasi web.
Jika bukan itu masalahnya dan mungkin ada beberapa "skrip intital" maka untuk menghindari redefinisi dan agar jalur yang benar disimpan di dalam konstanta setiap skrip dapat dimulai dengan:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
Catatan tentang jawaban yang saat ini diterima :
jawabannya menyatakan bahwa jalur skrip yang awalnya dijalankan adalah elemen pertama dari array yang dikembalikan oleh get_included_files()
.
Ini adalah solusi yang cerdas dan sederhana dan -pada saat penulisan- (kita hampir menggunakan PHP 7.4.0) itu berhasil .
Namun dengan melihat dokumentasi tidak disebutkan bahwa skrip yang awalnya dieksekusi adalah item pertama dari array yang dikembalikan oleh get_included_files()
.
Kami hanya membaca
Script yang awalnya dipanggil dianggap sebagai "file yang disertakan," sehingga akan terdaftar bersama dengan file yang direferensikan oleh include dan keluarga.
Pada saat penulisan " skrip awalnya disebut " adalah yang pertama dalam array tetapi - secara teknis - tidak ada jaminan bahwa ini tidak akan berubah di masa depan.
Catatan tentang realpath()
, __FILE__
dan __DIR__
:
Lain telah disarankan dalam jawaban mereka penggunaan __FILE__
, __DIR__
, dirname(__FILE__)
, realpath(__DIR__)
...
dirname(__FILE__)
sama dengan __DIR__
(diperkenalkan dalam PHP 5.3.0), jadi gunakan saja __DIR__
.
Keduanya __FILE__
dan __DIR__
selalu jalur absolut sehingga realpath()
tidak perlu.