2010年10月31日星期日
PHP MYSQL JQUERY JS 编写二级联动下拉列表
请浏览www.wackguild.tk 我的博客浏览
我的百度空间也有http://hi.baidu.com/dszul
2010年7月23日星期五
PHP jquery ajax 提交登录
$(document).ready(function(){
$("#form").submit(function(){
login();
return false;
});
});
function login() {
var user = $("#username").val();
var pass = $("#password").val();
if (user == "") {
$("#confirm").text(alert("请输入登录用户名!"));
$("username").focus();
return false;
}
if(pass == "") {
$("#confirm").text(alert("请输入登录密码!"));
$("#password").focus();
return false;
}
$.ajax({
type: "POST",
url: "login_comment.php",
data: "username=" + user + "&password=" + pass,
beforeSend: function(){
$("confirm").text("登录中,请稍候");
},
success: function(msg){
var mss = msg.match(/.*?<\/body>/img).join("=").replace(//g,"").replace(/<\/body>/g,"").split("=");
if(mss == "success"){
var loginout_url ='退出';
$("#confirm").html("");
}else {
$("#confirm").text(alert("没有此用户或者密码不正确!"));
}
}
});
}
html 代码:
PHP 代码:
session_start();
if($_POST["paaword"]&&$_POST["username"]){
$_SESSION[id]=$_POST["username"];
setcookie('n',$_POST["username"],time()+3600);
setcookie('p',$_POST["password"],time()+3600);
$_SESSION[p]=$_POST["password"];
}
$p = isset($_POST["password"]) ? $_POST["password"] : $_GET["password"];
$id = isset($_POST["username"]) ? $_POST["username"] : $_GET["username"];
if($id && $p ){
echo 'success';
}
2010年7月21日星期三
PHP之Emacs实现自动提示
这里主要感谢“土豆”兄弟提供的一个日本emacser 的博客网站地址,在哪里看到详细的配置,我也是按照步骤配置的,结果成功了。不过还需要改进,有点别扭,
得知此配置的网站:http://d.hatena.ne.jp/IMAKADO jump
首先将这个文件download下来,放在一个路径里面。我的就放在 ~/.emacs.d/php/下面
wget http://www.emacswiki.org/cgi-bin/wiki/download/install-elisp.el
将此文件加载到配置文件中去。
(add-to-list 'load-path "~/.emacs.d/php/")
(require 'install-elisp)
(setq install-elisp-repository-directory "~/.emacs.d/php/");;设置使用install-elisp-from-emacswiki 后下载下来的文件路径,我把它们放在一个文件夹里面
然后使用M-x将相关的文件get download下来,不用管它会怎么样,因为我们设置了下载路径,自动会下载到那个路径文件夹里面。(* 注意,Pagename输入后 他会自动打开,你需要执行C-c C-c 进行编译。)
M-x:
install-elisp-from-emacswiki
Pagename:
anything.el
M-x:
install-elisp-from-emacswiki
Pagename:
anything-match-plugin.el
M-x:
install-elisp-from-emacswiki
Pagename:
auto-complete.el
;;完成后在.emacs 加入此句代码 :
(locate-library "auto-complete.el")
;;然后重新载入下.emacs 文件。跟前面的操作一样,我们的PHP配置文件给弄下来编译。
M-x:
install-elisp-from-emacswiki
Pagename:
php-completion.el
;;php 自动提示设置
(add-hook 'php-mode-hook
(lambda()
(require 'php-completion)
(php-completion-mode t)
(define-key php-mode-map (kbd "C-c p") 'phpcmp-complete)
(when (require 'auto-complete nol t)
(make-variable-buffer-local 'ac-sources)
(add-to-list 'ac-sources 'ac-source-php-completion)
(auto-complete-mode t))))
2010年6月24日星期四
用php中的popen函数实现php的并发处理
1. 建立外部资源脚本。 如示例中使用t.sh。 当然, 也可以直接使用curl等命令行2. 准备好参数, 提供给pipe脚本
2. 使用popen调用脚本。 调用之后,就不用关心了。
3. 开始其他的和pipe不相关的逻辑处理
4. 其他处理完成之后, 使用fgets等方式,
获取popen的数据
php程序:
# get argument for pipe here if it has.
#start pipe
echo ’call popen start: ’. date("H:i:s"), "\n";
$pipe = popen(dirname(__FILE__) . ’/t.sh’, ’r’);
echo ’call popen end: ’. date("H:i:s"), "\n";
#Other code here
sleep(5);
echo "Here is my code. time: " . date("H:i:s"), "\n";
#read pipe result
while ($s = fgets($pipe,1024)) {
echo $s;
}
pipe脚本:
echo 1, `date +%T`;
sleep 1;
echo 2, `date +%T`;
sleep 10;
echo 3, `date +%T`;
输出结果:
call popen start: 10:16:40
call popen end: 10:16:40
Here is my code. time: 10:16:451, 10:16:402, 10:16:413, 10:16:51
结论, 我们有三个sleep。
php中一个 sleep 5,sh中两个sleep, 10+1如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。
2010年6月21日星期一
迅雷专用链接原理及转换
首先要明白Base64编码是怎么一回事,不懂的先去百度一下再回来。
Base64编码是一种加密算 法,Email的原始信息就是由Base64编码构成的。
而这些专用链接都是通过Base64编码加工转换而成的。
迅雷专用 地址例子:thunder://QUFodHRwOi8vZG93bi5pcHZ2LmNuL3diLmV4ZVpa
真实文件下载链 接:http://down.ipvv.cn/wb.exe
附转换工具下载:http://ifu25.cn /VC_down.asp?FileName=ChangeRUL.rar
搞懂了Base64编码之后,一切都变的得心应手了:
实 例原始地址:http://im.baidu.com/install/BaiduHi.exe
1、迅雷专用链接编码
在 原地址前面加"AA",后面加"ZZ"(不包括引号),地址变为
AAhttp://im.baidu.com/install/BaiduHi.exeZZ
此地址base64编码为
QUFodHRwOi8vaW0uYmFpZHUuY29tL2luc3RhbGwvQmFpZHVIaS5leGVaWg==
迅雷专链即在上地址前加thunder://,即
Thunder://QUFodHRwOi8vaW0uYmFpZHUuY29tL2luc3RhbGwvQmFpZHVIaS5leGVaWg==
2、快车专用链接编码
在原地址前后都加上"[FLASHGET]"(不包括引号),地址变为
[FLASHGET]http://im.baidu.com/install/BaiduHi.exe[FLASHGET]
此地址base64编码为
W0ZMQVNIR0VUXWh0dHA6Ly9pbS5iYWlkdS5jb20vaW5zdGFsbC9CYWlkdUhpLmV4ZVtGTEFTSEdFVF0=&yinbing1986
快车专链即在上地址前加flashget://,注意后面还要加上"&符号",符号怎么得出不清楚,在最后后面加的是好好爱的 个人信息,至今未有人报告转换错误,即
Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9pbS5iYWlkdS5jb20vaW5zdGFsbC9CYWlkdUhpLmV4ZVtGTEFTSEdFVF0=&yinbing1986
3、旋风专用链接编码
旋风相对就简单多了,将原地址直接base64编码为
aHR0cDovL2ltLmJhaWR1LmNvbS9pbnN0YWxsL0JhaWR1SGkuZXhl
旋风专链即在上地址前加qqdl://,即
qqdl://aHR0cDovL2ltLmJhaWR1LmNvbS9pbnN0YWxsL0JhaWR1SGkuZXhl
2010年6月10日星期四
emacs自定义工具栏
(setq tool-bar-map (make-sparse-keymap))
要自定义工具栏,只需要修改tool-bar-map这个变量就可以了,一般我们可以用tool-bar-add-item这个函数来往tool- bar-map里添加工具项。
tool-bar-add-item的原型是这样的:
(tool-bar-add-item icon def key &rest props)
参数icon设置工具图标,emacs的工具栏可以使用XPM和PBM格式的图标,当emacs 有libxmp支持时会使用XPM格式,没有libxmp库时会寻找PBM格式的图标(Info上还说有XBM格式,我没搞清楚什么情况下使用XBM)。
在etc/images目录下可以看到emacs自带的图标一般都同时有XPM和PBM两种格式,就是为了在没有libxmp库时也能显示工具栏,因为如果我们只有xpm格式的图标而没有libxmp库时,emacs就不在工具栏上显示这个项了。所以我们自己做图标时最好XPM和PBM都准备一份。
icon参数的类型是字符串,只需要传主文件名就可以,扩展名emacs会自己加,比如对图标文件semantic.xpm写成”semantic”。
emacs会在image-load-path下查找图标文件,这个变量的值默认为(“…/etc/images/” data-directory load-path),就是说它除了查找image目录外还会查找所有的load-path,所以如果我们有自己的图标目录,把它加到image- load-path或者load-path都可以。
图标的大小好像没有限制,emacs本身使用的图标是24×24像素的,如果使用了比它大的图标,整个工具栏会自动扩大。
参数def设置这个工具项被按下的执行什么命令,它的格式跟global-set-key里的command格式是一样的。
参数key用来给这个工具项指定一个key,这个key用于唯一标识这个工具项,所以在同一个keymap里key不能重复。
剩下的参数可以设置一些属性项,具体可以设置哪些属性可以看Info > elisp > Keymaps > Menu Keymaps > Defining Menus > Extended Menu Items。常用的几个属性有:
* :enable 这个属性的值是一个表达式,emacs对这个表达式求值,如果值为nil时,这个工具项会被禁用。
* :visible 这个属性控制这个工具项是否显示,它的类型与:enable是一样的。
* :help 这个属性类型是字符串,当鼠标在工具项上停留时会显示这个字符串。
其余的属性我没用过,也没仔细研究它们用来干什么。
举例来说,如果要添加一个工具项用来执行gdb命令,并且只有在c-mode或者c++-mode时才让它有效,可以这样:
(tool-bar-add-item "gud/run" 'gdb 'gdb
:enable '(memq major-mode '(c++-mode c-mode)))
这样会把gdb这个工具项添加到默认工具栏的最后,如果不想要emacs默认的工具栏,可以先执行(setq tool-bar-map (make-sparse-keymap))把默认的工具栏清空。
2010年6月2日星期三
2010年5月29日星期六
PHP 批量生成HTML
ob_start();//开启缓冲buf
..............................
.....................................
$the_content = ob_get_contents();//获取buf中的数据
ob_end_clean();//清空buf里的数据
$fp = fopen('tmp/'.$articleid.'.html', "w"); //将html文件打开
fputs($fp, $the_content); //将获取到的buf数据写入打开的文件
fclose($fp); //关闭打开的文件
}