分享、学习、提高
Thank you for reading...
2009/01/06 18:37
Tags: , ,
今天碰到需要用php连mssql获取数据,先在本机测试,发现phpinifo()中没mssql的影子。php.ini中mssql.dll前的;已经去掉。
翻看了之前写的两篇文章,没提到windows下连要进行那些设置。后经测试,原来需要把跟目录的NTWDBLIB.DLL移到system32下就行了。

读取datetime格式时碰到了些麻烦,在查询分析器中看到的是:2004-11-12 17:25:45.000
但用程序获取到的确不是这个,echo出来是:11 12 2004 5:25PM,这种格式,strtotime也认不到。
翻了下mssql的帮助手册,找到convert这个函数,用它解决了问题。
select convert(char,custom_time,20) as custom_time
20是产生这种格式:yyyy-mm-dd hh:mm:ss[.fff]
具体covert的用法可以参考MSSQL自带的手册。


本地测试OK后,去服务器测试,还得装个freetds,之前折腾过,linux下成功用php连接,参照方法,下了稳定版。
wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
tar -zxf freetds-stable.tgz
cd freetds-0.82

重编译php5

./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2.2.0/bin/apxs --with-mysql=/usr/local/mysql --with-gd=/usr/local/gd --with-zlib --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --enable-sockets --with-iconv --enable-mbstring --with-curl=/usr/local/curl --with-mssql=/usr/local/freetds

这个php5也是最新稳定版,是5.2.8,发现装完会自动停掉apache(我记得以前的版本好像不会),得记得装完要马上去启动Apache。

装完,开始测试程序,发现获取到的中文全是乱码,怪事!测试了下,在sql里传递中文过去,MSSQL接收到的也是乱码。搜索了一段时间没找到答案。想到可能是php.ini里有什么设置,找了下,找到mysql.charset,默认是没有设置,可能是ISO-8858-1这种字符。我将其设为gb2312,结果直接连不上MSSQL服务器了。再试下,换成GB2312,哈,正确获取到中文字符了!

后来查了下,发现网上的文章说要改成"UTF-8"的,freetds不支持gb2312,不过实际证明了现在的版本是支持的。另外就是mysql.charset这个参数得大写。
2009/01/04 20:42
Tags: , ,
服务器上装了个phpmyadmin,发现有一行提示
引用
无法载入 mcrypt 扩展,<br />请检查 PHP 配置


看着文件名mcrypt,就感觉是加密用的,应该不装也不影响phpmyadmin的正常操作。

搜索了下,居然只有windows下的解决方案。在windows下解决还真简单,把php.ini中的 ;extension=php_mcrypt.dll 前面的“;”去掉就可以了。

我的环境是在linux下,我在php安装目录,用configue --help | grep mcrypt一下,看到 --with-mcrypt[=DIR]     Include mcrypt support,看来是需要单独安装的。查了下,在安装mcrypt之前,必须另外安装libmcrypt和mhash。

先记着,我下次安装时,来更新。
2008/11/16 18:14
Tags: , ,
凡是做站的几乎都碰到过被人侵入,被加入恶意代码。现在一般要加,就是批量加,一下子网站几百上千,有的上万的文件全部被加了恶意代码,要清除这些东东,还真是麻烦。

上月,有朋友Linux服务器上的站被批量加入恶意代码。linux命令不熟,只好写了一个批量替换的程序,来替换到这些恶意代码。
调试程序中,由于没做好,还把本机和服务器上的程序都清空了一次。。。
后来,终于写完,非常快的批量清除了这些代码。

最近,又碰到一个站需要更改网站标题,其实内容是不用变的,有十几万静态页面,后台全部生成怀疑要一天。想想上次的代码好像就可以用,于是找出来,化了点时间修改了下。本机测试好后,传到服务器上更改。发现不行,原来UTF8的页面,又复制了一份存入UTF8格式。完成,十几万的文件替换也就化了几分钟,比我后台重新生成这些文件不知道要快多少倍!

代码也稍微整理了下,但还是很粗糟,但基本能用。

在google创建了此项目:http://code.google.com/p/batch-replace/,以便存放。

程序下载地址:http://code.google.com/p/batch-replace/downloads/list
2008/10/13 21:20
Tags: , ,
使用smarty模板时,默认的定界符是{和}。当页面的代码中包含保留词或定界符时,就会出现如下的错误提示:
引用
Fatal error: Smarty error: [in hx.html line 100]: syntax error: unrecognized tag: ......


翻阅了一下Smarty官方手册,找到解决方案。

整理了一下,三种解决方法。

1.更换定界符。

$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
即使用<!--{和}-->来作为定界符,但在模板写变量时就会比较麻烦,个人不建议这样操作。
详细说明:http://www.itlearner.com/code/smarty_manual/language.escaping.html

2.在代码中用{ldelim},{rdelim}来替代你设定的定界符。
详细说明:http://www.itlearner.com/code/smarty_manual/language.function.ldelim.html

3.用{literal}和{/literal}来包含你的代码。
我推荐使用这种方法,至少我是觉得这种方法是最方便的。把可能会出问题的代码前后加上{literal}和{/literal}即可。
详细说明:http://www.itlearner.com/code/smarty_manual/language.function.literal.html
2008/08/18 20:52
Tags: , ,
从朋友那拿到一份代码,用CURL模拟用户登录并采集需要用户登录的页面的。
<?php
$cookie_jar = tempnam('./tmp','cookie');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'登陆地址');
curl_setopt($ch, CURLOPT_POST, 1);
$request = 'username=xxx&pwd=xxx';
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);//传递数据
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);//把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设定返回的数据是否自动显示
curl_setopt($ch, CURLOPT_HEADER, false);//设定是否显示头信息
curl_setopt($ch, CURLOPT_NOBODY, false);//设定是否输出页面内容
curl_exec($ch);
curl_close($ch); //get data after login

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, '查看地址');
curl_setopt($ch2, CURLOPT_HEADER, false);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar);
$orders = curl_exec($ch2);

echo $orders;
curl_close($ch2);// 实践证明很稳定:)
?>


先在本机测试,在php.ini中去掉了extension=php_curl.dll前面的;,查看一下phpinfo(),并没有curl。
查了下文档,
引用
Note to Win32 Users: In order to enable this module on a Windows environment, libeay32.dll and ssleay32.dll must be present in your PATH.

将libeay32.dll 和ssleay32.dll复制到system32下,重启apache,刷新phpinfo(),看到了curl。
引用
cURL support  enabled  
cURL Information  libcurl/7.16.0 OpenSSL/0.9.8d zlib/1.2.3

本机测试顺利通过,再去服务器上测试。原没装curl,只好重新编译php。
在原编译参数后面加了--with-curl=/usr/local/curl。
我这次的配置是:
./configure '--prefix=/usr/local/php5' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-mysql=/usr/local/mysql' '--with-gd=/usr/local/gd' '--with-zlib' '--with-png' '--with-jpeg-dir=/usr/local/jpeg' '--with-freetype-dir=/usr/local/freetype' '--enable-sockets' '--with-iconv' '--enable-mbstring' '--enable-track-vars' '--enable-force-cgi-redirect' '--with-config-file-path=/usr/local/php5/etc' --with-curl=/usr/local/curl
很快OK。phpinfo显示
引用
CURL support  enabled  
CURL Information  libcurl/7.12.1 OpenSSL/0.9.7a zlib/1.2.3 libidn/0.5.6


感觉挺好用的:)
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]