標籤:blank init nbsp 伺服器 成功 數值 ber api head
上次提到一個投票系統,做了一個重新導向解決了,一個授權複用的問題,昨天投票系統正式投入使用;測試的時候沒有問題,上線後出現了一點小問題,
一:php頁面參數接受和php中 switch 那個先執行?
答案: 是switch先執行
例:在index.php頁面
header("location:/api/wx.php?action=putprofile&accessToken=".$accessToken."&openId=".$openId."&headImgUrl=".$headImgUrl."&nickName=".$nickName);
實現跳轉到wx.php頁面裡面帶著幾個參數 accessToken openId headImgUrl nickName (php中字元連結符 是 " . " );
下面我在wx.php頁面進行接收
$accessToken= $_GET["accessToken"];
$openid= $_GET["openId"];
$headimgurl= $_GET["headImgUrl"];
$nickname = $_GET["nickName"];
//接收參數
switch($_GET[‘action‘]){
case "initprofile":
initprofile();
break;
case "getprofile";
getprofile();
break;
case "putprofile";
putprofile();
break;
}
function putprofile($openid, $nickname, $headimgurl){
//echo "<script>alert(‘$openid‘);</script>";
//echo "<script>alert(‘$headimgurl‘);</script>";
//echo "<script>alert(‘$nickname‘);</script>";
//die("INSERT INTO v2016_member (mem_nickname, mem_photo, mem_openid, mem_regdate) VALUES({$nickname}, {$headimgurl}, {$$openid}, {$time}");
//$user = db_exec_query("SELECT mem_id FROM v2016_member WHERE mem_openid = ‘{$openid}‘ LIMIT 1");
$sql = "SELECT mem_id FROM v2016_member WHERE mem_openid = ‘{$openid}‘ LIMIT 1";
$result = mysql_query($sql);
if(!$row = mysql_fetch_assoc($result)){
//echo "<script>alert(‘gengxin‘);</script>";
$time = time();
$ins_id = db_exec_update("INSERT INTO v2016_member (mem_nickname, mem_photo, mem_openid, mem_regdate) VALUES(‘{$nickname}‘, ‘{$headimgurl}‘, ‘{$openid}‘, ‘{$time}‘); ");
}
$user = db_exec_query("SELECT * FROM v2016_member WHERE mem_openid = ‘{$openid}‘ LIMIT 1");
$info = array(
‘mem_id‘ => $user[0][‘mem_id‘],
‘mem_nickname‘ => json_decode($user[0][‘mem_nickname‘]),
‘mem_photo‘ => $user[0][‘mem_photo‘],
‘mem_openid‘ => $user[0][‘mem_openid‘],
);
//修改php中session的預設時間
//$lifeTime = 46 * 3600;
//session_set_cookie_params($lifeTime);
session_start();
$_SESSION[‘user‘] = $info;
header("location:/band.php");
}
如上述代碼所示,開始我以為在執行 putprofile()這個函數的時候 上面那四個參數已經拿到了呢,當時就是往資料庫裡插不進去,我在putprofile()alert 了一下那四個參數才知道原來在函數執行的時候還沒執行
$accessToken= $_GET["accessToken"];
$openid= $_GET["openId"];
$headimgurl= $_GET["headImgUrl"];
$nickname = $_GET["nickName"];
這些代碼可把我坑壞了,沒辦法後台把這些擷取參數的代碼放到了putprofile()裡面才成功的把欄位插入到了資料庫裡面,
原因是:switch的比$_GET先執行
二:SESSION的預設儲存時間
php中SESSION的預設儲存時間是 1440秒 意思就是時間一過這個緩衝就會被清掉
可以手動去修改兩種方法:
1:去伺服器配置php環境的一個ini的檔案裡找到 session.gc_maxlifetime 改成你想要的數值就可以了,建議不要改的太長,以免造成伺服器記憶體飽滿,響應過慢或者直接癱瘓
2:代碼實現:
// $lifeTime = 46 * 3600;
//session_set_cookie_params($lifeTime);
三:伺服器壓力問題:
這個問題很廣很多情況下都會造成伺服器壓力過大,造成響應過慢,對於寫代碼的程式猿來說要做的就是把代碼最佳化,至於怎麼最佳化減輕伺服器壓力,太複雜就不多說了,可以自行百度;
接下來說說我遇到的問題:
1:我的資料庫是操作是php MYSQL代碼實現的;
2: 多餘的代碼很多
3:裡面有比較多的 SELECT , update等一些操作,沒有做到函數複用;
4:伺服器運行記憶體也比較小;
在上述幾個情況下,一開始代碼沒什麼問題,後來隨著使用者越來越多,越來越多,我突然發現開啟這個投票系統的回應時間變長了,我ping了一下看了一個速度
發現這個IP的回應時間 最短 7ms 最長 13ms 平均8ms 這也太慢了,對於使用者來說,體驗太不好了,一直反映開啟太慢
後來我就檢查My Code
發現裡面有很多的SELECT , update等一些操作,並且多餘的代碼比較多,要知道本身MYSQL本身會佔用較大虛擬記憶體,再加上資料庫操作很耗記憶體,就造成了伺服器壓力比較大,回應時間變長的後果;
所以在php頁面中藥盡量減少資料庫的操作,同事對代碼做良好的最佳化,不然就會造成伺服器壓力大,響應慢的結果。
就這些吧,今天早上我7點跑到公司來維護代碼,也是不容易啊!!
快五一了,預祝快樂!!!!
php後台操作以及一些減緩伺服器壓力的問題