返回信息流附件(641B) front.php
附件(584B) Log.php
附件(357B) next.php
//Log.php文件
<?php
class Log
{
private $filename;
private $fh;
function __construct($filename)
{
$this->filename = $filename;
$this->open();
}
function open()
{
$this->fh = fopen($this->filename, 'a') or die("Can't open {$this->filename}");
}
function write($note)
{
fwrite($this->fh, "{$note}\n");
}
function read()
{
return join('', file($this->filename));
}
function __wakeup()
{
$this->open();
}
function __sleep()
{
fclose($this->fh);
return array("filename");
}
}
?>
//front.php文件
<?php
include_once "Log.php";
session_start();
?>
<html>
<head>
<title>Front Page</title>
</head>
<body>
<?php
$now = strftime("%c");
$path = "D:\\tmp\persistent_log";
//if (!session_is_registered('l')){
$logger = new Log($path);
// $_SESSION['l'];
//session_register('l');
$logger->write("Created $now");
echo("<p>Created session and persistent log object.</p>");
//}
$logger->write("Viewed first page {$now}");
echo "<p>The log contains:</p>";
echo nl2br($logger->read());
?>
<a href="next.php">Move to the next page.</a>
</body>
</html>
//next.php文件
<?php
include_once "Log.php";
//include_once "front.php";
session_start();
?>
<html><head><title>Next Page</title></head>
<body>
<?php
$now = strftime("%c");
//echo $now;
$logger->write("Viewed page 2 at {$now}");
echo "<p>The log contains:";
echo nl2br($logger->read());
echo "</p>";
?>
</body>
</html>
问题:进入front.php页面正确,日志文件正常写入,如0图
但是点击链接进入next.php之后产生错误,如1图
请问是什么问题
说明:Log类中,__wakeup()方法来重新打开日志文件,__sleep()关闭日志文件;
跟随front.php页面到next.php的链接,希望能触发持久性对象$logger的加载,__wakeup()函数调用重新打开的日志文件,从而使对象可用。
这是一条镜像帖。来源:北邮人论坛 / www-technology / #29881同步于 2015/4/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
PHP_持久性变量没持久成功_求帮助
Aplus
2015/4/22镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
【 在 Aplus 的大作中提到: 】
: [upload=1][/upload][upload=2][/upload][upload=3][/upload][upload=4][/upload][upload=5][/upload]
: //Log.php文件
: <?php
: ...................
错误的话,错误信息说的很清楚了。
PS..这个__sleep和__wakeup方法 要和serialize配合使用 http://php.net/manual/zh/function.serialize.php
感谢回答
错误信息就是说没有这个变量,也就是这个变量没有持久过来是吧
也就是说如果想要建立持久化对象的话必须用serialize和unserialize这两个函数是吗
【 在 kajmlqy 的大作中提到: 】
: 错误的话,错误信息说的很清楚了。
: PS..这个__sleep和__wakeup方法 要和serialize配合使用 http://php.net/manual/zh/function.serialize.php
【 在 Aplus 的大作中提到: 】
: 感谢回答
: 错误信息就是说没有这个变量,也就是这个变量没有持久过来是吧
: 也就是说如果想要建立持久化对象的话必须用serialize和unserialize这两个函数是吗
你没有声明变量
至于 serialize 你去看看文档吧