Bagaimana Anda memasukkan file yang lebih dari 2 direktori kembali. Saya tahu Anda dapat menggunakan ../index.php
untuk memasukkan file yang merupakan 2 direktori kembali, tetapi bagaimana Anda melakukannya untuk 3 direktori kembali? Apakah ini masuk akal? Saya sudah mencoba .../index.php
tetapi tidak berhasil.
Saya memiliki file /game/forum/files/index.php
dan menggunakan PHP termasuk untuk menyertakan file. Yang terletak di /includes/boot.inc.php
; /
menjadi direktori root.
php
include
filesystems
hakre
sumber
sumber
Jawaban:
..
memilih direktori induk dari arus. Tentu saja, ini bisa dirangkai:Ini akan menjadi dua direktori.
sumber
define
akan digunakan di sini, tetapi (1) itu bahkan bukanlah pertanyaan di sini. Dan (2) Anda masih akan menggunakan jalur relatif di Andadefine
, Kecuali Anda benar-benar membuat kode keras seluruh jalur server absolut dan saya akan menahannya karena itu hanya memiliki kelemahan. Atau (alternatif ketiga) Anda bisa menggunakan manipulasi string untuk mengekstrak direktori induk dari jalur (diperluas) saat ini tetapi sekali lagi ini tidak memiliki keuntungan apa pun untuk menggunakan jalur relatif./../
dapat bekerja atau../
dapat bekerja, atau tidak dapat bekerja pada tiga komputer yang berbeda dengan pengaturan lingkungan yang sama persis../
dan../../
(catatan: tidak ada garis miring!), Berfungsi pada semua sistem operasi modern. Ini digunakan untuk tidak bekerja pada Windows dan ( lama lalu) Macintosh tetapi sekarang bekerja di mana-mana, dan memiliki setidaknya satu tahun sepuluh terakhir. Jika tidak berfungsi di suatu tempat maka alasannya adalah struktur file berbeda, dan / atau Anda berada di direktori kerja yang berbeda. Tapi itu tidak ada hubungannya dengan kode ini./../
alih - alih../
pada lingkungannya./../
tidak masuk akal pada sistem apa pun (ini setara dengan/
, atau kesalahan). Apakah Anda yakin tidak sedang menempelkan sesuatu di depannya?Untuk memasukkan file satu direktori ke belakang, gunakan
'../file'
. Untuk dua direktori kembali, gunakan'../../file'
. Dan seterusnya.Meskipun, secara realistis Anda tidak boleh melakukan include yang berhubungan dengan direktori saat ini. Bagaimana jika Anda ingin memindahkan file itu? Semua tautan akan putus. Cara untuk memastikan bahwa Anda masih dapat menautkan ke file lain, sambil tetap mempertahankan tautan tersebut jika Anda memindahkan file, adalah:
require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');
DOCUMENT_ROOT
adalah variabel server yang mewakili direktori dasar tempat kode Anda berada.sumber
. = current directory .. = parent directory
Jadi
../
memberi Anda satu direktori kembali, bukan dua .Rantai
../
sebanyak yang diperlukan untuk naik 2 level atau lebih.sumber
include dirname(__FILE__).'/../../index.php';
adalah taruhan terbaik Anda di sini, dan ini akan menghindari sebagian besar bug jalur relatif yang dapat Anda temui dengan solusi lain.
Memang, ini akan memaksa penyertaan untuk selalu relatif terhadap posisi skrip saat ini tempat kode ini ditempatkan (lokasi mana yang kemungkinan besar stabil, karena Anda menentukan arsitektur aplikasi Anda). Ini berbeda dari hanya melakukan
include '../../index.php'
yang akan menyertakan secara relatif ke skrip yang menjalankan (juga disebut "memanggil") dan kemudian secara relatif ke direktori kerja saat ini , yang akan mengarah ke skrip induk yang menyertakan skrip Anda, alih-alih menyelesaikan dari jalur skrip yang Anda sertakan .Dari dokumentasi PHP:
Dan posting tertua yang saya temukan mengutip trik ini berasal dari tahun 2003, oleh Tapken .
Anda dapat menguji dengan pengaturan berikut:
Buat tata letak seperti ini:
htdocs ¦ parent.php ¦ goal.php ¦ +---sub ¦ included.php ¦ goal.php
Dalam
parent.php
, menempatkan:<?php include dirname(__FILE__).'/sub/included.php'; ?>
Dalam
sub/included.php
, menempatkan:<?php print("WRONG : " . realpath('goal.php')); print("GOOD : " . realpath(dirname(__FILE__).'/goal.php')); ?>
Hasil saat mengakses
parent.php
:Seperti yang bisa kita lihat, dalam kasus pertama, jalur diselesaikan dari skrip pemanggil
parent.php
, sedangkan dengan menggunakandirname(__FILE__).'/path'
trik, penyertaan dilakukan dari skripincluded.php
tempat kode ditempatkan.Waspadalah, berikut ini TIDAK setara dengan trik di atas yang bertentangan dengan yang bisa dibaca di tempat lain:
include '/../../index.php';
Memang, prepending
/
akan berfungsi, tetapi itu akan menyelesaikan sepertiinclude ../../index.php
dari skrip panggilan (perbedaannya adalahinclude_path
tidak akan terlihat setelah itu jika gagal). Dari dokumen PHP :sumber
..
jalan tengah (relatif / absolut)...
digunakan di tengah include. itu harus selalu menjadi bagian pertama dari../
adalah satu direktori, Ulangi untuk dua../../
atau bahkan tiga direktori :../../../
dan seterusnya.Menentukan konstanta dapat mengurangi kebingungan karena Anda akan menelusuri ke belakang ke direktori ayat
Anda dapat mendefinisikan beberapa konstanta seperti ini:
define('BD', '/home/user/public_html/example/'); define('HTMLBD', 'http://example.com/');
Saat menggunakan 'BD' atau 'direktori dasar' saya, tampilannya seperti ini:
file(BD.'location/of/file.php');
menetapkan(); referensi
sumber
sumber
Setiap contoh
../
berarti naik / mundur satu direktori.sumber
berikut adalah cara untuk mengakses berbagai direktori Anda: -
./ = Your current directory ../ = One directory lower ../../ = Two directories lower ../../../ = Three directories lower
sumber
Anda dapat melakukannya
../../directory/file.txt
- Ini kembali ke dua direktori.../../../
- ini berlaku tiga. dllsumber
sumber
Tapi hati- SANGAT -hati tentang membiarkan pengguna memilih file. Anda tidak benar-benar ingin mengizinkan mereka mendapatkan file bernama, misalnya,
atau file sistem sensitif lainnya.
(Maaf, sudah lama sejak saya menjadi sysadmin linux, dan saya pikir ini adalah file sensitif, dari yang saya ingat)
sumber
sumber
jika Anda menggunakan php7 Anda dapat menggunakan fungsi dirname dengan parameter level 2, misalnya:
dirname("/usr/local/lib", 2);
parameter kedua "2" menunjukkan berapa banyak level
referensi dirname
sumber
Saya merekomendasikan untuk menggunakan
__DIR__
untuk menentukan direktori php file saat ini . Periksa di sini untuk mengetahui alasannya.__DIR__ . /../../index.php
sumber
termasuk lebih dari direktori dapat diproses oleh file proxy
..... | _proxy.php
dbsettings.php: $host='localhost'; $user='username': $pass='pass'; proxy.php: include_once 'db/dbsettings.php requiredDbSettings.php: include_once './../proxy.php';
sumber
Coba ini
contoh ini adalah satu direktori kembali
require_once('../images/yourimg.png');
contoh ini adalah dua direktori kembali
require_once('../../images/yourimg.png');
sumber
Coba
../../
. Anda dapat memodifikasinya karena ini akan membawa Anda kembali ke dua direktori. Pertama, buka direktori root, lalu akses direktori yang diperlukan.Misal Anda berada di dalam
root/inc/usr/ap
dan ada direktori lainroot/2nd/path
. Anda dapat mengaksespath
direktori dariap
seperti ini:../../2nd/path
pertama pergi ke root daripada direktori yang diinginkan. Jika tidak berfungsi, silakan bagikan.sumber
jika Anda menyertakan
/
di awal penyertaan, penyertaan akan diambil sebagai jalur dari akar situs.jika situs Anda adalah http://www.example.com/game/forum/files/index.php, Anda dapat menambahkan penyertaan ke /includes/boot.inc.php yang akan berubah menjadi http://www.example.com /includes/boot.inc.php .
Anda harus berhati-hati dengan
..
traversal karena beberapa server web telah menonaktifkannya; ini juga menyebabkan masalah saat Anda ingin memindahkan situs Anda ke mesin / host baru dan strukturnya sedikit berbeda.sumber
Saya melihat jawaban Anda dan saya menggunakan path termasuk dengan sintaks
require_once '../file.php'; // server internal error 500
dan server http (Apache 2.4.3) mengembalikan kesalahan internal 500.
Ketika saya mengubah jalan ke
require_once '/../file.php'; // OK
semuanya baik-baik saja.
sumber