在GD(PHP)中找不到图像

时间:2010-11-15 14:55:39

标签: php gd

我正在尝试在我的图像上添加水印,但脚本无法找到我的水印图像。我正在动态执行此操作,因此对于每个用户,watermarks文件夹中都有一个水印。尝试使用此代码时:

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 个答案:

答案 0 :(得分:1)

您需要使用:

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

(在使用此方法之前,您可以打印dirname(__FILE__)以检查目录结构。)

答案 1 :(得分:1)

警告中的线索:

imagecreatefrompng(../watermarks/.png)

它正在寻找一个名为.png的文件,显然你的$username = $_SESSION['_user_login'];实际上没有返回用户名,或者字符串没有正确创建。

您是否尝试在字符串中使用大括号,如下所示:"../watermarks/{$username}.png"?如果这不起作用,那么您的用户名就会出现问题。

答案 2 :(得分:0)

$ 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);

答案 3 :(得分:0)

从PHP的当前工作目录解析

..。据推测,这是PHP文件当前所在的目录。

通常,最好从$_SERVER['DOCUMENT_ROOT']解析目录,使它们成为绝对*目录,而不是在打开文件之前不依赖于chdir

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

*对于绝对的给定定义。

答案 4 :(得分:0)

根据该错误,$ username变量为空。在脚本中执行var_dump($ _ SESSION)以仔细检查是否正确存储了_user_login变量。

另外,我建议在将变量放入字符串时使用花括号。

$watermark = imagecratefrompng("../watermarks/{$username}.png"); 

这样可以很容易地查看变量并防止php使用错误的变量名。

答案 5 :(得分:0)

尝试了一切,但由于某种原因,SESSION变量在imagecreatefrompng函数中不起作用。

要解决此问题,我只需将用户名作为隐藏变量发布。这似乎暂时没有问题。

感谢大家的帮助。很感激。

MW