[PHP]plog0.3.2不支持php5的解决方法

没时间细看,不知道现在支持不了,反正先转了再说。

 

Plog0.32不支持php5,类定义出现问题……

还好以前有高人已经解决了,但是原文没有太弄明白,那个判断错误的程序function _internalErrorHandler( $e)老是出错,

说getfile()有问题,弄了半天不行只好屏蔽了,留了一个空函数在那里,竟然可以运行……也不知道会不会有问题。上SMTH找牛人请教去。

贴下那篇文章:

【原作:snowphy  @ SMTH

日前由于需要在php5上运行plog,但网上下载的plog_0.3.2_cn包不能直接使用(未汉化的没有看,应该也不行)
又找不到资料,只能自己研究,侥幸成功,不敢把经验独享,写个总结供其他有同样需要的人做参考。

以下步骤在windows2000 Advanced Server系统实现
使用plog_0.3.2_cn + php5.0.2 + mysql4.1.7(mysqli函数库)

修改plog_0.3.2_cn源程序如下
1.修改/class/object/exception.class.php:
说明:
去掉里面的Exception类,去掉throw、catch函数。修改_internalErrorHandler函数(名字无所谓,可以改成你喜欢的)
这里要说的是,php5提供了系统的Exception类,所以不用再自己定义,而且也不能自己定义,否则会出现重复定义的错误
这里提供的错误处理类,仅仅是打印出错误信息,高级功能请自行编写。
  //自定义错误处理函数
  /*
   *参数:$e   Exception类型
   */
  function _internalErrorHandler( $e)
  {
    echo ("Error in file " . $e->getFile( ) . " on line " .

       $e->getLine( ) . ".
" . "Error message: "" . $e->getMessage( ) .

       "" and error code: " . $e->getCode( ) . ".");
  }

  //注册我们自定义的错误处理函数
  $old_error_handler = set_error_handler( "_internalErrorHandler" );
?>

2.修改/class/object/reflection.class.php
reflection类改名为_reflection
说明:
同上,php5提供了Reflection类,这里我们把类名稍做变动
Reflection的具体作用请参考php5手册
由于其他代码里用到了自定义的这个类,我没有把它去掉

3./class/controller/controller.class.php
原new reflection()改为new _reflection()
说明:
此改动对应2

4./class/database/adodb/adodb-iterator.inc.php
ADODB_Iterator类增加函数
function valid()
{
  return !$this->rs->EOF;
}
说明:
实际上应该是把hasMore函数改名为valid,怕有其他代码对hasMore的调用,
就多加了一个,两个函数功能是一样的,这样调用哪一个都可以。

做了上述改动之后就可以把plog_0.3.2装在php5上了,下面的改动是为了让plog使用mysqli的函数库来代替原来的mysql函数库

5./class/database/db.class.php(line 24)
/class/dao/model.class.php(line 45)
/wizard.php(line 397 in function connectDb)
/register.php(line 52 in function connectDb)
/class/plugin/pluginbase.class.php(line 171 in function connectDb)
/class/config/configdbstorage.class.php(line 59 in function ConfigDbStorage)

就是把代码中所有 $db = NewADOConnection("mysql");的,都改成 $db = NewADOConnection("mysqli");
这个也可以改成其他你想用的数据库类型,plog支持的数据库种类还是蛮多的。

做完之后发现也没做多少改动,却花了不少时间-_-,想想主要是对php5不熟悉,准确的说是php5比php4多了哪些功能,
改动过程中,主要参考了O"Reilly出版的《Upgrading.to.PHP.5》,应该说学到了不少东西*^_^*

由于改动不多,就不提供改好的包了,有需要的按照上面的办法改以下还快就能搞定的。

希望能给正在找相关资料的人提供帮助。
                                                                                                                                          2004-11-18
                                                                                                                                               snowphy
附:
Upgrading to PHP 5
By Adam Trachtenberg

Publisher : O"Reilly
Pub Date : July 2004
ISBN : 0-596-00636-5
Pages : 304

1个PATA硬盘+1个SATA硬盘+1个光驱

以ICH5、ICH5R、ICH6、ICH6R为代表的Intel南桥芯片支持SATA,目前的i865、i875及最新的i915、i925系列芯片组都提供了对SATA的支持。如果主板的SATA接口是由ICH5/ICH5R芯片提供的,那么应该这样连接:

将SATA硬盘的数据线连接到主板的"SATA1"接口中;将PATA硬盘与光驱通过一根IDE数据线连接起来,其中PATA硬盘的跳线设置为"主盘",并连接到数据线的"Master"端,将光驱的跳线设置为"从盘",并连接到数据线的"Slave"端,最后将这根IDE数据线连接到主板的"IDE2"接口中。

在连接SATA硬盘时要注意:有些SATA硬盘一般都具备传统的4针电源接口及SATA电源接口,在使用时可以任意选择其中一个接口来连接电源,但是绝对不要将这两个接口都接上电源插头,否则会烧毁硬盘的。
将所有硬盘及光驱的数据线按上述方法连接好之后,再连接好设备的电源线。接下来启动电脑进入BIOS,选择并进入"Integrated Peripherals"设置窗口,然后进入"OnChip IDE Device"设置画面。在该画面中,除了将"IDE HDD Block Mode"、"On-Chip Primary PCI IDE"、"On-Chip Secondary PCI IDE"三个选项设置为"Enabled"外,其他8个选项全部设置为"Auto"。
再将光标移动到窗口下方的"On-Chip Serial ATA"选项上按回车键,然后在弹出的窗口中选中"Combined Mode"后按回车键。
  最后将光标移动到"Serial ATA Port0 Mode"上按回车键,在弹出的窗口中选中"Primary Master"并回车。此时"On-Chip Serial ATA"和"Serial ATA Port0 Mode"选项的设置分别为"Combined Mode"和"Primary Master"。

按"F10"键保存BIOS设置,重新启动电脑后,再次进入BIOS的"Standard CMOS Features"窗口就会发现,SATA硬盘占据了"IDE Channel 0 Master"通道,而PATA硬盘则占据了"IDE Channel 1 Master"通道,光驱占据"IDE Channel 1 Slave"通道。

经过以上设置后,SATA硬盘的优先级比PATA硬盘的高,建议将操作系统安装在SATA硬盘上(此时在DOS下SATA硬盘的第一个分区是"C"盘)。如果不想将SATA硬盘作为系统盘,而想把操作系统安装在PATA硬盘上,则可以在BIOS中将PATA硬盘的启动优先级提高:进入"Advanced BIOS Features"窗口,选择"Hard Disk Boot Priority"并进入硬盘启动优先顺序设置窗口。

  在该窗口中,默认是SATA硬盘排在PATA硬盘的前面,此时可以选中PATA硬盘,然后按"Page Up"键,使PATA硬盘排在SATA硬盘的前面。最后保存BIOS设置并重新启动电脑,这样PATA硬盘的第一个分区在DOS下便成了"C"盘。

四种浏览器对clientHeight、offsetHeight和scrollHeight的解释

这四种浏览器分别为IE(Internet Explorer)、NS(Netscape)、Opera、FF(FireFox)。

clientHeight
大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。

offsetHeight
IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。

scrollHeight
IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。
NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。

简单地说
clientHeight 就是透过浏览器看内容的这个区域高度。
NS、FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。
IE、Opera 认为 offsetHeight 是可视区域 clientHeight 滚动条加边框。scrollHeight 则是网页内容实际高度。

同理
clientWidth、offsetWidth 和 scrollWidth 的解释与上面相同,只是把高度换成宽度即可。

但是
FF 在不同的 DOCTYPE 中对 clientHeight 的解释不同, xhtml 1 trasitional 中则不是如上解释的。其它浏览器则不存在此问题。