《php程序设计》这本书中的这个例子是错的,大家帮我看看如何更正这个错误

vvhot 2004-08-09 02:37:15
第一个文件:log.inc
<?php
// this file is Log.inc

class Log {
var $filename;
var $fp;

function Log($filename) {
$this->filename = $filename;
$this->open();
}

function open() {
$this->fp = fopen($this->filename, "a")
or die("Can't open {$this->filename}");
}

function write($note) {
fwrite($this->fp, "$note\n");
}

function read() {
return join('', file($this->filename));
}

function __wakeup() {
$this->open();
}

function __sleep() {
// write information to the account file
fclose($this->fp);
return array('filename');
}

}
?>

第二个文件:front.php
<?php
include_once('Log.inc');
session_start();
?>
<html><head><title>Front Page</title></head>
<body>
<?php
$now = strftime("%c");

if (!session_is_registered('l')) {
$l = new Log("f:\public\log");
session_register('l');
$l->write("Created $now");
echo("Created session and persistent log object.<p>");
}

$l->write("Viewed first page $now");
echo "The log contains:<p>";
echo nl2br($l->read());
?>
<a href="next.php">Move to the next page</a>
</body></html>

第三个文件:next.php
<?php
include_once('Log.inc');
session_start();
?>
<html><head><title>Next Page</title></head>
<body>
<?php
$now = strftime("%c");
$l->write("Viewed page 2 at $now");
echo "The log contains:<p>";
echo nl2br($l->read());
?>
</body></html>

运行front.php,结果正常,但点击结果中的 Move to the next page 链接后跳转到next.php时出错,提示:
Notice: Undefined variable: l in F:\public\next.php on line 9

Fatal error: Call to a member function write() on a non-object in F:\public\next.php on line 9

怎样更正?我用的是php5,win2003,apache2.0.50
试过了,在php4下一样出错
...全文
91 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
countstars 2004-08-10
根据错误来看,是变量$l没有注册进去,Session注册部分出了问题,查看你的php.ini中Session设置是否正确了。一般要设置save_path,不过这个默认好像是系统临时文件夹,你自己手动设置一个已存在的目录比如在C盘下建立一个temp目录然后在php.ini中设置为c:\temp
我看了下应该没问题的,奇怪,我现在没环境帮你测试,回去再看看
回复
vvhot 2004-08-09
回pwtitle(doodoo):
你这样是在next.php中重新声明了$l吧?
那如果我想在next.php中继续使用front.php中的$l应该怎么做?
我初学,说错了不要见怪,麻烦耐心指点我一下,谢谢了

回ljcao(龙威):
请问在高版本php中这个例子怎样改才正确?
回复
龙威 2004-08-09
不是例子错,是你用了高版本的PHP,高版本的PHP对变量的要求很严格
回复
pwtitle 2004-08-09
$l->write("Viewed page 2 at $now");
你的$l没有经过声明,应该这样
$l = new Log("f:\\public\\log");

回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2004-08-09 02:37
社区公告
暂无公告