php4与php5的区别小结(配置异同)(2)


<?php
var_dump(strrpos(‘ABCDEF',‘DEF')); //int(3)
var_dump(strrpos(‘ABCDEF',‘DAF')); //bool(false)
?>
实例: 没有属性的对象不再被当成“empty”
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
// Will be executed
}
?>


实例: 有些情况下类必须在使用之前定义

复制代码 代码如下:


<?php
//works with no errors:
$a = new a();
class a {
}
//throws an error:
$a = new b();
interface c{
}
class b implements c {
}
?>


二、CLI 和 CGI
PHP 5 中对 CLI 和 CGI 文件名作了些改变。PHP 5 中,CGI 版本被改名为 php-cgi.exe(以前是 php.exe),现在主目录中的是 CLI 版本(之前是 cli/php.exe)。
PHP 5 中引进了一种新模式:php-win.exe。这和 CLI 版本相同,只除了 php-win 不输出任何内容,因此不会提供控制台(屏幕上不会闪过“dos 窗口”)。此行为类似 php-gtk。
PHP 5 中,CLI 版本总会产生全局变量 $argv 和 $argc 而不管 php.ini 是怎么设的。即使将register_argc_argv设为 off 也不影响 CLI。
参见命令行模式。
三、移植配置文件
由于 ISAPI 模块的名字改了,从 php4xxx 改为 php5xxx,因此需要对配置文件作些修改。CLI 和 CGI 文件名也改了。更多信息请查看相应章节。
移植 Apache 配置极其简单。照下面的例子来检查需要做的修改:
实例: 移植 Apache 配置文件到 PHP 5
# 将下面这行: LoadModule php4_module /php/sapi/php4apache2.dll # 改成这一行: LoadModule php5_module /php/php5apache2.dll
如果 web 服务器是以 CGI 模式运行 PHP 的,应该注意 CGI 版本的名字从 php.exe 改为了 php-cgi.exe。在 Apache 中,应该照这样改:
实例: 移植 Apache 配置文件到 PHP 5,CGI 模式
# 将下面这行: Action application/x-httpd-php "/php/php.exe" # 改成这一行: Action application/x-httpd-php "/php/php-cgi.exe"
其它的 web 服务器中,需要修改 CGI 或者 ISAPI 模块的名字。
四、新函数
PHP 5 有了些新函数。下面是列表:
Arrays:
array_combine() - 用一个数组作为键名,另一个数组作为值创建一个新数组
array_diff_uassoc() - 计算数组的差别,并用用户提供的回调函数作附加的索引检查
array_udiff() - 用回调函数比较数据来计算数组的差别
array_udiff_assoc() - 计算数组的差别并作附加的索引检查。用回调函数来比较数据
array_udiff_uassoc() - 计算数组的差别并作附加的索引检查。数据的比较和索引检查都用回调函数来完成
array_walk_recursive() - 对数组的每个成员递归使用用户函数
array_uintersect_assoc() - 计算数组的交集并作附加的索引检查。用回调函数来比较数据
array_uintersect_uassoc() - 计算数组的交集并作附加的索引检查。数据和索引都用回调函数来比较
array_uintersect() - 计算数组的交集。用回调函数来比较数据
InterBase:
ibase_affected_rows() - 返回前一个查询影响到的行的数目
ibase_backup() - 在服务管理器中发起一个后台任务并立即返回
ibase_commit_ret() - 提交一个事务但不关闭
ibase_db_info() - 请求有关数据库的统计信息
ibase_drop_db() - 删除一个数据库
ibase_errcode() - 返回一个错误代码
ibase_free_event_handler() - 取消一个已注册的事件句柄
ibase_gen_id() - 递增指定的发生器并返回其新值
ibase_maintain_db() - 在数据库服务器上执行一条维护命令
ibase_name_result() - 给结果集指定一个名字
ibase_num_params() - 返回一个准备好的查询的参数数目
ibase_param_info() - 返回一个准备好的查询的参数信息
ibase_restore() - 在服务管理器中发起一个还原任务并立即返回
ibase_rollback_ret() - 回卷一笔事务并保留事务上下文
ibase_server_info() - 请求有关数据库服务器的统计信息
ibase_service_attach() - 连接到服务管理器
ibase_service_detach() - 从服务管理器断开
ibase_set_event_handler() - 注册一个当事件发布时要调用的回调函数
ibase_wait_event() - 等待数据库发布一条事件
iconv:
iconv_mime_decode() - 解码 MIME 头信息字段
iconv_mime_decode_headers() - 一次解码多个 MIME 头信息字段
iconv_mime_encode() - 压缩 MIME 头信息字段
iconv_strlen() - 返回字符串中的字符计数
iconv_strpos() - 在堆栈中找到第一个出现的子串位置
iconv_strrpos() - 在堆栈中找到最后一个出现的子串位置
iconv_substr() - 从字符串中取出一部分
Streams:
stream_copy_to_stream() - 把一个流的数据复制到另一个流
stream_get_line() - 根据给定的分隔符中流中读取一行
stream_socket_accept() - 接受一个由 stream_socket_server() 建立的 socket 连接
stream_socket_client() - 打开一个 Internet 或 Unix 域的 socket 连接
stream_socket_get_name() - 获取本地或远程的 sockets 名字
stream_socket_recvfrom() - 从 socket 获取数据(不管连接是否已经建立)
stream_socket_sendto() - 向 socket 发送一个消息(不管连接是否已经建立)
stream_socket_server() - 建立一个 Internet 或 Unix 域服务器的 socket
Date/Time:
idate() - 将本地进间格式化为整数
date_sunset() - 计算所指定日期和地点的日落时间
date_sunrise() - T计算所指定日期和地点的日出时间
time_nanosleep() - 廷迟执行程若干秒和若干纳秒
Strings:
str_split() - 把一个字符串分割为数组
strpbrk() - 在一字符串中搜索给定的字符集合中的任意一个字符
substr_compare() - 以二进制的形式比较两个字符串,从第一个字符串的 offset 开始,直到到达长度为 length 时结束,可自定义是否大小写敏感比较
Other:
convert_uudecode() - 解码 uuencoded 的字符串
convert_uuencode() - 对字符串进行 uuencode
curl_copy_handle() - 复制一个 cURL 句柄及其所有参数
dba_key_split() - 把一个键分隔为字符串数组
dbase_get_header_info() - 取得 dBase 数据库的头部信息
dbx_fetch_row() - 获取结果集中被设置为 DBX_RESULT_UNBUFFERED 的行
fbsql_set_password() - 修改指定用户的密码
file_put_contents() - 向一个文件内写入字符串
ftp_alloc() - 为准备上传的文件分配空间
get_declared_interfaces() - 以数组的形式返回所有已定义的接品
get_headers() - 获取服务器响应 HTTP 请求时的所有头部信息
headers_list() - 返回所有已发送或准备发送响应头部列表
http_build_query() - 生成一个已经过 URL 编码的请求字符串
image_type_to_extension() - 根据 getimagesize(), exif_read_data(), exif_thumbnail(), exif_imagetype() 所返回的 image-type 取得文件名后缀
imagefilter() - 对图像应用滤镜
imap_getacl() - 获取指定邮箱的 ACL
ldap_sasl_bind() - 使用 SASL 绑定到 LDAP 目录
mb_list_encodings() - 以数组的形式返回所支持的全部字符集
pcntl_getpriority() - 获得任意一个进程的优先级
pcntl_wait() - Waits on or returns the status of a forked child as defined by the waitpid() system call
pg_version() - 返回一个包含客户端、协议和服务器版本的数组
php_check_syntax() - 检查指定文件的语法
php_strip_whitespace() - 返回已经去除注释和空白的源代码
proc_nice() - 修改当前进程的优前级
pspell_config_data_dir() - 修改语言文件的位置
pspell_config_dict_dir() - 修改主要单词列表的位置
setrawcookie() - 发送一个没有经过 url 编码的 cookie 值
scandir() - 列中指定目录中的所有子目录和文件
snmp_read_mib() - 在一个可用的 MIB 树中读取和分板一个 MIB 文件
sqlite_fetch_column_types() - 以数组的形式返回一张表中的列类型
注意: Tidy 扩展库的 API 也作了重大调整
五、新指令
PHP 5 在 php.ini 中引进了一些新指令。列表如下:
mail.force_extra_parameters - 强制指定的参数附加值作为额外的参数传递给 sendmail 库。这些参数总是会替换掉 mail() 的第 5 个参数,即使在安全模式下
register_long_arrays - 允许/禁止 PHP 注册已过时的 $HTTP_*_VARS 变量
session.hash_function - 选择一种散列函数(MD5 或 SHA-1)
session.hash_bits_per_character - 定义将二进制散列数据转换为可读格式时每个字符中储存几个位(从 4 到 6)
zend.ze1_compatibility_mode - 启用 Zend Engline 1 代(PHP 4)兼容模式
六、数据库
关于数据库(MySQL 和 SQLite)在 PHP 5 中有些改变。
PHP 5 中不再绑定 MySQL 客户端连接库,因为授权和一些其它问题。
有个新扩展库 MySQLi(改良版 MySQL),设计用来工作于 MySQL 4.1 及更高版本之下。
自 PHP 5 起,SQLite 扩展库内置在 PHP 中。SQLite 是一个可嵌入 SQL 数据库引擎,不是客户端连接库用来连接大型数据库服务器(如 MySQL 或 PostgreSQL)的。SQLite 库直接读写磁盘上的数据库文件。
七、新对象模型
PHP 5 中有个新对象模型(Object Model)。PHP处理对象的方式完全重写了,允许更佳性能和更多特性。之前版本的 PHP,对象处理方式和原始类型(例如整型和字符串)相同。此方法的缺点是当变量被赋值或作为参数传递给方法时语义上整个对象都被拷贝。在新方法中,对象通过句柄引用,而不是值(可以将句柄当成是对象的标识符)。
很多PHP程序员根本没意识到旧的对象模型的这种拷贝怪癖,因此大多数PHP应用程序拿来就能运行,或者只做很小的修改。
新对象模型的文档见“类与对象”。

