nav-left cat-right
cat-right
Zend FrameWork 手动添加调试sql语句

接手离职的同事的项目,基于Zend框架开发,我已经没用过Zend,所以对Zend的工作模式不太了解,又不想从头看手册,所以用到什么就去找什么,先碰到的问题就是sql语句的调试,开发中需要对每个查询的sql语句都做输出,以前用adodb库的时候有$db->debug=1来统一规划,现在不知道zend有没有类似的开关,粗略找了一下没找到,就自己动手diy一个。找到\Zend\Db\Adapter\Abstract.php文件,在query方法中加入如下代码:

 
if(DEBUG_MODE) {
echo $sql.'<hr>';
print_r($bind);
}

然后在index.php里define(‘DEBUG_MODE’,1); 通过这个开关来控制调试模式显示所有sql查询。

通用php防注入代码

if (!get_magic_quotes_gpc()) {
    function addslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map(‘addslashes_deep’, $value) :
                    addslashes($value);

        return $value;
    }

    $_POST      = array_map(‘addslashes_deep’, $_POST);
    $_GET       = array_map(‘addslashes_deep’, $_GET);
    $_COOKIE    = array_map(‘addslashes_deep’, $_COOKIE);
    $_REQUEST   = array_map(‘addslashes_deep’, $_REQUEST);
}

CentOS安装libwbxml2

最侧测试gropu-office的手机同步功能,需要用到wbxml这个库,安装方法如下

Max OS X : http://darwinports.com/ (搜索’wbxml’)

Debian / Ubuntu :执行命令: “apt-get install libwbxml2-utils” 即可

源码: http://libwbxml.aymerick.com/

RPM for Redhat or CentOS:

http://atrpms.net/dist/el4/wbxml2/

Yum 命令直接安装:

yum install libexpat.so.0 wbxml2

最近做在忙的事情

最近为公司添置一台DELL R300服务器,装了Centos 5.4 64位的操作系统,选择了最小化安装,然后手动编译安装web服务器所需要的环境,这次尝试了一下nginx做http服务,效果还可以,环境的配置大部分是从张宴的博客上学习的,装了Memcached和eaccelerator为php加速,php使用的fast-cgi模式,数据库装了最新的MySQL 5.5.2-m2版,配置过程中遇到很多问题,最终通过google、百度解决了。

接下来要做的就是将Discuz论坛的缓存系统改为memcache,据说会有很大改善。

discuz图片附件双水印

看到一些网站的图片都是左上和右下都有水印,于是就想到修改discuz生成水印的函数来实现,具体操作步骤如下:
先打开include/image.class.php,修改水印位置相关的内容:

 
                switch($watermarkstatus) {
                    case 1:
                        $x = +5;
                        $y = +5;
                        break;
                    case 2:
                        $x = ($img_w - $logo_w) / 2;
                        $y = +5;
                        break;
                    case 3:
                        $x = $img_w - $logo_w - 5;
                        $y = +5;
                        break;
                    case 4:
                        $x = +5;
                        $y = ($img_h - $logo_h) / 2;
                        break;
                    case 5:
                        $x = ($img_w - $logo_w) / 2;
                        $y = ($img_h - $logo_h) / 2;
                        break;
                    case 6:
                        $x = $img_w - $logo_w;
                        $y = ($img_h - $logo_h) / 2;
                        break;
                    case 7:
                        $x = +5;
                        $y = $img_h - $logo_h - 5;
                        break;
                    case 8:
                        $x = ($img_w - $logo_w) / 2;
                        $y = $img_h - $logo_h - 5;
                        break;
                    case 9:
                        $x = $img_w - $logo_w - 5;
                        $y = $img_h - $logo_h - 5;
                        break;
 
                    case 10://10为左上+右下双水印,这里是新增的
                 $x1 = +5;
                        $y1 = +5;
                        $x2 = $img_w - $logo_w - 5;
                        $y2 = $img_h - $logo_h - 5;
                        break;
                }

