如何验证变量是否是有效的 GD 图像资源?

发布于 2024-11-06 07:16:43 字数 140 浏览 1 评论 0原文

我有一个类接受 GD 图像资源作为其参数之一。据我所知,没有办法输入提示,因为它是资源而不是对象。有没有办法验证提供的参数是否是有效的 GD 图像资源(除了使用此资源的其他功能失败之外)?

PS:请不要在您的答案中提及 ImageMagick...

I have a class that accepts a GD image resource as one of its arguments. As far as I know, there is no way to type hint this since it is a resource and not an object. Is there a way to validate whether the supplied argument is a valid GD image resource (aside from further functionality using this resource failing)?

PS: Please do not mention ImageMagick in your answer...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

小傻瓜 2024-11-13 07:16:43

从 PHP 8.0 开始,带有 GD 图像参数的 get_resource_type 将引发 致命错误

PHP 致命错误:未捕获类型错误:get_resource_type():参数 #1 ($resource) 必须是给定 GdImage 的资源类型。

我们应该使用get_class()函数。 PHP 文档指出:

从 PHP 7.2.0 开始,不再允许显式传递 null 作为对象。该参数仍然是可选的,并且从类内部调用不带参数的 get_class() 也可以,但传递 null 现在会发出 E_WARNING 通知。

因此,在 PHP 8.0 中检查这一点的正确方法应该是:

function is_gd_image($var) : bool {
    return (gettype($var) == "object" && get_class($var) == "GdImage");
}

Starting with PHP 8.0, get_resource_type with a GD image argument, will throw a Fatal Error:

PHP Fatal error: Uncaught TypeError: get_resource_type(): Argument #1 ($resource) must be of type resource, GdImage given.

We should use get_class() function. PHP documentation states:

Explicitly passing null as the object is no longer allowed as of PHP 7.2.0. The parameter is still optional and calling get_class() without a parameter from inside a class will work, but passing null now emits an E_WARNING notice.

So, the correct way to check this, in PHP 8.0 should be:

function is_gd_image($var) : bool {
    return (gettype($var) == "object" && get_class($var) == "GdImage");
}
倒带 2024-11-13 07:16:43

get_resource_type 函数应该可以帮助您。由于缺少编写代码并查看它返回的内容,我不确定它对于 GD 资源会说什么,所以你只能靠自己了。不过,应该是一个很好的起点!

The get_resource_type function should help you out. Short of writing code and seeing what it return, I'm not sure what it's going to say for a GD resource, so you're on your own there. Should be a good starting point, though!

小忆控 2024-11-13 07:16:43

如果资源是 gd 图像,则 get_resource_type() 返回“gd”,这就是您所需要的。

get_resource_type() returns "gd" if the resource is a gd image, so that's what you need.

听闻余生 2024-11-13 07:16:43
if (is_resource($image) || $image instanceof \GdImage)
{

}

做一个检查

if (is_resource($image) || $image instanceof \GdImage)
{

}

do a check

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文