PHP 移植的几点经验

最近帮别人忙将一个在 Linux 上的 PHP + MySQL 的小系统移植到 Windows 上,PHP 不变,数据库改用 SQL Server ,整个移植过程挺简单。

1、环境

  • 在 Windows 上安装 PHP ,注意要将 PHP\sessiondata 的目录设置为 IUSR_Machine 用户可写
  • 在 IIS 中建立 PHP 的虚拟站点,如果是 IIS 6.0,新增加一个 PHP 的 CGI 扩展并启用之
  • 修改 PHP.ini ,使 PHP 可以连接 SQL Server,extension=php_mssql.dll,并更改 session.save_path (Linux 上一般是 /tmp,Windows 上是 C:\PHP\sessiondata)
  • 在 Windows 上安装 MySQL、MySQL Control Center(可选)、MySQL ODBC Connector。

2、数据库

  • 将 MySQL 的数据备份文件恢复
  • 在 SQL Server 中新建 DB,并使用 DTS 将 MySQL 的 DB 导入
  • 可以还要做少许设置,将一些未能导入的设置还原,如 Key、Index、Auto Increment 列等
  • 在新数据库建立专门的 PHP 访问登录用户

3、应用

  • 将 MySQL 的数据库连接参数改成 MS SQL Server ,参数都差不多,无非 Server、DB Name、UserName 和 Password 等;
  • 将所有 PHP 页面中的 mysql_XXX 函数替换成 mssql_XXX   函数,唯一不同的是没有 mssql_error 这个函数;
  • MySQL 的 SQL 中可以用 “’” 来加在表名的两端,这在 SQL Server 中是非法的,将其替换成空(替换成 [ ] 也可以,但太麻烦);
  • MySQL 的 SQL 中使用 LIMIT m,n (从 m 条开始取 n 条记录)来实现分页,SQL Server 中没有这样的功能,只能使用 TOP 和子查询来实现了

如 SELECT * FROM Orders ORDER BY ID DESC LIMIT 10,5 ,可以变成:

SELECT TOP 5 * 
FROM ( SELECT TOP 5 * 
                  FROM ( SELECT TOP 10+5 *
                                     FROM Orders
                                     ORDER BY ID DESC ) Temp1
                  ORDER BY ID ASC ) Temp2
ORDER BY ID DESC

之所以用这么复杂的 SQL ,是为了保证只取出有限行的数据,并且排序保护不变,不过效率未知

  • 将一些 SQL 的关键字予以处理,在 MySQL 中,User、Size、Language、Top 等都可以使用,但要在 SQL Server 的 T-SQL 中使用,则必须要在两边加 [ ] 了。


基本上就改这么一些东西,如有必要,再更改一下默认首页的名称,就可以完全正常使用了。

“PHP 移植的几点经验”的5个回复

  1. 转换到SqlServer
    数据量不大的话
    可以取出数据
    配合
    mssql_data_seek()分页
    还有
    可以在php中可以调用SqlServer存储过程实现分页

  2. 如果服务器上
    只运行php的话 可以考虑用Apache跑
    iis跑php用cgi模式的话
    进程内会经常多出好多php.exe
    用ispi跑那也快不了多少
    或者apache和iis各用各的端口
    还有换到sqlserver有一个需要重视的问题
    就是 “注入”
    因为sqlserver可以同时执行多条sql语句。

评论已关闭。