Абсолютный путь к файлу - PullRequest
5 голосов
/ 06 марта 2011

Эта проблема до сих пор не решена

Видео-учебник по PHP, которому я следую, создает файл initialize.php, в котором он использует предопределенную PHP-константу Directory_Separator, а затем определяет site_root.Site_root - это абсолютный путь к файлу (не путь к веб-серверу) для PHP, чтобы найти нужные ему файлы .Он дал нам следующий код

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

    defined('SITE_ROOT') ? null :
    define ('SITE_ROOT', DS.'Users'.DS.'kevin'.DS.'Sites'.DS.'photo_gallery');

Я предполагаю, что путь к файлу на его компьютере - root / users / kevin / sites / photogallery

Я не создаю сайт на своем компьютере,а точнее прямо онлайн.Я не знаю, какой путь к файлу для вставки.

Поскольку он подчеркнул, что это не путь к веб-серверу, а путь к файловой системе, что я должен вместо этого указать.Просто доменное имя, как это.

define('SITE_ROOT', DS. 'www.example.com');

Он не хочет путь к веб-серверу, но файлы находятся в сети?так что я не понимаю.

ОБНОВЛЕНИЕ

Видеоурок использовал следующий код

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT') ? null :
define ('SITE_ROOT', DS.'Users'.DS.'kevin'.DS.'Sites'.DS.'photo_gallery');
defined('LIB_PATH') ? null : define('LIB_PATH',SITE_ROOT.DS.'includes');

Я использовал этот код:

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
defined('LIB_PATH') ? null : define('LIB_PATH',SITE_ROOT.DS.'includes');

Я получил это сообщение об ошибке

require_once (/hsphere/local/home/c263430/quoralist.com/includes/includes/config.php): не удалось открыть поток:Нет такого файла или каталога в /hsphere/local/home/c263430/quoralist.com/includes/initialize.php в строке 11 Неустранимая ошибка: require_once (): не удалось открыть файл "/hsphere/local/home/c263430/quoralist.com/include/include/config.php '(include_path ='.: / hsphere / shared / apache / libexec / php5ext / php / ') в /hsphere/local/home/c263430/quoralist.com/include/initialize.php встрока 11

ОБНОВЛЕНИЕ, используя 3 правки, указанные ниже в эксперименте X, а также следующие

define('SITE_ROOT', DS.'hsphere'.DS.'local'.DS.'home'.DS.'c263430'.DS.'quoralist.com');

Я всегда получаю сообщение об ошибке

Предупреждение: require_once (LIB_PATH / config.php): не удалось открыть поток: нет такого файла или каталога в /hsphere/local/home/c263430/quoralist.com/includes/initialize.php в строке 11 Фатальная ошибка: require_once (): не удалось открыть обязательное 'LIB_PATH / config.php' (include_path = '.: / hsphere / shared / apache / libexec / php5ext / php /') в / hsphere / local /home / c263430 / quoralist.com / включает / initialize.php в строке 11

Также

Ответы [ 2 ]

10 голосов
/ 06 марта 2011

Как насчет

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__)));
1 голос
/ 03 мая 2013

извините, у меня есть ответ для ИЗОБРАЖЕНИЙ, не отображаемых

в photos.php, просто удалите DS

public function image_path() {
  return $this->upload_dir.$this->filename;
}

рабочая строка:

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)).DS."..".DS);

Спасибо!

...