2010-11-15 75 views
0

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

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时,永远不会找到水印图像。看我的日志我看到以下错误:

Warning: imagecreatefrompng(../watermarks/.png) [function.imagecreatefrompng]: failed to open stream: No such file or directory

我不明白。我究竟做错了什么?

谢谢。

+0

如果你通过'./../水印'$ username。'。png'',会发生什么? – rhino 2010-11-15 16:48:13

回答

1

您可能需要使用:

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

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

+0

谢谢,刚刚尝试过。但仍然是同样的问题。有点奇怪。 – moonwalker 2010-11-15 15:09:44

1

线索是在警告:

imagecreatefrompng(../watermarks/.png) 

它寻找一个叫.png文件,所以很明显你$username = $_SESSION['_user_login'];实际上没有返回用户名,或者是没有得到正确创建的字符串。

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

+0

+1:我错过了自己的用户名空白。哎呦。 – Powerlord 2010-11-15 15:05:07

+0

感谢您的回答。我试过你的解决方案,但它不起作用。 有趣的是,当我这样打印它: echo“$ username”;在同一页中我可以看到用户名。但是,将其应用到脚本时,它会消失。 – moonwalker 2010-11-15 15:07:40

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); 
+0

感谢您的回答。刚刚尝试过。当打印文件字符串时,我可以看到水印的名称。但是,当应用$水印时,图像再次找不到。而在我的日志中,图像的名字仍然是空白的。我不知道发生了什么,因为当我手动输入图像名称时,一切正常。 – moonwalker 2010-11-15 15:13:38

+0

您必须查看是否可以反向工作并确定会话变量是否设置了/何时设置,以及会话变量是否丢失。 var_dump($ var),print_r($ var)和echo $ var是你的朋友! :) – jocull 2010-11-15 15:21:57

+0

我做了多次。在imagecreatefrompng和之前,我可以打印用户名,只要我想要。但是imagecreatefrompng函数本身似乎有些问题。它似乎并不接受变量名称。非常感谢您的建议。 – moonwalker 2010-11-15 15:30:24

0

..从PHP的当前工作目录解析。据推测,这是该PHP文件是当前目录。

一般情况下,这是一个好主意,$_SERVER['DOCUMENT_ROOT']解决目录,使它们是绝对的*目录,而不是仅仅依靠做chdir之前,你的文件被打开。

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

*对于给定的绝对定义。

+1

现在已经指出'$ username'是空白的,我仍然留在这里,因为它仍然是一个很好的建议。 – Powerlord 2010-11-15 15:05:51

+0

谢谢,但它似乎没有改变任何东西。图片的名称仍然是“.png”。感谢您的帮助。 – moonwalker 2010-11-15 15:15:20

0

那么$ username变量根据那个错误是空白的。在你的脚本中做一个var_dump($ _ SESSION)来仔细检查你是否正确存储_user_login变量。

另外我会建议使用大括号将变量放在字符串中。

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

这将使你很容易看到你的变量,并防止php使用错误的变量名。

+0

谢谢你的提示。我只做了一个var_dump($ _ SESSION),我可以清楚地看到我的登录名和SESSION的其余部分。奇怪的是我可以在脚本前后打印用户名。但是当我将imagecreatefrom应用于它时,它不起作用。 – moonwalker 2010-11-15 15:18:21

0

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

要解决此问题,我只需将用户名作为隐藏变量发布。这似乎现在工作正常。

谢谢大家的帮助。非常感谢。

mw