gpt4 book ai didi

PHP:析构函数与 register_shutdown_function

转载 作者:行者123 更新时间:2023-12-03 01:10:41 26 4
gpt4 key购买 nike

我有一个 PHP 类,可以动态创建 PNG 图像并将其发送到浏览器。 PHP 手册说我需要确保最后调用 imagedestroy 函数来释放内存。现在,如果我不使用类,我会有这样的代码:

function shutdown_func() 
{
global $img;
if ($img)
imagedestroy($img);
}
register_shutdown_function("shutdown_func");

但是,我相信对于我的类来说,合适的位置是在类的析构函数中调用imagedestroy

我无法确定析构函数是否以与关闭函数相同的方式被调用?例如,如果当用户按下浏览器中的“停止”按钮时执行停止。

注意:无论您在答案中写什么,请指出支持它的一些文章或手册页 (URL)。

最佳答案

我刚刚使用 Apache 进行了测试,PHP 被用作 Apache 模块。我创建了一个像这样的无限循环:

<?php
class X
{
function __destruct()
{
$fp = fopen("/var/www/htdocs/dtor.txt", "w+");
fputs($fp, "Destroyed\n");
fclose($fp);
}
};

$obj = new X();
while (true) {
// do nothing
}
?>

这是我发现的:

  • 在 Firefox 中按“停止”按钮不会停止此脚本
  • 如果我关闭 Apache,析构函数不会被调用
  • 当达到 PHP max_execution_time 并且析构函数没有被调用时停止

但是,这样做:

<?php
function shutdown_func() {
$fp = fopen("/var/www/htdocs/dtor.txt", "w+");
fputs($fp, "Destroyed2\n");
fclose($fp);
}
register_shutdown_function("shutdown_func");

while (true) {
// do nothing
}
?>

shutdown_func 被调用。所以这意味着类析构函数不如关闭函数那么好。

关于PHP:析构函数与 register_shutdown_function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com