background image

?>
这时候屏幕上居然打印出了

‘finish’,这样就证明析构函数确实是被执行到了。

百思不得其解之后,开始上网找资料,看到一位朋友些的析构函数中用到了

error_log 并被

执行了,和我用法不同的是他并没有指定

error_log 的文件,而是到默认的 log 文件,于是

我模拟了一下,又修改了我的程序:

代码如下

:

<?php
    public function _log ($str) { 
            error_log($str . "\n"); 
            error_log($str . "\n", 3, './log.log'); 
        } 
?>
 我发现 log.log 中仍然之后 start,没有 finish。

E:\AppServ\Apache2.2\logs\error.log(我的 apache 配置的默认的 log 日志文件)真的有 start

finish。

奇怪的问题,想不通,于是去群里面问了下,群里的朋友要么让我检查语法错误,要么检
查文件权限,我确定这两个没有任何问题。
我说

“windows 系统,不存在权限问题,肯定不是这个引起的”

一个群友说:

“windos 系统,不解释!”

我说:

“这肯定和系统没关系,我怀疑是 apache 的问题。”

于是我把

_log 还原了一下,到 linux+nginx 的虚拟机上跑了一下。

代码如下

:

<?php
    public function _log ($str) { 
            error_log($str . "\n", 3, './log.log'); 
        } 
?>
log.log 中成功写入了 start 和 finish。
这让我更加怀疑我的判断:

apache 导致的

于是折腾了一个小时,在服务器上装了

apache 并运行了一下文件,还是同样的结果,finish

并没有成功写入。
这时候一个同事跟我说,你写绝对路径试试看,于是我又修改了一个

_log

代码如下

:

<?php
    public function _log ($str) { 
            error_log($str . "\n", 3, '/var/www/apache/log.log'); 
        } 
?>
再观察一下,成功写入

“finish”,激动啊,终于找到问题了,我又修改了一下程序

代码如下

:

<?php
    public function __construct(){