【问题标题】:Can't find image in GD (PHP)在 GD (PHP) 中找不到图像
【发布时间】:2010-11-15 14:55:39
【问题描述】:

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

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(../watermarks/.png) [function.imagecreatefrompng]: 无法打开流:没有这样的文件或 目录

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

谢谢。

【问题讨论】:

  • 如果你通过'./../watermarks'.$username.'.png'会发生什么?

标签: php gd


【解决方案1】:

你需要使用:

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

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

【讨论】:

  • 谢谢,我也试过了。但仍然是同样的问题。这很奇怪。
【解决方案2】:

提示在警告中:

imagecreatefrompng(../watermarks/.png)

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

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

【讨论】:

  • 感谢您的回答。我尝试了您的解决方案,但它不起作用。有趣的是,当我这样打印时: echo "$username";在同一页面中,我可以看到用户名。但是当它应用到脚本时,它就消失了。
【解决方案3】:

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

【讨论】:

  • 感谢您的回答。刚试了一下。打印文件字符串时,我可以看到水印的名称。但是在应用 $watermark 时,再次找不到图像。在我的日志中,图像的名称仍然是空白的。我不知道发生了什么,因为当我手动输入图像名称时,一切正常。
  • 你必须看看你是否可以向后工作,并弄清楚你的会话变量是否/何时被设置,以及它是否在某处失去它的价值。 var_dump($var)、print_r($var) 和 echo $var 是你的朋友! :)
  • 我做了很多次。在 imagecreatefrompng 之后和之前,我可以随时打印用户名。但是 imagecreatefrompng 函数本身似乎有问题。它似乎不接受变量名。谢谢你的建议。
  • 也许你可以尝试附加这样的字符串:imagecreatefrompng("../watermarks/". $username . ".png");
  • 你确定到处都是“用户名”吗?请记住,PHP 的 var 名称区分大小写,因此 username != userName != UserName != USERNAME 等......
【解决方案4】:

.. 是从 PHP 的当前工作目录解析的。想必这是PHP文件当前所在的目录。

一般来说,从$_SERVER['DOCUMENT_ROOT'] 解析目录是一个更好的主意,这样它们就是绝对* 目录,而不是在打开文件之前什么都不做chdir

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

*对于给定的绝对定义。

【讨论】:

  • 既然有人指出 $username 是空白的,我还是把它留在这里,因为它仍然是个好建议。
  • 谢谢,但它似乎并没有改变任何东西。图片的名称仍然是“.png”。不过感谢您的帮助。
【解决方案5】:

根据那个错误,$username 变量是空白的。在您的脚本中执行 var_dump($_SESSION) 以仔细检查您是否正确存储了 _user_login 变量。

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

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

这将使您可以轻松查看变量并防止 php 使用错误的变量名。

【讨论】:

  • 感谢您的提示。我刚刚做了一个 var_dump($_SESSION),我可以清楚地看到我的登录名和 SESSION 的其余部分。奇怪的是我可以在脚本之前和之后打印用户名。但是当我将 imagecreatefrompng 应用到它时它就不起作用了。
【解决方案6】:

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

为了解决这个问题,我只是将用户名作为隐藏变量发布。目前这似乎工作正常。

感谢大家的帮助。不胜感激。

mw

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多