Saya memiliki struktur direktori seperti berikut;
script.php
inc / include1.php
inc / include2.phpobjek / objek1.php
objek / objek2.phpsabun / sabun.php
Sekarang, saya menggunakan objek tersebut di keduanya script.php
dan /soap/soap.php
, saya dapat memindahkannya, tetapi saya ingin struktur direktori seperti itu untuk alasan tertentu. Ketika menjalankan script.php
path include adalah inc/include.php
dan ketika menjalankan /soap/soap.php
itu ../inc
, path absolut kerja, /mnt/webdev/[project name]/inc/include1.php...
Tapi itu solusi yang jelek jika aku pernah ingin pindah direktori ke lokasi yang berbeda.
Jadi, apakah ada cara untuk menggunakan jalur relatif, atau cara untuk menghasilkan secara terprogram "/mnt/webdev/[project name]/"
?
DOCUMENT_ROOT
Anda dapat menggunakan jalur relatif. Coba
__FILE__
. Ini adalah konstanta PHP yang selalu mengembalikan jalur / nama file dari skrip tempatnya berada. Jadi, disoap.php
, Anda dapat melakukan:Solusi lain adalah menetapkan jalur penyertaan di httpd.conf atau file .htaccess Anda.
sumber
/
di awal ekspresi yang dikutip, untuk memisahkan..
dari nama FILE .__DIR__
daripada harus menggunakandirname(__FILE__)
. (PHP docs)include dirname(__FILE__).'/../inc/include.php';
Jangan lupa "/" sebelum jalur relatif.Cara lain untuk menangani ini yang sama sekali menghilangkan kebutuhan akan penyertaan adalah dengan menggunakan fitur muat otomatis . Memasukkan semua yang dibutuhkan skrip Anda "Just in Case" dapat menghambat kinerja. Jika penyertaan Anda adalah semua definisi kelas atau antarmuka, dan Anda ingin memuatnya hanya saat diperlukan, Anda dapat membebani
__autoload()
fungsi dengan kode Anda sendiri untuk menemukan file kelas yang sesuai dan memuatnya hanya saat dipanggil. Berikut adalah contoh dari manual:Selama Anda menyetel variabel include_path sesuai, Anda tidak perlu menyertakan file kelas lagi.
sumber
lihat di http://au.php.net/reserved.variables
Saya pikir variabel yang Anda cari adalah:
$_SERVER["DOCUMENT_ROOT"]
sumber
Anda dapat menentukan sebuah konstanta dengan jalur ke direktori root proyek Anda, dan kemudian meletakkannya di awal jalur.
sumber
Opsi lain, terkait dengan Kevin, adalah menggunakan
__FILE__
, tetapi mengganti nama file php dari dalamnya:Saya telah menggunakan ini untuk sementara waktu. Satu-satunya masalah adalah terkadang Anda tidak punya
$_SERVER['SCRIPT_NAME']
, tetapi terkadang ada variabel lain yang serupa.sumber
Saya menemukan ini bekerja dengan sangat baik!
Menggunakan:
sumber
Saya pikir cara terbaik adalah memasukkan include Anda ke dalam jalur include PHP Anda. Ada berbagai cara untuk melakukan ini tergantung pada penyiapan Anda.
Kemudian Anda bisa langsung merujuk ke
dari dalam file apa pun di mana pun itu berada, baik dalam penyertaan atau di file yang dapat diakses web Anda, atau tingkat subdirektori bertingkat apa pun.
Ini memungkinkan Anda untuk memiliki file yang disertakan di luar root server web, yang merupakan praktik terbaik.
misalnya
Selain itu, periksa __autoload untuk mengetahui pemuatan lambat file kelas
http://www.google.com/search?q=setting+php+include+path
http://www.google.com/search?q=__autoload
sumber
Saya menggunakan baris kode ini. Ini kembali ke "atas" dari pohon situs, lalu pergi ke file yang diinginkan.
Misalnya, saya memiliki pohon file ini:
Saya dapat menyertakan file functions.php dari manapun saya berada, hanya dengan menyalin paste
Jika Anda perlu menggunakan kode ini berkali-kali, Anda dapat membuat fungsi yang mengembalikan
str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))
bagian tersebut. Kemudian masukkan saja fungsi ini di file pertama yang Anda sertakan. Saya memiliki file "initialize.php" yang saya sertakan di bagian paling atas setiap halaman php dan yang berisi fungsi ini. Lain kali saya harus menyertakan file, saya sebenarnya hanya menggunakan fungsi (bernamapath_back
):sumber
Oh ya, tentu saja. Jadi misalnya, kami menggunakan satu lapisan subfolder, umumnya:
Anda harus berhati-hati dengan terlalu mengandalkan jalur penyertaan di situs dengan lalu lintas sangat tinggi, karena php harus mencari melalui direktori saat ini dan kemudian semua direktori di jalur penyertaan untuk melihat apakah file Anda ada di sana dan ini dapat memperlambat segalanya jika Anda merasa terpukul.
Jadi misalnya jika Anda melakukan MVC, Anda akan meletakkan path ke application directoy Anda di path include dan kemudian tentukan refer to things di formulir.
atau terserah.
Tetapi secara umum, ini hanya memungkinkan Anda bekerja dengan jalur yang sangat pendek di PHP Anda yang akan berfungsi dari mana saja dan jauh lebih mudah dibaca daripada semua dokumen root malarkey realpath itu.
Manfaat dari alternatif berbasis skrip yang disarankan orang lain adalah mereka bekerja di mana saja, bahkan di kotak bersama; mengatur jalur penyertaan membutuhkan sedikit lebih banyak pemikiran dan usaha tetapi seperti yang saya sebutkan memungkinkan Anda mulai menggunakan __autoload yang paling keren.
sumber
Jika Anda akan menyertakan jalur tertentu di sebagian besar file dalam aplikasi Anda, buat variabel Global ke folder root Anda.
Sekarang variabel Global " APPLICATION_PATH " ini dapat digunakan untuk menyertakan semua file daripada memanggil realpath () setiap kali Anda menyertakan file baru.
EX:
Semoga membantu ;-)
sumber