fwrite()不是有效的流资源

时间:2016-02-18 10:05:25

标签: php

我创建了一个类Log,用于在文件中写入一些内容(这允许我在生产中调试我的应用程序)。现在,此Log类已包含在名为SingleTon的{​​{1}}类中,因此,为了使用Trace类方法,我只需执行此操作:

Log

这是 Trace::getInstance()->info("Write some content."); 类:

Trace

<?php require_once("Log.php"); class Trace { private $_trace; private static $_instance; private function __construct() { $this->_trace = new Log(); } public static function getInstance() { if(!isset(self::$_instance)) { self::$_instance = new static; } return self::$_instance; } } 类中我有一个Log来破坏读写流,如下所示:

destruct

if($this->_handle) { fclose($this->_handle); } 包含:$_handle。 现在,如果我执行一个这样的调用:Resource id #22,系统运行良好,文本在文件上正确写入,但是,如果我这样做:

Trace::getInstance()->info("Write some content.");

我收到此错误:

  

fwrite():22不是有效的流资源

我想到了一个类Trace::getInstance()->info("Write some content."); Trace::getInstance()->info("Write some content2."); 的实例,它仍然是开放的,所以我尝试了:

Trace

用于销毁每个调用的function __destruct() { unset(self::$_instance); } 实例。但我得到了这个错误:

  

尝试在...中取消设置静态属性Trace :: $ _ instance

我不知道出了什么问题,有人可以帮我解决一下吗?

更新 - 日志类

对于Log课程的写作,我这样做:

Log

其中if(fwrite($this->_handle, $mex) === false) 表示像$this->_handle这样的资源,而stream是要写的消息。现在我陷入了例外:

$mex

仅在第二次尝试时,第一次尝试我可以在文件上正确写入。在日志文件的破坏中我已经:

if(fwrite($this->_handle, $mex) === false)
{
    throw new RuntimeException("Can't write.");
}

如果我使用没有静态实例的public function __destruct() { // Close the stream if($this->_handle) { fclose($this->_handle); } } 类,我没有问题,例如:

Log

没有错误发生。

0 个答案:

没有答案