В различных серверных средах 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)
- PHP-версия Ubuntu (без проблем): PHP 5.3.2-1ubuntu4.2 с Suhosin-Patch (cli) (сборка: 13 мая 2010 г. 20:03:45)
$realpath = realpath($_SERVER['DOCUMENT_ROOT']);
. Он автоматически удаляет все множественные слэши, а также завершающий. Если вы всегда хотите использовать косую черту, соедините ее с результатом вышеупомянутого вызоваrealpath()
. Не внутри.rtrim($_SERVER['DOCUMENT_ROOT'],'/\\').'/'
должно быть немного быстрее, чем все, что может сделать realpath.http://httpd.apache.org/docs/2.0/mod/core.html говорит: DocumentRoot должен быть указан без завершающей косой черты.
источник
Корень документа в среде Apache можно определить более чем в одном месте.
Да,
httpd.conf
содержит эти настройки, но они могут быть перезаписаны, так как этот файл используется для конфигурации по умолчанию.Я бы посоветовал вам проверить конфигурацию vhost в разделе
vhosts.d
иsites-available
каталогах.источник
Предлагаемое решение:
не работает во всех установках.
Например, в моем случае:
Та же проблема, что и раньше.
Может быть, вы должны изменить первую инструкцию в:
чертополох
источник
rtrim($_SERVER['DOCUMENT_ROOT'],'/\\').'/'
должно быть немного быстрее, чем все, что может сделать realpath.Ответ Dom является решением этой проблемы, однако заявление Стефанвески - причина того, почему в разных средах вы испытываете двойное «//». На вашем локальном компьютере в файле .conf, где вы настраивали виртуальный хост, вы, скорее всего, добавили / в конец определенного корневого каталога документа, тогда как тот, кто настраивал вашу другую среду, не сделал этого, или наоборот.
В любом случае, при использовании php's $ _SERVER ['DOCUMENT_ROOT'] вы получаете значение среды apache, которое является результатом конфигурации. Это причина для «/» в одной среде и «//» в другой.
источник
Я бы сказал, что предполагается, что DOCUMENT_ROOT не имеет косой черты.
Это значение передается из конфигурации веб-сервера
апаш
DocumentRoot /var/www/html
Это означает, что у нас должен быть начальный слеш к пути, который мы добавляем к нему.
Зная, что двойная косая черта «//» в любом месте пути не имеет никакого значения (применительно к файловой системе ... в URL-адресе http, могут быть случаи, когда есть некоторые глюки)
$ cat /etc//issue Debian GNU/Linux 9 \n \l
Когда есть косая черта в DOCUMENT_ROOT, мы можем обвинить сисадмина в том, что не имеет никакого значения :)
И безопасно игнорировать это?
источник