Правильная навигация по относительным локальным путям в PHP - PullRequest
0 голосов
/ 17 декабря 2009

У меня проблемы именно с функцией getimagesize. Я делаю вызов функции из /item/ajax/image.php относительно корня HTTP домена. Я пытаюсь получить размеры изображения, хранящегося в /portfolio/15/image.jpg. Из того, что я понимаю, функция принимает имя файла в качестве аргумента, поэтому я попробовал следующее:

getimagesize('/portfolio/15/image.jpg')

И

getimagesize('../../portfolio/15/image.jpg')

Но оба они просто сгенерировали ошибки PHP.

Ответы [ 4 ]

4 голосов
/ 17 декабря 2009

Относительные пути всегда начинаются с исполняемого файла, который, скорее всего, index.php. Это верно и для включенных файлов. Это означает, что в любом файле внутри вашего проекта относительные пути начинаются с вашего index.php. (За исключением случаев chdir(), сделанных ранее)

Я думаю, что это действительно плохой код - иметь пути типа "../../file.ext" или тому подобное. Определите константу, которая имеет полный путь к вашему приложению (например: $_SERVER['DOCUMENT_ROOT']) и добавьте его к любому пути, который вы используете.

Пример:

# somewhere in your index.php
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);

# in any included file
$my_path = ROOT_PATH."/portfolio/14/image.jpg"

Это imho самый чистый и читаемый способ определения путей.

3 голосов
/ 17 декабря 2009

попробуйте префикс ниже к пути:

 $_SERVER['DOCUMENT_ROOT']
1 голос
/ 17 декабря 2009

В PHP "/" не совпадает с Apache "/" (веб-корень). В PHP "/" относится к системному корню. Вы должны использовать пути относительно местоположения вашего PHP-скрипта ('portfolio / 15 / image.jpg', если ваш скрипт и папка 'portfolio' находятся в одном месте)

0 голосов
/ 17 декабря 2009

Имя файла, которое вы вводите, не связано с корнем http, но должно быть существующим путем в файловой системе вашего веб-сервера.

Чтобы увидеть, что идет не так, вы можете ввести:

realpath('../../portfolio/15/image.jpg')

Чтобы увидеть, в каком каталоге вы оказались.

Или используйте:

imagesize(dirname(__FILE__) . '/../../portfolio/15/image.jpg')

чтобы получить полную квалификацию каталога.

В качестве альтернативы вы можете использовать веб-адрес, но вы должны указать полный URL:

getimagesize('http://yoursite.com/portfolio/15/image.jpg')

Однако это более медленный вариант.

...