PHP基础知识:PHP4和PHP5的配置异同比较


配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别。在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了;在windows配置则需要注意以下不同点:
1. php4ts.dll 和 php5ts.dll 内容来自中国站长资讯网()

这个文件要拷贝到apache的bin目录下或者系统目录下

2. httpd.conf 文件加载的模块

示例如下:
# For PHP4 + apache1.x.xx
LoadModule php4_module d:/www/webserver/php4/sapi/php4apache.dll
AddType application/x-httpd-php .php 内容来自中国站长资讯网()
# For PHP4 + apache2.x.xx
LoadModule php4_module d:/www/webserver/php4/sapi/php4apache2.dll
AddType application/x-httpd-php .php

# 其中d:/www/webserver/php4是php的所在目录。

# For PHP5 + apache1.x.xx
LoadModule php5_module d:/www/webserver/php5/php5apache.dll
AddType application/x-httpd-php .php

# For PHP5 + apache2.x.xx
LoadModule php5_module d:/www/webserver/php5/php5apache2.dll
AddType application/x-httpd-php .php
# 其中d:/www/webserver/php5是php的所在目录。

3. 加载mysql的方式不同

在php4以及以前的版本中,mysql是集成在php中的;
而在PHP5(包括BETA)版本,mysql是作为一个模块加载的,需要设置php.ini来加载,例如
extension_dir = "D:/www/WebServer/PHP5/ext/"
extension=php_mysql.dl l

另外,PHP4,PHP5都需要系统目录下的libmysql.dll的支持,如果版本不对,即使你设置了正确的extension_dir和php_mysql.dll的参数,也会造成apache启动的时候提示phpp_mysql.dll找不到的错误。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/34dfd2d7c96b4f8426b2fc1e86ba8272.html