異なるサーバー環境では、PHP $_SERVER['DOCUMENT_ROOT']
スーパーグローバルに末尾のスラッシュがある場合とない場合があります。この問題は、Apache DocumentRoot
がhttpd.conf
ファイルでどのように定義されているかに直接関係していると思いました。
つまりhttpd.conf
、末尾にスラッシュが含まれていない場合、
<VirtualHost *:8880>
DocumentRoot /var/www/live/current
...
次に/ var / www / live / currentecho $_SERVER['DOCUMENT_ROOT']
を与える必要があります
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でスラッシュが定義されていなくても、末尾にスラッシュが追加されます。
なぜこれが起こるのか?欠落している構成パラメーターはありますか?
参考のために:
- RHELのPHP 5.3.3(問題が発生):PHP 5.3.3(cli)(作成日:2010年7月23日16:26:53)
- UbuntuのPHPバージョン(問題なし):Suhosin-Patchを使用したPHP 5.3.2-1ubuntu4.2(cli)(ビルド:2010年5月13日20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
。複数のスラッシュと後続のスラッシュも自動的に削除されます。常にスラッシュが必要な場合は、上記のへの呼び出しの結果にスラッシュを連結しrealpath()
ます。その中ではありません。