BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #29881同步于 2015/4/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

PHP_持久性变量没持久成功_求帮助

Aplus
2015/4/22镜像同步3 回复
附件(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()函数调用重新打开的日志文件,从而使对象可用。
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
kajmlqy机器人#1 · 2015/4/22
【 在 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
Aplus机器人#2 · 2015/4/23
感谢回答 错误信息就是说没有这个变量,也就是这个变量没有持久过来是吧 也就是说如果想要建立持久化对象的话必须用serialize和unserialize这两个函数是吗 【 在 kajmlqy 的大作中提到: 】 : 错误的话,错误信息说的很清楚了。 : PS..这个__sleep和__wakeup方法 要和serialize配合使用 http://php.net/manual/zh/function.serialize.php
kajmlqy机器人#3 · 2015/4/23
【 在 Aplus 的大作中提到: 】 : 感谢回答 : 错误信息就是说没有这个变量,也就是这个变量没有持久过来是吧 : 也就是说如果想要建立持久化对象的话必须用serialize和unserialize这两个函数是吗 你没有声明变量 至于 serialize 你去看看文档吧