我正在尝试在我的图像上添加水印,但脚本无法找到我的水印图像。我正在动态执行此操作,因此对于每个用户,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]: 无法打开流:没有这样的文件或 目录
我不明白。我做错了什么?
感谢。
答案 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文件当前所在的目录。
通常,最好从$_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