Как насчет
defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
echo SITE_ROOT;
Вместо define('SITE_ROOT', 'www.domain.com')
вы должны define('SITE_ROOT', realpath(dirname(__FILE__))
.
www.domain.com
- это базовый URL (вашего сайта), а realpath(dirname(__FILE__))
- это абсолютный путь к файлу FILE, где он определен. Используя этот путь, вы можете настроить ROOT FOLDER для вашего сайта.
Например: вы не можете unlink('www.example.com\img1.jpg')
удалить img1
Вы должны сделать unlink(SITE_ROOT.DS.'img1.jpg')
;
Аналогично для move_uploaded_file
или любой другой директории или функции файла. т. е. ваши файлы перемещаются и удаляются сервером (так как скрипт php выполняется на сервере), поэтому требуется абсолютный путь к файлу.
Используя этот абсолютный путь, вы можете перейти к папке и получить доступ к файлам на сервере.
[ОБНОВЛЕНО]
defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);
defined('SITE_ROOT') ? null :
define ('SITE_ROOT', DS.'Users'.DS.'kevin'.DS.'Sites'.DS.'photo_gallery');
Хотя у меня нет Mac, web-root
- это Users/kevin/Sites/
на Mac, а Users/kevin/Sites/photogallery
- это корень сайта.
Преподаватель знает это, поэтому он делает это. Но мы можем не знать об этом, когда наш проект загружен на веб-сервер, поэтому
defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
будет наиболее подходящим.
А что касается DS
, это просто CONSTANT (DIRECTORY_SEPARATOR
), который определен, потому что DIRECTORY_SEPARATOR
будет слишком длинным для записи. т.е.
SITE_ROOT'.DIRECTORY_SEPARATOR.'Users'.DIRECTORY_SEPARATOR.'kevin'.DIRECTORY_SEPARATOR.'Sites'.DIRECTORY_SEPARATOR.'photo_gallery'
Итак, определите его, прежде чем определять SITE ROOT
defined('DS')? null: define('DS', DIRECTORY_SEPARATOR);
defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
Как учебник сделан на MAC DIRECTORY_SEPARATOR
это /
. И пример сделан на localhost
, преподаватель знает абсолютный путь к файлу своего веб-сервера, поэтому он делает
[ОШИБКА: ОБНОВЛЕНИЕ]
Вы получили эту ошибку, потому что ее определение includes/initialize.php
предполагает, что ваш SITE_ROOT
равен yourwebroot/yourproject/includes
там, где он должен был быть yourwebroot/yourproject/includes
.
Есть два пути, один из них
положить initialize.php
в yourwebroot/yourproject
А другой путь -
defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)).DS."..".DS);
OR
defined('SITE_ROOT')? null: define('SITE_ROOT', DS.'..'.DS.realpath(dirname(__FILE__)));
(я не уверен, но один из них должен работать)
Также попробуйте это
defined('SITE_ROOT')? null: define('SITE_ROOT', '/../'.realpath(dirname(__FILE__)));