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')");
用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 |
配置選項可在各處設置 |
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.");});
利用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重復次數排列的數據
在使用聚合函數之前,我們可以通過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
用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關鍵字,子類重定義該函數時就會報錯。
定義抽象類使用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";
}
}
接口和抽象類的區別:
接口可以同時引用多個,而抽象類只能繼承一個
接口里面的方法全部為抽象方法,且不能有實現代碼,而抽象類的方法可以有實現代碼
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變量的定義規則,即不能以數字或特殊符合開頭。
有時候input框的內容我們只是希望顯示出來,不希望用戶修改,那么可以在ipnut里面加上屬性:readonly = "readonly",這樣內容就被固定住了
有時我們不希望用戶快速使用之前提交過的數據來完成重復提交,即禁用表單的自動完成功能,可以在表單<form>里面加入autocomplete="off"關閉。
使用模版分離技術制造網站時,在制作模版頁面時總要用到一些自定義的標簽,有{# #} [# #]等等,但是我覺得用html的注釋標簽<!-- -->是比較好的,因為這樣標簽的內容在可視化頁面不可見,不會破壞頁面的布局和美感,而真正需要用到html的注釋的時候就只能用<!--// -->這樣的形式了。
而重復打<!-- -->這個標簽還是挺煩人的,可以使用DW的自定義快捷鍵來完成,在編輯->快捷鍵里,為了保護原有的快捷鍵不被破壞,DW是不允許直接在系統默認的快捷方式被修改的,需要點擊下方那個按鈕新建一份拷貝
然后找到下方的插入,找到注釋,在下方的按鍵輸入框里直接按你喜歡的按鍵,比如我的是crtl+Q就可以了