Perl eval 和 $SIG{__DIE__} ,

一般来说, Pel 中的 eval 可以捕获异常。 至少我是这样用的: 用来尝试运行一些操作,要是出错了也不会退出。 比如我经常用 Image::Info 来判断一个图像文件是否真的是图像,但是服务器上是否有 Image::Info是个问题。 简单概念代码如下:

code      eval("use Image::Info qw(image_info);");
      if ($@ eq "")
      {
            my $info = image_info("$tmpfilename");
            if ($info->{error} eq "Unrecognized file format"){
             $esB::base->error("该文件不是合法的图片文件。");
            }
      }

由于 eval 的存在, 如果系统没有 Image::Info ,那么简单的跳过判断,并不影响程序的继续执行。。

直到有一天, 我决定用 $SIG{__DIE__} 来自定义程序的的出错信息。 一样,概念代码如下

code $SIG{__DIE__} = \&esb_die;

 sub esb_die {
      my $error = shift;
      $error =~ s!$ENV{'DOCUMENT_ROOT'}!/{you_root_dir}/!i;
   my ($msg, $path) = split " at ",$error;
   print "Content-type: text/html\n\n";
   print qq~
    <html>
    <head><title>Easun CGI Error</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
    </head>
    <body >
    <font size='6' color='#333366'>Easun CGI Error</font>
    <hr size='1' color='#000000' noshade>
    <font size='3' color='#00000'>
    很抱歉,程式因为以下错误而异常退出:
    <br><br><b>$msg</b><br><br>错误大概发生在: <font color='#000099'>$path</font><br><br>
    <font size='3' color='#990000'><b>请注意,为了保证您的安全,您的程序的真实路径已经被程式自动过滤。</b></font>
    </font>
    </body></html> ~;
    exit();
}

该操作也达到预期目的。

但是,当这两者同时运行时,$SIG{__DIE__} 居然捕获到了 eval 内的 $@ 。当系统没有找到Image::Info 时候,程序不再默默跳过继续执行。而是直接跳出到自定义错误页面。
信息如下

很抱歉,程式因为以下错误而异常退出: Can't locate Image/Info.pm in @INC (you may need to install the Image::Info module) (@INC contains: ./config ./ShareLib ./ D:/usr/site/lib D:/usr/lib .) 错误大概发生在: (eval 10) line 1.

如何协调这两者,是个问题。。。

记录下来,作为备忘。

--EOF--

[折腾]拆。。拆浴霸,换风机

转眼浴霸10年,近来毛病频出,先是面板坏了,JD购买更新之,接着一个热灯不良,JD购买换之 (10年才坏,也算不错了)。 没有想到这下连风扇都不转了。。。 只好拆下来。。。

因为在吊顶中,需要先拆部分吊顶,钻进去一看, 哇塞。。。。 吊顶内好恐怖的接线。。。

而且, 浴霸是用铁丝挂上去的。没有骨架,晕晕。。当时只顾得拆,没有照太多照片,只有这张,可以明显看出来凌乱。

1.jpg

Warning: Default SSL_verify_mode deprecated 的解决办法 ,

由于 Vultr VPS 默认是禁止程序通过 sendmail 发邮件的。另外 sendmail 发的邮件通常是被一些邮箱当作 spam 处理的。

所以, 我的 MT 是通过设定 stmp 服务器和用户名、密码认证登陆到 mail.qq.com 发送邮件。 简单配置如下:

config    # in mt-config.cgi
    EmailAddressMain UserName@QQ.com
    MailTransfer smtp
    SMTPServer smtp.qq.com
    SMTPUser UserName
    SMTPPassword MyPassword
    SMTPAuth ssl

这个配置可以正常工作。。。

第1页/共57页,加载更多