Не могу найти изображение в GD (PHP) - PullRequest
0 голосов
/ 15 ноября 2010

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

session_start();
$username = $_SESSION['_user_login'];

// Set the path to the image to watermark
$input_image = $targetPath.$newName; 
// Read in the text watermark image
$watermark = imagecreatefrompng("../watermarks/$username.png");

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

Внимание: imagecreatefrompng (../ водяных знаки / .png) [Function.imagecreatefrompng]: не удалось открыть поток: нет такого файла или каталог

Я не понимаю. Что я делаю не так?

Спасибо.

Ответы [ 6 ]

1 голос
/ 15 ноября 2010

Подсказка в предупреждении:

imagecreatefrompng(../watermarks/.png)

Он ищет файл с именем .png, поэтому, очевидно, ваш $username = $_SESSION['_user_login']; на самом деле не возвращает имя пользователя или строка не создаетсяправильно.

Вы пытались использовать фигурные скобки в строке, как это: "../watermarks/{$username}.png"?Если это не сработает, значит, у вас проблема с вашим именем пользователя.

1 голос
/ 15 ноября 2010

Вам необходимо использовать:

$watermark = imagecreatefrompng(dirname(dirname(__FILE__)) . "/watermarks/" . $username . ".png");

(Вы можете напечатать dirname(__FILE__) для проверки структуры каталогов перед использованием этого метода).

0 голосов
/ 15 ноября 2010

Пробовал все, но по какой-то причине переменная SESSION просто не работает в функции imagecreatefrompng.

Чтобы решить эту проблему, я просто публикую имя пользователя как скрытую переменную.Кажется, на данный момент это работает нормально.

Спасибо всем за помощь.Это ценится.

мвт

0 голосов
/ 15 ноября 2010

Ну, переменная $ username пуста в соответствии с этой ошибкой.Сделайте var_dump ($ _ SESSION) в вашем скрипте, чтобы дважды проверить, правильно ли вы храните переменную _user_login.

Также я бы предложил использовать фигурные скобки при помещении переменных в строки.упростит просмотр ваших переменных и не позволит php использовать неправильное имя переменной.

0 голосов
/ 15 ноября 2010

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

Как правило, лучше разрешать каталоги из $_SERVER['DOCUMENT_ROOT'], чтобы они были абсолютными * каталогами, а не полагаться на то, что ничего не делает chdirдо открытия вашего файла.

$watermark = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'] . "/watermarks/$username.png");

* Для заданного определения абсолюта.

0 голосов
/ 15 ноября 2010

$ username кажется пустым. Следовательно, "imagecreatefrompng (../ watermarks / .png)"

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

session_start();
$username = $_SESSION['_user_login'];

// Set the path to the image to watermark
$input_image = $targetPath.$newName; 
// Read in the text watermark image
$filestring = "../watermarks/$username.png";
echo "LOOKING FOR $filestring";
$watermark = imagecreatefrompng($filestring);
...