2011/08/14 at 02:46
js和php里面都有一个函数eval();其作用是将参数里面的字符串当做代码执行,用这个函数可以创建自定义的回调函数
php回调函数:
/**** @param* @return**/
function a($str){echo $str;}
/**** @param* @return**/
function s($callBack){eval($callBack);}
s("a('linshaoqiang');");
exit;
js回调函数:
function a(str){
alert(str);
}
function s(callBack){ with ( window )eval(callBack);
}
s("a('linshaoqiang')");
标签:
eval,
回调函数
2011/08/14 at 02:38
用xheditor上传文件时,出现一点上传就卡死没反应的问题,在后台处理上传的php文件里打印$_FILES时发现为空数组,出现这个问题的原因主要有两个:表单原因或者php设置原因:
1,表单类型:
上传文件的表单编码类型必须设置成 enctype="multipart/form-data",因为要传大数据,一般提交方式用POST
2,php设置问题:
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空. 解决的方法是:
1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完. 但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行. 这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time 在php.ini里查找 max_execution_time 默认是30秒.改为 max_execution_time = 0(可修改范围为PHP_INI_ALL) 0表示没有限制
或者在php文件头设置ini_set('max_execution_time',0);
2. 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。 查找 post_max_size .改为 post_max_size = 150M(可修改范围为PHP_INI_PHP_INI_PERDIR)
3. 很多人都会改了第二步.但上传文件时最大仍然为 8M. 为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。 查找upload_max_filesize,默认为8M改为 upload_max_filesize = 100M(可修改范围为PHP_INI_PHP_INI_PERDIR)
另外要说明的是,post_max_size 大于 upload_max_filesize 为佳.
PHP_INI_* 常量的定义
常量 |
值 |
含义 |
PHP_INI_USER |
1 |
配置选项可在用户的 PHP 脚本或 Windows 注册表中设置 |
PHP_INI_PERDIR |
2 |
配置选项可在 php.ini, .htaccess 或 httpd.conf 中设置 |
PHP_INI_SYSTEM |
4 |
配置选项可在 php.ini or httpd.conf 中设置 |
PHP_INI_ALL |
7 |
配置选项可在各处设置 |
标签:
PHP_INI
2011/08/14 at 02:34
Jquery异步加载一个页面是如此简单:
$.ajax({ url: "/testl/index.html", cache: false, success: function(html){
$("#test").append(html);
}
});
或者更简单的:$("#test").load("/test/index.html");
以 POST 形式发送附加参数并在成功时显示信息。
jQuery 代码:
$("#feeds").load("feeds.php", {limit: 25}, function(){ alert("The last 25 entries in the feed have been loaded"); });
载入并执行一个 JavaScript 文件:加载并执行 test.js ,成功后显示信息。jQuery 代码: $.getScript("test.js", function(){ alert("Script loaded and executed.");});
标签:
ajax,
JQ,
jquery
2011/08/14 at 02:29
利用Mysql中的 的聚合函数 count(*) 可以实现这个功能,例如需要查询data表中name出现次数最多的记录,可以先按照group by name分组,用count算出分组里的条数,再按照count排序:
select name,count(*) from data group by name order by count(*) DESC limit 1
不加limit限制将返回按照name重复次数排列的数据
标签:
count(*),
mysql
2011/08/14 at 02:27
在使用聚合函数之前,我们可以通过where对查询加限制条件,那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢?答案是having。
HAVING子句可以让我们筛选成组后的各组数据.
WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。
having子句出现的数据必须在group by 之后,order by 之后
例如在上一篇中对name按照出现次数排序之后,我们还想只查出名字里面含有lin的数据,可以这样写:
select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC
标签:
group by,
having,
mysql
2011/08/14 at 02:26
用class关键字创建两个类,Son类继承Parents类:
class Parents{
}
class Son extends Parents {
}
如果子类没定义构造函数,初始化子类时会自动调用父类的构造函数,并且函数里面可以调用子类的公共属性,但是如果调用子类的private私有属性则不可以,另外由 protected 所定义的类成员则可以被其所在类的子类和父类访问
class Parents{
function __construct(){echo $this->name;}
}
class Son extends Parents {
var name = 'lin';
}
$Son = new Son();
如果子类定义了构造函数或者其他与父类同名的函数,会把父类函数覆盖,想调用父类该函数可以用parent:::func()来调用。如果父类函数用了final关键字,子类重定义该函数时就会报错。
标签:
继承,
面向对象
2011/08/14 at 02:25
定义抽象类使用abstract关键字,主要用于定义规范,其函数必须被继承的子类全部重载后才能实例化,重载不全会报错
abstract class AbClass{
abstract function a1();
abstract function a2();
}
class AbSonClass extends AbClass{
//全部重载父类方法
function a1(){
echo "抽象方法1";
}
function a2(){
echo "抽象方法2";
}
}
接口和抽象类非常相似,接口的引用,可以多引用,通过关键字implements 引用,全部为抽象方法,在引用它的子类里面也必须全部覆盖所有方法
interface InClass{
function in1();
function in2();
}
//先继承后引用
class InSonClass extends MyClass implements InClass{
//全部重载父接口方法
function in1(){
echo "抽象方法1";
}
function in2(){
echo "抽象方法2";
}
}
接口和抽象类的区别:
接口可以同时引用多个,而抽象类只能继承一个
接口里面的方法全部为抽象方法,且不能有实现代码,而抽象类的方法可以有实现代码
标签:
抽象类,
接口,
面向对象
2011/08/14 at 01:36
1,session的注销
清除session变量所有的值,应该使用$_SESSION=array();
而不是$_SESSION=null或者unset($_SESSION);
需要销毁session节省开销的时候,可以使用session_unset()
,session_destroy()。两者的区别:
session_unset()
释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
session_destroy()
删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
彻底销毁session正确的顺序是
session_unset();
session_destroy();
2,$_SESSION[$key],session的键值$key必须符合php变量的定义规则,即不能以数字或特殊符合开头。
标签:
php,
session
2011/08/14 at 01:27
有时候input框的内容我们只是希望显示出来,不希望用户修改,那么可以在ipnut里面加上属性:readonly = "readonly",这样内容就被固定住了
有时我们不希望用户快速使用之前提交过的数据来完成重复提交,即禁用表单的自动完成功能,可以在表单<form>里面加入autocomplete="off"关闭。
标签:
表单
2011/08/14 at 01:24
使用模版分离技术制造网站时,在制作模版页面时总要用到一些自定义的标签,有{# #} [# #]等等,但是我觉得用html的注释标签<!-- -->是比较好的,因为这样标签的内容在可视化页面不可见,不会破坏页面的布局和美感,而真正需要用到html的注释的时候就只能用<!--// -->这样的形式了。
而重复打<!-- -->这个标签还是挺烦人的,可以使用DW的自定义快捷键来完成,在编辑->快捷键里,为了保护原有的快捷键不被破坏,DW是不允许直接在系统默认的快捷方式被修改的,需要点击下方那个按钮新建一份拷贝
然后找到下方的插入,找到注释,在下方的按键输入框里直接按你喜欢的按键,比如我的是crtl+Q就可以了