浏览 2930 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-07
最后修改:2010-04-07
5台Windows Server 2003 1台 Ubuntu 9.04 server Windows. 很简单. 配置配置就OK. 网站就放在IIS 6.0上面. 访问正常. Ubuntu就比较麻烦了. 因为没有研究过Linux只是知道,也多少学习了点Linux知识. 不至于到盲的地步. Linux错误问题: 服务器配置静态IP.网关始终是个*,无法修改. 至今未果. 网关无法ping通. 而这台服务器上的好几个PHP的正在使用的项目 都放在上面. 项目都在用. 没办法. 想到的解决办法.只有项目移植. 找了一台安装APMServ 绿色环境的 服务器. PHP的项目真是超级的大. 10G/5G/2G. 里面好多视频,音频文件.只好跑到机房 移动硬盘直接拷贝. 还好服务器在一起. 不然又跑断腿儿了. 项目/数据转移完毕. 开始移植到Windows Server 2003 上的 APMServ 新建虚拟主机->指定项目目录->重启Apache. 完毕. PHP的项目是用Zend Framework+Smart 模板做的. 框架比较简单. 看起来稍微容易一些 开始总结问题: Exception 1: Object not found 异常 Zend Framework URL Rewriting 错误. 首页正常. 任何链接都不可用. 修改${APMServ5.2.6}/Apache/conf/apmserv/vhost.conf文件 <VirtualHost *:80> ServerName www.test.com DocumentRoot "E:/test" <Directory "E:/test"> Options FollowSymLinks IncludesNOEXEC Indexes DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.shtml index.aspx default.aspx AllowOverride None //修改None->All Order Deny,Allow Allow from all php_admin_value open_basedir "E:/test/;F:/APMServ5.2.6/tmp/uploadtemp/;F:/tmp" php_admin_value safe_mode On </Directory> </VirtualHost> Exception 2: PATH_ROOT 路径问题 虚拟目录根目录指定问题 参考Linux 服务器 apache的配置. DocumentRoot var/www/project 项目目录结构 var/www/project/ project >image/文件夹 >name/项目目录 >index.html name文件夹 >application/ >cache/ >library/Zend、Smart类库 >logs/ >public/ >index.php >* APMServ 指定虚拟主机.如果项目根目录指定到 www/project 访问就会报 include_path www/project/library 错误. 很明显少了一个name文件名. 查看源文件获取类库的代码 获得的Path是 DocumentRoot. 即建立虚拟主机时指定的项目根目录. 那样肯定不对. 更改项目根目录 项目整个访问路径都会改变. 采用投机取巧的办法. 在源代码中修改代码 define('PATH_ROOT',$_SERVER['DOCUMENT_ROOT'].'/name'); 问题解决. Exception 3: Session must be started before any output has been sent to the browser 感觉这个问题是个十分恶心人的问题. 更何况是对于我这种PHP根本不会的人来说. 困扰了一个下午. 终于在昨晚搞定. 其实问题很简单. 关于PHP文件UTF-8 档案BOM的问题. 在项目根目录下新建*.php文件 拷贝如下代码【代码下有下载】 <?php if (isset ( $_GET ['dir'] )) { //config the basedir $basedir = $_GET ['dir']; } else { $basedir = '.'; } $auto = 1; checkdir ( $basedir ); function checkdir($basedir) { if ($dh = opendir ( $basedir )) { while ( ($file = readdir ( $dh )) !== false ) { if ($file != '.' && $file != '..') { if (! is_dir ( $basedir . "/" . $file )) { // 如果是文件 echo "filename: $basedir/$file " . checkBOM ( "$basedir/$file" ) . " <br>"; } else { $dirname = $basedir . "/" .$file; // 如果是目录 checkdir ( $dirname ); // 递归 } } } closedir ( $dh ); } } function checkBOM($filename) { global $auto; $contents = file_get_contents ( $filename ); $charset [1] = substr ( $contents, 0, 1 ); $charset [2] = substr ( $contents, 1, 1 ); $charset [3] = substr ( $contents, 2, 1 ); if (ord ( $charset [1] ) == 239 && ord ( $charset [2] ) == 187 && ord ( $charset [3] ) == 191) { // BOM 的前三个字符的ASCII 码分别为 239 187 191 if ($auto == 1) { $rest = substr ( $contents, 3 ); rewrite ( $filename, $rest ); return ("<font color=red>BOM found, automatically removed.</font>"); } else { return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); } function rewrite($filename, $data) { $filenum = fopen ( $filename, "w" ); flock ( $filenum, LOCK_EX ); fwrite ( $filenum, $data ); fclose ( $filenum ); } ?> 执行:http://www.test.com/*.php 会在网页看到如下输出 …略 filename: ./name/cache/zxtx/zxtx_2010-03-18.txt BOM Not Found. filename: ./name/common.php BOM found, automatically removed. filename: ./name/index.php BOM Not Found. filename: ./name/library/.svn/entries BOM Not Found. filename: ./name/library/.svn/format BOM Not Found. …略 访问项目是不是没有错误了. 呵呵. 否则,关闭浏览器重新打开,再次访问. Ps. 有时候问题确实很诡异. 我只不过是稍微用记事本修改了一下PHP文件. 结果访问又报Session must be started before any output has been sent to the browser无奈再次执行取出BOM的代码. 正常. Exception 4: php生成image/png 显示红X 问题. 可能也是Exception 3的问题哦. 至少我的是.. 这些问题. 对于PHP程序员来说. 或许是小KISS. 但对于我这个搞Java的来说. 有点抓头了. 所以值得记录一下. 具体碰到的移植问题就这些啦. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |