Dalam lingkungan server yang berbeda, PHP $_SERVER['DOCUMENT_ROOT']
super global terkadang memiliki garis miring dan terkadang tidak. Saya akan berpikir masalah ini berkaitan langsung dengan bagaimana Apache DocumentRoot
didefinisikan dalam httpd.conf
file:
yaitu saya akan berpikir bahwa jika httpd.conf
tidak mengandung garis miring:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
maka echo $_SERVER['DOCUMENT_ROOT']
harus memberikan / var / www / live / saat ini
dan jika httpd.conf
memang mengandung garis miring:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current/
...
maka echo $_SERVER['DOCUMENT_ROOT']
harus memberikan / var / www / live / current /
Ini adalah kasus di Ubuntu 10,04 tetapi pada RHEL 5,5 garis miring ditambahkan ke $_SERVER['DOCUMENT_ROOT']
bahkan jika tidak ada yang didefinisikan pada Apache.
Adakah yang tahu mengapa ini terjadi? Apakah ada parameter konfigurasi yang saya lewatkan?
Sebagai referensi:
- PHP 5.3.3 dari RHEL (masalah terjadi): PHP 5.3.3 (cli) (dibangun: 23 Juli 2010 16:26:53)
- Versi PHP Ubuntu (tidak ada masalah): PHP 5.3.2-1ubuntu4.2 dengan Suhosin-Patch (cli) (dibangun: 13 Mei 2010 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
. Secara otomatis menghapus semua banyak garis miring dan juga garis miring. Jika Anda selalu ingin garis miring menyatukannya dengan hasil panggilan di atasrealpath()
. Tidak di dalamnya.rtrim($_SERVER['DOCUMENT_ROOT'],'/\\').'/'
harus sedikit lebih cepat daripada semua hal yang dapat dilakukan realpath.http://httpd.apache.org/docs/2.0/mod/core.html mengatakan: DocumentRoot harus ditentukan tanpa garis miring.
sumber
Root dokumen di lingkungan Apache dapat didefinisikan di lebih dari satu tempat.
Ya,
httpd.conf
berisi pengaturan ini, tetapi dapat ditimpa karena file ini digunakan untuk konfigurasi default.Saya sarankan Anda pergi memeriksa konfigurasi vhost di bawah
vhosts.d
dansites-available
direktori.sumber
Solusi yang diusulkan:
tidak bekerja di semua instalasi.
Misalnya, dalam kasus saya:
Masalah yang sama seperti sebelumnya.
Mungkin Anda harus memodifikasi instruksi pertama di:
thistle
sumber
rtrim($_SERVER['DOCUMENT_ROOT'],'/\\').'/'
harus sedikit lebih cepat daripada semua hal yang dapat dilakukan realpath.Jawaban Dom adalah solusi untuk masalah ini, namun pernyataan stefanvesca adalah alasan mengapa di lingkungan yang berbeda Anda mengalami double '//'. Pada mesin lokal Anda, dalam file .conf Anda tempat Anda mengatur host virtual Anda, Anda kemungkinan besar menambahkan / di akhir root dokumen yang ditentukan, sedangkan orang yang mengatur lingkungan Anda yang lain tidak, atau sebaliknya.
Bagaimanapun, ketika menggunakan $ _SERVER php ['DOCUMENT_ROOT'] Anda mendapatkan nilai lingkungan apache yang merupakan hasil dari konfigurasi. Itulah alasan '/' di satu lingkungan dan '//' di lingkungan lain.
sumber
Saya akan mengatakan itu diasumsikan DOCUMENT_ROOT tidak memiliki garis miring.
Nilai ini dilewatkan dari konfigurasi server web
apache
DocumentRoot /var/www/html
Itu menyiratkan kita harus memiliki garis miring terkemuka untuk jalur yang kita tambahkan padanya.
Mengetahui bahwa garis miring ganda '//' di mana saja di jalur tidak memiliki konsekuensi (bila terkait dengan filesystem ... di url http, mungkin ada kasus di mana terdapat beberapa gangguan)
$ cat /etc//issue Debian GNU/Linux 9 \n \l
Ketika ada garis miring untuk DOCUMENT_ROOT kita dapat menyalahkan sysadmin pada sesuatu yang tidak memiliki konsekuensi :)
Dan abaikan saja?
sumber