2015-06-10 11 views
0

У меня есть скрипт php, который генерирует изображение с использованием GD Lib, сохраняет его в предопределенном месте. А потом должен вывести его.PHP Сохранение и вывод изображения GD Lib - относительные и абсолютные пути

Моя структура каталогов выглядит так:

www.example.com/projects/project-1/ 

Внутри директории проекта-1 у меня есть эти каталоги:

- /imgs/ 
- /js/ 
- /css/ 
- /php/ 

Сценарий с использованием библиотеки GD Lib находится в /php/ с другой config.php сценарий, где определены константы. Затем он включается в основной сценарий.

Скажем, у меня есть две константы:

define('SAVE_PATH', '/projects/project-1/imgs/'); //The image will not save - this does not work 
define('OUTPUT_PATH', '/projects/project-1/imgs/'); //this works if there is an image in this location 

Я тогда сохранить изображение как так:

imagejpeg($im, SAVE_PATH.$name, 100); 

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

failed to open stream: No such file or directory in /public_html/projects/project-1/php/main.php 

Можно ли сделать это с одной константой, которая работает как для сохранения, так и для вывода?

Я знаю, что я не могу иметь абсолютный путь сохранения, как: http://www.example.com/projects/project-1/imgs/

И я знаю, что я не могу иметь абсолютный выходной путь: /public_html/projects/project-1/imgs/

Так что самое элегантное решение этой проблемы проблема?

ответ

0

Ваша проблема, вероятно, связана с использованием абсолютного пути в вашем SAVE_PATH. Абсолютный путь начинается с /, а относительный путь - нет. Это вероятно, будет работать:

define('SAVE_PATH', '../imgs/'); //path relative to the php script, assuming the php file isn't being included from another path 
define('SAVE_PATH', '/public_html/projects/project-1/imgs/'); 

НО

В рамках усилий, чтобы сделать это более универсальным, я бы вместо того, чтобы сделать следующее. Задайте 2 константы, одну для базового каталога приложений и одну для пути к папке с изображением. Последняя будет использоваться в сочетании с бывшим для сохранения пути, и будет использоваться сам по себе в качестве выходного пути:

//const instead of define is a little prettier, but this is a preference 
const APPLICATION_PATH = '/projects/project-1'; 
const IMAGE_PATH = '/imgs/'; 

//Save the image - Absolute path to the file location 
imagejpeg($im, APPLICATION_PATH.IMAGE_PATH.$name, 100); 

//Echo the image url - Absolute path to the file url 
echo "<img src='".IMAGE_PATH.urlencode($name)."' />"; 

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