还有

if($watermarktype == 1) {
		($watermarkstatus==10){//判断是否是双水印
                        @imageCopy($dst_photo, $watermark_logo, $x1, $y1, 0, 0, $logo_w, $logo_h);
                        @imageCopy($dst_photo, $watermark_logo, $x2, $y2, 0, 0, $logo_w, $logo_h);
                    } else{
                        @imageCopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h);
                    }
				}

最后打开admin/setting.inc.php找到showsetting(‘settings_attach_image_watermarkstatus’,后面增加一行:

<input class="radio" type="radio" name="settingsnew[watermarkstatus]" value="10" '.$checkwm[10].'> #10 双水印

这样就可以再后台附件设置里看到。

mssql压缩日志提升速度
BACKUP LOG db_name WITH NO_LOG  --截断事务日志db_name是数据库名
     GO
     DBCC SHRINKFILE(db_log)    --收缩日志文件 ,db_log是日志名
     GO

最近公司网站访问速度老慢了,以为是网速和带宽的问题,后来无意中查看发现数据库日志文件达到快7g的大小,所以就去google搜压缩日志的方法,以上语句经过本地和远程测试都相当管用,压缩后的日志大小不到1m,网站访问速度明显改善,WIN2003+SQLSERVER2005下测试。

PHP+ADODB+MSSQL支持UTF8的2种解决方案

由于公司的项目都是用sql server 2005来开发的,所以最近的php项目为求简便都用了adodb库来操作数据库,鉴于有很多Ajax应用,所以所有编码都统一使用UTF8,连接数据库代码如下:

$db = &NewADOConnection('mssql');
$db->debug = 0;
$ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
$db->Connect($db_host, $db_user, $db_pass, $db_name) or die("Connect database failed");

但实际使用中发现mssql读取数据无法设置字符集和编码,最后把所有adodb的驱动库搜索了一遍发现了2个解决方案,第一个方案是使用ado_mssql来连接数据库,这样就可以支持charPage参数了,连接数据库代码如下:

$db = &ADONewConnection('ado_mssql');//这里将mssql改成ado_mssql
$ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
$db->charPage=CP_UTF8;//这里是关键
$myDSN="PROVIDER=MSDASQL;DRIVER={SQL Server};SERVER=$db_host;DATABASE=$db_name;UID=$db_user;PWD=$db_pass;";
$db->Connect($myDSN) or die("Connect database failed");

第二个方法是安装SQL Server Driver for PHP,早就知道微软除了这个驱动,一直么有尝试,这次在adodb类库里看到有mssqlnative的驱动,发现备注里说明要用到SQL Server Driver for PHP,下载地址:http://www.microsoft.com/Sqlserver/2005/en/us/php-driver.aspx
这是微软提供一套操作mssql2005/2008的PHP函数库,要使用这套操作函数库请保证PHP版本在5.2以上,下载解压后会看到dll文件,根据自己的php版本及环境来选择正确的dll文件放到php/ext/下, 更多说明请参考文档。 然后在php.ini中添加一行“extension=xxx.dll”,重启IIS后phpinfo()如果现实有“sqlsrv”扩展就说明安装成功了。Unix下安装请参照:http://phpbuilder.com/columns/alberto20000919.php3
接下来就可以使用新的驱动来操作数据库了,文档里有详细的操作方法,可以研究一下,总之就是操作数据库可以设置”CharacterSet” = “UTF-8″了,这里根据网上的方法把adodb库做简单的修改就可以了,adodb已经封装了大部分的操作方法,我们只需让adodb的mssqlnvtive支持设置Character就可以了,方法如下:打开adodb/driver/adodb-mssqlnative.inc.php,找到function _connect这个函数,在参数里添加CharacterSet,代码如下:

function _connect($argHostname, $argUsername, $argPassword, $argDatabasename,$CharacterSet="UTF-8")
{
    if (!function_exists('sqlsrv_connect')) return null;
    $connectionInfo = array("Database"=>$argDatabasename,'UID'=>$argUsername,'PWD'=>$argPassword,'CharacterSet'=>$CharacterSet);

这样我们连接数据库是的代码对应修改为:

$db = &ADONewConnection('mssqlnative');//这里将mssql改成mssqlnative
$ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
$db->Connect($db_host, $db_user, $db_pass, $db_name,$CharacterSet="UTF8")  or die("Connect database failed");
//当然你也可以使用别的编码。

用adodb的好处就是不用去学习微软提供的操作函数。

Sqlserver生成随机数的一些应用

Sqlserver虽然有rand()函数可以用,但单纯用rand()来获取随机数有很多限制,因为rand()生成的是类似0.747589267212168的随机小数,灵活处理一下就可以得到整数
1.select cast(ceiling(rand() * N) as int) //生成的数是N以内的证书
2.select cast(ceiling(rand(checksum(newid()))*N) as int) 这个同上,但在批量操作时往往这个会更有用,如
update table set field=cast(ceiling(rand() *5 ) as int) 和update table set field=cast(ceiling(rand(checksum(newid()))*N) as int)产生的效果就完全不同,前者虽然也是生成随机数了,但是所有table表里的field字段的数值都是一样的,而后者就各不相同,原理就是1是先生成随机数,然后再更新,2是更新每条记录前生成随机数。
3.将上面俩条语句中的ceiling换成floor就可以生成包含0的整数随机数。
4.随机查询得到N条记录用order by newid(),语句是select top N * from table order by newid()

10个在线文件管理软件PHP版
  1. Ajaxplorer (需翻墙着自行翻)
    AjaXplorer-screenshot
    AjaXplorer是一款通过本地实现远程端文件管理功能的软件。该软件提供了一个友好的可视化GUI界面方便用户的使用,502一直用的就是AjaXplorer,不知为何被墙奸了,不过还可以通过这个链接下载:http://sourceforge.net/project/showfiles.php?group_id=192639
    其主要特性有:
    可以对远程端文件进行全功能的操作,如上传、下载、删除、更名等
    提供了一个在线编辑器
    图片预览功能
    完备的书签系统
  2. eXtplorer
    extplorer
    eXtplorer是著名开源CMS程序Joomla的元件之一,支持中文,它是基于 PHP 和 ExtJS Javascript 库创建的。使用 eXtplorer 可以在线浏览文件和文件夹之外,我们甚至可以将 eXtplorer 作为 FTP 客户端去登录 FTP 服务器。。
  3. EpiwareEpiware是一个AJAX支持的项目与文档管理Web应用系统。它提供了一套完整的文件管理功能包括文档上传,下载,版本控制,审核,变化通知和访问历史列表等。Epiware还为开发团队创建一个安全的信息交流与相互协作平台。
  4. PHPCMS文件管理器 v4.03  本文中唯一一款国人开发的程序,功能一样灰常的强大
  5. PHP Navigator  Ajax文件管理,XP界面是这款软件的一个特点,很友好。
  6. WebShare 是一个采用Ajax+PHP技术开发的webFTP资源管理器。可以利用它来查看,复制,修改,新增和共享Web文档。
  7. osFileManager 
  8. Net2ftp 介个也很强大
  9. phpWebFtp
  10. CKFinder&CKEditor 源于FCKEditor,融入Ajax支持,并且扩展了很多功能,不过免费版会有很大缩水
帝国CMS Png透明水印解决方案

不知WC大大怎么想的,帝国CMS无论是老版还是新版就是不在水印函数里加入png透明水印的支持,还以为多复杂呢,研究一下发现原来是如此的简单,解决方案如下:

找到e/class/db.php中的:

 

if($isWaterImage)//图片水印
    {
        imagecopymerge($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h,$w_pct);//拷贝水印到目标文件
    }

将下面的代码改为下面的,原因是PNG类型水印本身具有真彩透明效果,所以水印融合度设置在这里是无效的:
阅读全部

1/41234