PHP 學習筆記[2] —— 自學PHP 筆記整理
背景:自學PHP遇到的一些小問題總是很是困擾,不同時間段做一下筆記,方便以後的參考及能力的視覺化...
1.對於資料庫操作的程式碼,可以提取出一個簡單的php檔案
//設定連線 oracle 資料庫的引數
$host = "192.168.11.101";
$port = "1521";
$sid = "orcl";
$sname = "orcl";
$server_name = "orcl";
$db_username = "system";
$db_password = "orcl";
$dbstr =
"(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =$host)(PORT = $port))
(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = $server_name)(INSTANCE_NAME = $server_name)))";
$dbconn=oci_connect($db_username,$db_password,$dbstr);//如果去掉最後一個引數或者為“ ”,預設連線本機
2.注意編碼問題
有時php包含php檔案時,發現可能會有編碼的問題
3.json編碼,發現對中文的操作不予執行,找到一個解決方法:
4.使用QQ互聯進行測試時發現出現的提示資訊:
----------------2016/2/29 (記錄)
The state does not match. You may be a victim of CSRF.
分析得出,個人在QQ互聯中的網站地址寫的與預設連線不一致,保證了回撥地址的正確以後,進行測試發現正常。
5.php的json_encode不相容JSON_UNESCAPED_UNICODE的解決方案
PHP5.4才支援JSON_UNESCAPED_UNICODE這個引數,此引數是讓中文字元在json_encode的時候不用轉義,減少資料傳輸量。但在PHP5.3中,就得自己寫個函式來實現,以下就是解決方法:
/**
* 對變數進行 JSON 編碼
* @param mixed value 待編碼的 value ,除了resource 型別之外,可以為任何資料型別,該函式只能接受 UTF-8 編碼的資料
* @return string 返回 value 值的 JSON 形式
*/
function json_encode_ex($value)
{
if (version_compare(PHP_VERSION,'5.4.0','<'))
{
$str = json_encode($value);
$str = preg_replace_callback(
"#\\\u([0-9a-f]{4})#i",
function($matchs)
{
return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
},
$str
);
return $str;
}
else
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
}
6.虛擬機器vmware 中不能上網的一種情況
這兩天,在學些LAMP的一點知識,主要記錄一些問題在此,希望給遇到相同困擾的人一點參考。---2016.5.25
windows環境下的PHP學習,算是有一點基礎了,但畢竟是自學,所以自己的學些規劃不夠清晰,意識到必須學習Linux系統下的相關知識才行。前幾天安裝了VMware,並且安裝了Ubuntu,CentOS6.5,Deepin三種系統,具體的安裝也是參考網路上的圖解,其中值得注意的幾點是:
·win10環境下的VMware安轉和執行時,儘量選擇 管理員許可權
·Linux系統的選擇,各有各的優點吧,個人覺得Deepin是介面最好看的,記得設定使用者名稱和密碼
·發現升級為win10系統後,自己所裝的虛擬機器都不能上網了,後來在VMware->編輯->虛擬網路編輯器 中點選了左下角的“恢復預設設定”,測試發現問題解決
·多數問題,可以百度來的就自己解決,畢竟自己找錯誤的就是很好的學習。
7.linux命令新發現
今天在使用xshell軟體連線Linux系統時發現,只有CentOS可以連線,同時使用putty來測試,證實其他的虛擬機器無法連線,根據網上的一個提示 重啟ssh服務,當然網上提示的是 "sudo service sshd start",測試發現應該是沒有安裝的原因,但是使用“sudo apt-get install sshd”是不成功的,可能提示錯誤或者系統不同的原因吧,然後發現使用 語句“sudo apt-get install ssh”進行順利安裝,同時需要更改目錄/etc/ssh/sshd_config中的資訊,將PermitRootLogin 改為 true ,最後進行啟動服務的命令“sudo service ssh start”,最後測試發現xshell和Putty都可以順利連線,當然FileZilla也是沒問題的。
順帶一提,為了保證在使用FileZilla時滿足檔案上傳下載,需要以管理員root身份登入,如果沒有設定root密碼,需使用命令$ sudo su 或者$ sudo passwd root 建立密碼,如果要轉化管理員,使用命令 su user 即可。
8.附帶一段進行隨機數獲取的程式碼,便於以後參考。
<?php
/**
* 此指令碼的設計用於測試資料
* 獲取十八組 八個位元組的隨機資料 並進行計算整理
* 最後以字串拼接的形式輸出 注意其中的十六進位制轉化
*/
$hexadecimal = '7FFFFF';
$maxNum = base_convert($hexadecimal, 16, 10);
echo GetRandStr(18,$maxNum);
/**
* @param $len 獲取數字的次數
* @param $tag 數字的最大範圍
* @return string 獲取隨機數的字串
*
*/
function GetRandStr($len,$tag)
{
$output='';
$output2='';
for ($i=0; $i<$len; $i++)
{
$tagNum = mt_rand(0, $tag);
$Num1 = sprintf("%06X",$tagNum);//進行位數的補全設定
$Num2 = GetNum2($Num1,$i);
$output .= '00'.$Num1;
$output2.=$Num2;
}
return $output.$output2;
}
/**
* @param $num1 傳入的第一組資料值
* @param $tag1 參考標記
* @return string 返回計算後的字串
*/
function GetNum2($num1,$tag1){
$output2='';
$tagNum = base_convert($num1, 16, 10);
if($tag1<8){
//使用pow()內建函式進行整數的求冪運算
$m1 = (5*$tagNum)/(pow(2,23)-1)*10000;
}else{
$m1 = (20*$tagNum)/(pow(2,23)-1)*1000;
}
//使用內建函式floor()取整運算
$m2 = sprintf("%04X",floor($m1));
$output2.=$m2;
return $output2;
}
9.ThinkPHP去掉URL中的index.php 方法
部分解決本地無法載入的連結,和虛擬域名的實現 >>參考網址
10. 127.0.0.1和本機ip地址都無法訪問
(2017-01-19 更新)
apache配置虛擬主機後,127.0.0.1和本機ip地址都無法訪問,個人認為兩種使用模式(ip訪問和虛擬主機)不會相容
解決方法:給 Include conf/extra/httpd-vhosts.conf 前面加個# 註釋配置
不過最好配置虛擬主機。
11.防止ajax重複提交
(2017-01-21 更新)
(2).舉個栗子.
//禁用或啟用 function disableDelAdd(order_sn,tag) { $("#addNum-"+order_sn).attr('disabled',tag); $("#delNum-"+order_sn).attr('disabled',tag); } //檢查商品庫存 是否允許商品數目的增減 function checkGoodsNum(order_sn,tag,viewNum,buy_num,toUrl,checkUrl,goods_id) { var postData = {}; postData['buy_num'] = buy_num; postData['goods_id'] = goods_id; disableDelAdd(order_sn,true); $.ajax({ type:"POST", url: checkUrl, data :postData, dataType : "json", success : function(result){ if(result.status == 1){ //成功 viewNum.val(parseInt(buy_num)); updateOrderNum(order_sn,tag,toUrl); }else{ //失敗 return layer.msg(result.message); } disableDelAdd(order_sn,false); }, error: function(){ disableDelAdd(order_sn,false); } }); }
12.參考ajax詳細寫法 (ajax在微信報錯)
/**
* Created by 百鬼夜行 on 2017/1/21.
*/
$(function () {
$('.test_submitorder').click(function () {
var pid = $("#goods_id").val();
var spec_str = $("#carPrefixBTN").text();
var spec_id = $("#carPrefixBTN").attr("spec_id");
var mobile = $("#userTel").val();
var type = $("#type").val();
var carnumber = $("#carNUM").val();
$.ajax({
url: '__APP__?m=Shopping&a=ajaxSubmitorder',
cache: false,
async: false,
type: 'POST',
data: {
'mobile': mobile,
'carnumber': carnumber,
'pid': pid,
'spec_id': spec_id,
'spec_str': spec_str,
'type': type
},
beforeSend: function () {
//觸發ajax請求開始時執行
$('#btnRecharge').text('提交訂單中...');
$('#btnRecharge').removeClass('test_submitorder');
},
success: function (msg) {
if (msg.status == 1) {
window.location.href = ' __APP__?m=Pay&a=index' + '&oid=' + msg.data;
}
else {
alert(msg.status);
alert('網路繁忙,請稍後再試...');
$('#btnRecharge').text('立刻辦理.');
$('#btnRecharge').addClass('test_submitorder');
}
}
,
error: function (msg) {
console.log(msg);
alert('網路繁忙...');
$('#btnRecharge').text('立刻辦理.');
$('#btnRecharge').addClass('test_submitorder');
},
complete: function (msg) {
//ajax請求完成時執行
if (msg.status == 1) {
$('#btnRecharge').text('立刻辦理.');
$('#btnRecharge').addClass('test_submitorder');
}
}
});
});
});
Ajax另一種寫法
//檢查當前使用者是否有設定預設收貨地址
function toDealWithBuyerMsg(order_sn,dealWithUrl) {
var postData = {};
postData['order_sn'] = order_sn;
$.post(
dealWithUrl,
postData,
function (result) {
if(result.status == 1){
//成功
toPayOrder(order_sn);
}else{
//失敗
layer.msg('Sorry,預設地址未設定或不完整~');
//toAddBuyerMsg(order_sn);
}
},"JSON");
}