Trong các môi trường máy chủ khác nhau, $_SERVER['DOCUMENT_ROOT']
siêu toàn cầu PHP đôi khi có dấu gạch chéo và đôi khi không. Tôi đã nghĩ rằng vấn đề này liên quan trực tiếp đến cách DocumentRoot
xác định Apache trong httpd.conf
tệp:
tức là tôi đã nghĩ rằng nếu httpd.conf
không chứa dấu gạch chéo:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
sau đó echo $_SERVER['DOCUMENT_ROOT']
nên cho / var / www / live / current
và nếu httpd.conf
có chứa dấu gạch chéo:
<VirtualHost *:8880>
DocumentRoot /var/www/live/current/
...
sau đó echo $_SERVER['DOCUMENT_ROOT']
nên cho / var / www / live / current /
Đây là trường hợp trên Ubuntu 10.04 nhưng trên RHEL 5.5, một dấu gạch chéo được thêm vào $_SERVER['DOCUMENT_ROOT']
ngay cả khi không có định nghĩa nào trên Apache.
Bất cứ ý tưởng tại sao điều này xảy ra? Có một tham số cấu hình mà tôi đang thiếu?
Để tham khảo:
- PHP 5.3.3 của RHEL (xảy ra sự cố): PHP 5.3.3 (cli) (được xây dựng: 23 tháng 7 2010 16:26:53)
- Phiên bản PHP của Ubuntu (không có vấn đề): PHP 5.3.2-1ubfox4.2 với Suhosin-Patch (cli) (được xây dựng: ngày 13 tháng 5 năm 2010 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
. Nó tự động loại bỏ tất cả các dấu gạch chéo và cả dấu gạch chéo. Nếu bạn luôn muốn một dấu gạch chéo nối nó với kết quả của cuộc gọi ở trênrealpath()
. Không phải bên trong nó.