ในสภาพแวดล้อมเซิร์ฟเวอร์ที่แตกต่างกัน PHP $_SERVER['DOCUMENT_ROOT']
super global บางครั้งก็มีเครื่องหมายทับท้ายและบางครั้งก็ไม่มี ฉันคิดว่าปัญหานี้เกี่ยวข้องโดยตรงกับการกำหนด Apache DocumentRoot
ในhttpd.conf
ไฟล์:
เช่นฉันจะคิดว่าถ้าhttpd.conf
ไม่มีเครื่องหมายทับ:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
จากนั้นecho $_SERVER['DOCUMENT_ROOT']
ควรให้/ var / www / live / current
และถ้าhttpd.conf
มีเครื่องหมายสแลชต่อท้าย:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current/
...
จากนั้นecho $_SERVER['DOCUMENT_ROOT']
ควรให้/ var / www / live / current /
นี่เป็นกรณีใน Ubuntu 10.04 แต่ใน RHEL 5.5 จะมีการเพิ่มเครื่องหมายสแลชต่อท้าย$_SERVER['DOCUMENT_ROOT']
แม้ว่าจะไม่มีการกำหนดไว้ใน Apache
มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น? มีพารามิเตอร์การกำหนดค่าที่ฉันขาดหายไปหรือไม่
สำหรับการอ้างอิง:
- PHP 5.3.3 ของ RHEL (ปัญหาเกิดขึ้น): PHP 5.3.3 (cli) (สร้างขึ้น: 23 กรกฎาคม 2010 16:26:53)
- Ubuntu รุ่น PHP (ไม่มีปัญหา): PHP 5.3.2-1ubuntu4.2 พร้อม Suhosin-Patch (cli) (สร้าง: 13 พฤษภาคม 2010 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
คุณก็สามารถใช้ มันจะลบเครื่องหมายทับหลายอันทั้งหมดโดยอัตโนมัติ หากคุณต้องการ concatenaterealpath()
ท้ายเฉือนไปยังผลมาจากการเรียกร้องดังกล่าวข้างต้นไป ไม่ได้อยู่ข้างใน