中山php|最优网络中山做网站 中山php建站

最优良人

2011/08/14 at 02:46

使用eval在js或者php中创建回调函数

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')");

标签:,
comments Comments (48)    -
2011/08/14 at 02:38

上传文件时$_FILES为空的解决方法

用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, .htaccesshttpd.conf 中设置
PHP_INI_SYSTEM 4 配置选项可在 php.ini or httpd.conf 中设置
PHP_INI_ALL 7 配置选项可在各处设置
标签:
comments Comments (403)    -
2011/08/14 at 02:34

Jquery常用的ajax操作

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.");});

标签:, ,
comments Comments (417)    -
2011/08/14 at 02:29

Mysql查询数据表中某字段重复出现的次数,并按照次数排序

in: 数据库

利用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重复次数排列的数据

标签:,
comments Comments (419)    -
2011/08/14 at 02:27

Mysql Having的用法:对group by之后的分组加限制条件

in: 数据库

在使用聚合函数之前,我们可以通过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

标签:, ,
comments Comments (683)    -
2011/08/14 at 02:26

PHP面向对象之继承

用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关键字,子类重定义该函数时就会报错。

标签:,
comments Comments (262)    -
2011/08/14 at 02:25

PHP面向对象之抽象类与接口

定义抽象类使用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";
}

}

接口和抽象类的区别:

接口可以同时引用多个,而抽象类只能继承一个

接口里面的方法全部为抽象方法,且不能有实现代码,而抽象类的方法可以有实现代码

标签:, ,
comments Comments (262)    -
2011/08/14 at 01:36

php关于session使用中需要注意的地方

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变量的定义规则,即不能以数字或特殊符合开头。

标签:,
comments Comments (216)    -
2011/08/14 at 01:27

控制input框只能看不能输入,表单禁用自动完成

有时候input框的内容我们只是希望显示出来,不希望用户修改,那么可以在ipnut里面加上属性:readonly = "readonly",这样内容就被固定住了
有时我们不希望用户快速使用之前提交过的数据来完成重复提交,即禁用表单的自动完成功能,可以在表单<form>里面加入autocomplete="off"关闭。
标签:
comments Comments (16)    -
2011/08/14 at 01:24

自定义DW快捷键

使用模版分离技术制造网站时,在制作模版页面时总要用到一些自定义的标签,有{# #} [# #]等等,但是我觉得用html的注释标签<!-- -->是比较好的,因为这样标签的内容在可视化页面不可见,不会破坏页面的布局和美感,而真正需要用到html的注释的时候就只能用<!--// -->这样的形式了。

而重复打<!-- -->这个标签还是挺烦人的,可以使用DW的自定义快捷键来完成,在编辑->快捷键里,为了保护原有的快捷键不被破坏,DW是不允许直接在系统默认的快捷方式被修改的,需要点击下方那个按钮新建一份拷贝

然后找到下方的插入,找到注释,在下方的按键输入框里直接按你喜欢的按键,比如我的是crtl+Q就可以了

comments Comments (20)    -