分类存档: 后端 - 第2页

Apache崩溃提示php5ts.dll出错的问题

现象:

Apache在Windows启动后自动启动服务时出错,跳出错误报告,提示php5ts.dll导致Apache崩溃,同时,所有基于MySQL的PHP程序无法运行,例如phpMyAdmin一登录就出错

原因:

PATH环境变量设置中将MySQL的安装路径也加入在里面,而且MySQL的路径在PHP的路径前面,导致PHP的MySQL模块使用了MySQL安装目录下的libMySQL.dll而不是PHP安装目录下的libmysql.dll,而根据PHP安装目录中install.txt在第966行左右的警告:

Warning

Don’t mix up your installation with DLL files from different PHP
versions. You have the only choice to use the DLL’s and extensions that
ship with your downloaded PHP version.

这个警告说只能使用你下载PHP时一起下载过来的版本的DLL,而上面的设置恰恰混合使用了MySQL里面的DLL和PHP自己的DLL,因而导致了这个问题的产生。

解决方法:

将 Path 环境变量中的 PHP 路径放到 MySQL 的前面,或者如果你不需要直接在命令行中使用 mysql 的话(仍然可以切换到MySQL目录下再访问mysql命令行程序,只是不那么方便)可以去掉 MySQL 在 Path 环境变量的路径

使用 SWFUpload 组件上传的两个问题

1.Flash Cookie Bug:

在非IE内核浏览器下Flash会忽略自身浏览器的所有 cookie , 而会发送持久型的 cookie 到浏览器,但是 Session Only 的 cookie 不会被发送, 也就是说使用 Session 进行登录验证的工作会出现问题,需要使用其它方式,附加上会话验证需要的信息(使用POST参数)以重新启动会话。

2.上传文件类型判断:

通过 SWFUpload 上传的文件类型(Content-Type)会变成 application/otcet-stream ,基于此判断文件类型的操作会失败

PHP 附件形式的下载

当下载需要用户登录验证权限、并且可以自定义下载的文件名等情况下需要以附件形式下载文件,代码如下:
(由于 poor IE 的特殊性,需要为它做特别处理)

header("Content-type: application/octet-stream");
$isIE and $filename = mb_convert_encoding( $filename, 'GBK' , 'UTF-8' ); # IE 不认识UTF-8的中文文件名,所以转换为GBK编码
header('Content-Disposition: attachment; filename="'.$filename.'"'); # 备注: 文件名要做安全过滤,防止跨站攻击
echo file_get_contents($filepath);