综合问题解疑:Win2003 x64,php5.3.8/19,kohana到bootphp

近期一个项目,用 apache+php 编写后台,大致共写了 3 个版本,第一个版本没有框架,用 C ++ 的方式写出来。总觉得这么些年来,还从没正式用过哪个 php 框架,于是用 ThinkPHP 框架大致重新组织代码,但发现 ThinkPHP 定死了 utf- 8 编码,而这项目全程都是 gbk 编码的,仔细思考后,还是觉定放弃 ThinkPHP,当然之间尝试过了把 ThinkPHP 全部转为了 gbk 来使用,为此还特地编了一个小程序(utf2gbk,点击下载)。

最终选择了 kohana 框架重写。没任何决定性的因素,更没有去比较其他框架的优劣,全凭当时的心情。

开发环境是 Win7 x64+Apache2.22+mysql 5.5.20+php 5.3.8。

目标环境是 Win2003++Apache2.22+mysql 5.5.20+php 5.2。

本机测试通过后,今天上午传到目标机器。问题冒出来一大堆,大致叙述如下备忘。

首先是报错,内容大致是未定义的常量 (?) 之类,找到这个原因没花多少时间:kohana 需要 php5.3.3 以上。

于是把本机的 php5.3.8 打包上传到目标机器,替换掉原来的 5.2,其中没更改任何配置,但 apache 死活起不来了。我看了下本机的配置,确实是 Load 了 php5apache2_2.dll。但 Win2003 x64 貌似比 Win7 x64 少了什么能力,2003 的 x64 无法正确 Load php5apache2_2。

网上找了大量的文章,不得要领。期间到官网重新下来完整的 apache、php 5.3.19 的安装文件,都不能 Load,于是想尝试下 cgi 方式来载入 php。

下午下了 mod_fcgid-2.3.6,改用 cgi 方式加载 php。

接下来遇到第三个问题,能访问静态文件,但访问 php 一律报错:拒绝访问。注释掉 php 的加载后直接显示 php 文件内容,所有基本确定 php 已经加载成功。浪费了很多时间来看搜狗,同时也多次对比手头几个 httpd 配置模版,眼睛都看花了也没看出问题在哪里。

答案在这里:http://aiyooyoo.com/index.php/archives/164/,厅级程序员。我少了这个了:Options Indexes FollowSymLinks ExecCGI,php-cgi 网站必须加上 ExecCGI。加上后 testphp 马上就出来了。

然后是关于 kohana 的问题,好好的网站,全部成了这:No input file specified。

能直接访问到每一个存在的文件,但 rewrite 全部失效了。当然,rewrite 模块已经开启了,.htaccess 也在(网站是本机测试后的完整打包),顿时很无助,搜狗没帮上我,google 也帮不上忙,搜出来的几乎清一色的网站没配置好、权限什么的浮云,php.ini 中的 doc_root?离题几千里。

终于看到一个帖子提到 rewrite 规则的问题,即 cgi 下和 load dll 方式下的规则有差异。于是立马去 http://kohanaframework.org 看文档,果然有说明:Clean URLs。这个当然是看过的,只是当时没仔细看更多内容,在本机通过后就没细看了。

总算看到了久违的登录页码,但还有问题,点击登录冒出一大堆错误,数据库连接失败。一眼就看出,数据库参数不对,端口号错了,打开配置文件,明明已经设置了端口号。打开源码,发现数据库的配置参数根本就没有端口这个参数,这情景很让人狂晕。把端口号直接加在 hostname 后面,然后一切正常。

回过头来想想,或许一切问题都可以从原始文档得到答案,但文档都是英文的,给了我们非常充分的理由逃离文档,而直接用搜索期盼的答案。

文档都是英文的,很多的苦涩在其中。

后续:各种逼迫之下,自己整了一个 php 框架,bootphp,解决了最关键的几个需求:路由(和 laravel 一样定义即时路由,我多增加了一种路由表的方式,超级好用),数据库(model)

正文完
 
评论(没有评论)
验证码