js和php里面都有一個函數(shù)eval();其作用是將參數(shù)里面的字符串當做代碼執(zhí)行,用這個函數(shù)可以創(chuàng)建自定義的回調(diào)函數(shù)
php回調(diào)函數(shù):
/**** @param* @return**/
function a($str){echo $str;}
/**** @param* @return**/
function s($callBack){eval($callBack);}
s("a('linshaoqiang');");
exit;
js回調(diào)函數(shù):
function a(str){
alert(str);
}
function s(callBack){ with ( window )eval(callBack);
}
s("a('linshaoqiang')");
用xheditor上傳文件時,出現(xiàn)一點上傳就卡死沒反應的問題,在后臺處理上傳的php文件里打印$_FILES時發(fā)現(xiàn)為空數(shù)組,出現(xiàn)這個問題的原因主要有兩個:表單原因或者php設置原因:
1,表單類型:
上傳文件的表單編碼類型必須設置成 enctype="multipart/form-data",因為要傳大數(shù)據(jù),一般提交方式用POST
2,php設置問題:
php默認的post_max_size 為2M.如果 POST 數(shù)據(jù)尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便會為空. 解決的方法是:
1. 一般的文件上傳,除非文件很小.就像一個5M的文件,很可能要超過一分鐘才能上傳完. 但在php中,默認的該頁最久執(zhí)行時間為 30 秒.就是說超過30秒,該腳本就停止執(zhí)行. 這就導致出現(xiàn) 無法打開網(wǎng)頁的情況.這時我們可以修改 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 數(shù)據(jù)所允許的最大大小。此設定也影響到文件上傳。 查找 post_max_size .改為 post_max_size = 150M(可修改范圍為PHP_INI_PHP_INI_PERDIR)
3. 很多人都會改了第二步.但上傳文件時最大仍然為 8M. 為什么呢.我們還要改一個參數(shù)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 |
配置選項可在各處設置 |
Jquery異步加載一個頁面是如此簡單:
$.ajax({ url: "/testl/index.html", cache: false, success: function(html){
$("#test").append(html);
}
});
或者更簡單的:$("#test").load("/test/index.html");
以 POST 形式發(fā)送附加參數(shù)并在成功時顯示信息。
jQuery 代碼:
$("#feeds").load("feeds.php", {limit: 25}, function(){ alert("The last 25 entries in the feed have been loaded"); });
載入并執(zhí)行一個 JavaScript 文件:加載并執(zhí)行 test.js ,成功后顯示信息。jQuery 代碼: $.getScript("test.js", function(){ alert("Script loaded and executed.");});
利用Mysql中的 的聚合函數(shù) count(*) 可以實現(xiàn)這個功能,例如需要查詢data表中name出現(xiàn)次數(shù)最多的記錄,可以先按照group by name分組,用count算出分組里的條數(shù),再按照count排序:
select name,count(*) from data group by name order by count(*) DESC limit 1
不加limit限制將返回按照name重復次數(shù)排列的數(shù)據(jù)
在使用聚合函數(shù)之前,我們可以通過where對查詢加限制條件,那么如果在group by之后我們要對分組里面的數(shù)據(jù)再加限制條件怎么辦呢?答案是having。
HAVING子句可以讓我們篩選成組后的各組數(shù)據(jù).
WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后對組記錄進行篩選。
having子句出現(xiàn)的數(shù)據(jù)必須在group by 之后,order by 之后
例如在上一篇中對name按照出現(xiàn)次數(shù)排序之后,我們還想只查出名字里面含有l(wèi)in的數(shù)據(jù),可以這樣寫:
select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC
用class關鍵字創(chuàng)建兩個類,Son類繼承Parents類:
class Parents{
}
class Son extends Parents {
}
如果子類沒定義構造函數(shù),初始化子類時會自動調(diào)用父類的構造函數(shù),并且函數(shù)里面可以調(diào)用子類的公共屬性,但是如果調(diào)用子類的private私有屬性則不可以,另外由 protected 所定義的類成員則可以被其所在類的子類和父類訪問
class Parents{
function __construct(){echo $this->name;}
}
class Son extends Parents {
var name = 'lin';
}
$Son = new Son();
如果子類定義了構造函數(shù)或者其他與父類同名的函數(shù),會把父類函數(shù)覆蓋,想調(diào)用父類該函數(shù)可以用parent:::func()來調(diào)用。如果父類函數(shù)用了final關鍵字,子類重定義該函數(shù)時就會報錯。
有時候input框的內(nèi)容我們只是希望顯示出來,不希望用戶修改,那么可以在ipnut里面加上屬性:readonly = "readonly",這樣內(nèi)容就被固定住了
有時我們不希望用戶快速使用之前提交過的數(shù)據(jù)來完成重復提交,即禁用表單的自動完成功能,可以在表單<form>里面加入autocomplete="off"關閉。
使用模版分離技術制造網(wǎng)站時,在制作模版頁面時總要用到一些自定義的標簽,有{# #} [# #]等等,但是我覺得用html的注釋標簽<!-- -->是比較好的,因為這樣標簽的內(nèi)容在可視化頁面不可見,不會破壞頁面的布局和美感,而真正需要用到html的注釋的時候就只能用<!--// -->這樣的形式了。
而重復打<!-- -->這個標簽還是挺煩人的,可以使用DW的自定義快捷鍵來完成,在編輯->快捷鍵里,為了保護原有的快捷鍵不被破壞,DW是不允許直接在系統(tǒng)默認的快捷方式被修改的,需要點擊下方那個按鈕新建一份拷貝
然后找到下方的插入,找到注釋,在下方的按鍵輸入框里直接按你喜歡的按鍵,比如我的是crtl+Q就可以了