Использование $ _SERVER для получения webroot - PullRequest
1 голос
/ 07 ноября 2011

Я использую следующий код в проекте cakephp в начальной загрузке, чтобы определить константы, такие как путь webroot.Правильно ли это

$_ROOTPATH  = strtolower('http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
$URLPART    = explode('cake',$_ROOTPATH);

define('ROOTPATH',$URLPART[0].'cake/');
define('RESOURCEBASEPATH',$URLPART[0].'resources/');
define('DOCUMENTROOTPATH',substr($_SERVER['SCRIPT_FILENAME'],0,-9));
  1. ROOTPATH ​​вместо $ this-> webroot.
  2. DOCUMENTROOTPATH, указывающий на фактическое значение piont для фактического пути, как в /var/www/

Что вы говорите по этому поводу.Любая заметка / предложение приветствуется.

Ответы [ 5 ]

2 голосов
/ 07 ноября 2011

Почему бы не использовать $_SERVER['DOCUMENT_ROOT']

1 голос
/ 07 ноября 2011

Что касается путей к файлам, вы смотрели на существующие основные константы ?Вы, вероятно, найдете там большинство необходимых вам констант пути к файлу.

Например, ваш DOCUMENTROOTPATH точно такой же, как (я считаю) WWW_ROOT константа.

Что касается URL, CakePHP Router::url() заботится о согласованной обработке всех URL-адресов (например, вывод URL-адресов с помощью Controller::redirect(), FormHelper, HtmlHelper и т. Д.)

Вы также можете позвонитьRouter::url() статически везде, где вам нужно создать URL:

echo Router::url('/some/random/path');
// output: http://www.example.com/path/to/cake/some/random/path
echo Router::url(array('controller' => 'abc', 'action' => 'xyz'));
// output: http://www.example.com/path/to/cake/abc/xyz

Если бы я не пропустил что-то, я бы просто использовал вышеупомянутое, вместо того, чтобы засорять ваше приложение подобными ROOTPATH и RESOURCEBASEPATH.Например, следующие подходы эквивалентны:

$this->redirect(ROOTPATH . 'some/place'); // your way
// takes you to: http://www.example.com/path/to/cake/some/place
$this->redirect('/some/place'); // cake way
// takes you to: http://www.example.com/path/to/cake/some/place

echo $this->Html->image(RESOURCEBASEPATH . 'some/image.jpg'); // your way
// outputs: <img src="http://www.example.com/path/to/cake/resources/some/image.jpg" />
echo $this->Html->image('some/image.jpg'); // cake way
// outputs: <img src="http://www.example.com/path/to/cake/img/some/image.jpg" />
echo $this->Html->image('../resources/some/image.jpg'); // cake way
// outputs: <img src="http://www.example.com/path/to/cake/resources/some/image.jpg" />
1 голос
/ 07 ноября 2011

вам не нужна никакая переменная для получения webroot. это всегда просто /. Очень кстати.

0 голосов
/ 31 августа 2014

Это довольно старый пост, но на тот случай, если кто-то захочет узнать.Это $ this-> webroot, который дает вам webroot приложения.это доступно в контроллере и представлениях тоже.

0 голосов
/ 07 ноября 2011

Я использую это (при условии, что я нахожусь в правильной папке с файлом, в котором я пишу этот код):

$path = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
...