很久以前就用过PHPRPC,几年没用了,虽然一直在关注着,最近尝试着他来做了一下DZ6.0论坛,把遇到的情况与大家分享一下
首先使用PHPRPC把服务器的一些信息传递给客户端,如cookie的一些设置还有最重要的auth_key,然而即使是这样,我最后也没有同步成功。
经过仔细检查,才发现原来是authcode函数所导致。因为authcode函数里使用了一个全局变量$discuz_auth_key,这个key是在使用common.inc.php的时候根据useragent加上一定的规范而生成的。我在传递的时候把这个变量传回给了客户端,但发现通过PHPRPC生成的key与直接使用浏览器打开生成的KEY不一样。导致最后登录所生成的COOKIE无法decode,最后根据这个生成key的规范,在客户端直接生成好发送给服务端覆盖掉全局变量,使得验证通过。
(写的有点乱,其实就是对于不是从数据库里读出来的全局变量,PHPRPC访问时与直接浏览器访问时所生成的数据不一样)
然后在登录的时候因为DZ还要判断SID,如果有SID了那肯定是无法同步登录(理由和上面一样,两边生成的SID会不一样),于是先清空SID,然后再登录,由服务端生成好SID再传回来,就OK了。。。
由于这次是加载common.inc.php进行处理的,所以很多变量会在系统加载的时候生成,但由于我采用了PHPRPC,在这一步完成后,我会尝试不再加载common.inc.php,这样也可以节约开销(在用户量不大的时候无所谓,但因为每次调用PHPRPC,可能会造成在线用户数加1 这个问题。)
逐步改进,oh yeah
LINUX的关机与WINDOWS不一样,不能象WIN那样强关,如果强关可能会导致一些数据丢失,所以。。。
shutdown
1.作用
shutdown命令的作用是关闭计算机,它的使用权限是超级用户。
2.格式
shutdown [-h][-i][-k][-m][-t]
3.重要参数
-t:在改变到其它运行级别之前,告诉init程序多久以后关机。
-k:并不真正关机,只是送警告信号给每位登录者。
-h:关机后关闭电源。
-c:cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息把会送到每位使用者。
-F:在重启计算机时强迫fsck。
-time:设定关机前的时间。
-m: 把系统改为单用户模式。
-i:关机时显示系统信息。
4.命令说明
shutdown 命令可以安全地把系统关机。有些用户会使用直接断掉电源的方式来关闭Linux系统,这是十分危险的。因为Linux与Windows不同,其后台运行着 许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有登录的用户系统把要关闭,并且login指令会被冻结,即新的用户不能再登录。
最近在作一个uchome的小应用(只有两个input),为了增加体验要用到ajax,结果一折腾就是好几天,光调字符集问题就花了两天,以 前写asp,jsp时从来没费这么大劲.由于DW3中的default encoding没有GBK选项,用UTF-8写到库里是乱码,只能用GB2312.ajax总是在参数是中文时返回错误的结果(MySQL的 Connection是GBK,php页面用的是GB2312;header,meta,ajax的setRequestHeader也是 GB2312).
1.GBK和GB2312的不同
用FireFox的FireBug看到参数发送时是乱码,但在被请求页中返回的请求参数是正常的!就没有往字符集上想.就理所认为GBK ==GB2312,我从MSDN上看到的也验证了这个结果。让我们一起去看看:
折腾了2个多小时没想明白!去搜索一下吧:
以下来自:CSDN:http://blog.csdn.net/gashero/archive/2007/02/17/1511435.aspx
也许大家已经看惯了书上说的GBK是对GB2312的扩充,就是说,GB2312字符集中的所有字符都可以在GBK 字符集中找到。(by gashero)可是最近在一次调试Python爬虫的过程中就发现了一些字符的不同。同时大家也应该注意一些网页的默认编码字符集了。
当时正在分析的一个网页的默认编码字符集是GB2312,其中含有一个符号"·",这个常作为项目符号。在使用 GB2312进行解码时,得到的unicode字符是\u30fb,然后使用系统默认编码GBK进行打印时就提示了编码错误。即字符串"\xa1 \xa4"无法使用GB2312解码为unicode字符后再编码为GBK编码显示。(by gashero)实际测试中只要不会交换编码,那么使用同一种编码进行编码和解码就不会出问题。
后来查找得知,字符\u30fb是一种特殊的unicode字符,是一种不允许显示的字符,所以在GBK编码中就没有它的位置(by gashero)。而字符串"\xa1\xa4"使用GBK解码时得到的是\u00b7。
至此得知,虽然网页的默认编码是GB2312,但是实际上使用的是GBK编码,也使用了一些在GB2312和GBK之间不同的编码字符。所以也就导致了这个错误。
建议以后编程序的时候,遇到默认编码为GB2312的大可以直接使用GBK进行解码为unicode字符串。
明白了,我把所有有关字符集设置的地方都换成:GBK.这时通过FF的FireBug看到的请求参数正常了.问题解决了.
2.都有哪些地方要设置字符集呢?为什么要统一呢?
[原文中作者在此是引用他在csdn中的文字,我将他复制回来了,最后几段代码可看性不强,所以没有贴。。。http://blog.csdn.net/xiaofanku/archive/2008/06/25/2584856.aspx]
最近在学php,由于项目的需要!想在php中用ajax来完成一些体验(减少业务处理的单页压力).发现最近也有一位朋友为此苦恼不已.不废话了!
1.注意几个编码地方
1.1表单所在的网页的:meta
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1.2XMLHTTPRequest GET的编码
httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
此处设置不对!responseText会返回empty(没有内容),如果您有FireFox并装有FireBug组件的话,点击状态栏的绿色箭头打开控件面板(非OS的,FireBug的),选中Console会看到Response选项是:
Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=
当然如果是连接数据库的话也可能跟下面的(1.4)有关系.
1.3ajax GET请求的页面(.php)header
header("Content-Type:text/html;charset=UTF-8");
1.4数据连接的编码
mysql_query("SET CHARACTER SET UTF8");
如果你的数据库是GBK的或其它的字符集,为了统一编码还要与以上三个统一起来.下面我的示例用的数据库也是GBK,从昨天开始我一起把它设成:
mysql_query("SET CHARACTER SET GBK");
可还是有时发现会返回空(empty 我用的是ResponseText),千万不要写成UTF-8噢,数据库的字符集是没有中间的"-"
2.如果还是返回空或无效的值
例如:a.html中有表单,a用XMLHTTPRequest和b.php通讯.
首先要保证b.php可以正确运行,例b.php?param=value打印出来的是你期望的值
如果a.html打印b.php返回的结果(ajax)与上面的(单独运行b.php)执行结果有出入.可以删除b.php中的空行试试!我想应该不会出现这种情况,但我有几次作demo删除后和删除前确实有出入
一大早pengyuan就和我说了一些用多张图片合并成一个GIF的方案,他使用了我前段时间博客里提到的imagick的组件。
然后把代码贴给我看了一下。
这是他第一次的代码:
PHP代码
- <?php
- $animation = new Imagick();
- $animation->setFormat( "gif" );
- for ($i=1; $i<4; $i++) {
- $thisimage = new Imagick();
- $thisimage->readImage($i.'.png');
- $thisimage->setImageFormat( "gif" );
- $animation->addImage($thisimage);
- $animation->setImageDelay(1000);
- }
- header( "Content-Type: image/gif" );
- echo $animation->getImagesBlob();
然后,他发现图片怎么也没有动,于是有了第二次的代码:
PHP代码
- <?php
- $image=new Imagick();
- $animation = new Imagick();
- $animation->setFormat( "gif" );
- $delay = 30;
-
- for ($i=1; $i<4; $i++) {
- $thisimage = new Imagick();
- $thisimage->readImage($i.'.jpg');
- $thisimage->setFormat( "gif" );
- $animation->addImage($thisimage);
- $animation->setImageDelay( $delay );
- }
-
- header( "Content-Type: image/gif" );
- $animation->writeImages("9.gif",true);
在这样的情况下,他发现GIF图片可以动了。看来保存成功了。
根据他写的代码,我作了一个小小的测试:
PHP代码
- <?php
- $filelist = array(
- '1.jpg',
- '2.jpg',
- '3.jpg'
- );
-
- $animation = new Imagick();
- $animation->setFormat('gif');
-
- foreach ( $filelist as $file ){
- $image = new Imagick();
- $image->readImage( $file );
- $animation->addImage( $image );
- $animation->setImageDelay(60);
- unset( $image );
- }
- header( "Content-Type: image/gif" );
- echo( $animation->getImagesBlob() );
-
代码几乎没变,除了在readImage行下面那个setFormat函数去掉了。同样生成了GIF图片,现在我把问题和解决情况和大家说一下,也希望大家少走点弯路吧
1、在animation里设置好setFormat为gif后,其他地方可以不需要设,因为最终都是通过 $animation->addImage 进入载入图片的,所以载进来肯定是GIF了
2、$animation->setImageDelay( 60 ) ,这个设置帧数的设定只能在每次AddImage后才能设定,否则会报错:没有加载图片时不能设定帧数
3、$animation->writeImages函数,不能使用writeImage,因为是多帧的,它会认为是多张图片
4、至于为什么在使用header设定文件头和echo 输出后图片没有动,我目前怀疑这是浏览器的设定关系,因为,你右键点击生成的图片另存下来时,图片是可以正常的跳动的。
解决完毕。感谢pengyuan的代码
原文:http://hi.baidu.com/dream621/blog/item/7f60de82781b37b96d81196d.html
PHP代码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- function pdf2png($PDF,$Path){
- if(!extension_loaded('imagick')){
- return false;
- }
- if(!file_exists($PDF)){
- return false;
- }
- $IM = new imagick();
- $IM->setResolution(120,120);
- $IM->setCompressionQuality(100);
- $IM->readImage($PDF);
- foreach ($IM as $Key => $Var){
- $Var->setImageFormat('png');
- $Filename = $Path.'/'.md5($Key.time()).'.png';
- if($Var->writeImage($Filename) == true){
- $Return[] = $Filename;
- }
- }
- return $Return;
- }
主要是思路不错就转发了