PHP基礎筆記

[PHP經常使用的代碼]html

date_default_timezone_set(PRC); //時區設置
header("Content-type: text/html; charset=utf-8");
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
ini_set ('memory_limit', '1280M');
 
[HTML經常使用代碼]
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="UTF-8">
<meta http-equiv ="refresh" content ="60"> #定時刷新頁面
body{-webkit-user-select:none;} #CSS控制頁面文字不能複製
 
PHP的垃圾回收機制(GC機制):PHP能夠自動進行內存管理,清除再也不須要的對象。PHP使用了引用計數這種單純的垃圾回收機制。每一個對象都內含一個引用計數器,每一個reference連接到對象,計數器加1,當reference離開生存空間或者被設爲null,計數器減1,當某個引用計數器的對象爲0時,PHP知道你將再也不須要使用這個對象,釋放其所佔有的內存空間。
 
1.PHP 語法錯誤 和 語義錯誤 的區別:
語法錯誤 經過IDE均可以提示看到:如缺乏分號,未聲明的變量,不匹配的括號或大括號,和未終止字符串;
語義錯誤 通常是邏輯上的錯誤,例如:除以0。
2.函數名不區分大小寫,變量區分大小寫。
3.檢測變量類型: is_bool(),is_string(),is_float(),is_array(),is_object()。
4.檢測是否存在: file_exists(),class_exists(),property_exists()
5.將stdclass object轉換爲數組: get_object_vars($test);
7.require/include遇到即包含文件,require_once/include_once只包含一次。
require/require_once遇到錯誤會終止,通常放在程序的最前面;
include/include_once遇到錯誤會繼續執行,通常放在流程控制語句中。
8.session_start()函數前面若是須要有輸出: ob_start();session_start();$_SESSION[user]=1;ob_end_flush();
9.使用empty(),對於""、0、"0"、NULL、FALSE、array() 都認爲是空的。
10.parse_url : 解析URL,返回其組成部分
11.http_build_query() : 生成 url_encode 以後的請求字符串
12.usleep 微秒,sleep 秒:sleep(2) = 2秒。
13.獲取圖片尺寸:getimagesize("1.jpg");
14.頁面js調試: console.info(「輸出info」); console.warn(「輸出警告」); console.error(「輸出錯誤」);
15.PHP中的錯誤級別: Deprecated/Notice/Warning/Fatal error/Parse error(最高級別的錯誤,語法解析錯誤);
16.屏蔽錯誤輸出: error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
17.代碼調試: debug_backtrace(); 實參個數: func_num_args(); 返回某一個實參: func_get_args();
18.將數組結果以字符串的形式輸出(能夠直接將數組的結果以字符串的形式寫入日誌):
echo print_r($arr,1); 或者 echo var_export($arr,1);
 
1.七種布爾false:0,0.0,'','0',false,array(),NULL。注意,字符串的'false'的布爾值是 true
2.遍歷數組的三種方式和區別:
(1)for循環:只能遍歷數字索引。
(2)foreach循環:能夠遍歷數字索引和關聯索引,而且會對數組進行reset()操做
(3)while、list()、each()組合循環:能夠遍歷數字索引和關聯索引,可是不會對數組進行reset()操做
3.continue 2 表示跳出外面第2層循環,其餘數字同理。
4.全局變量:把外部的全局變量用於函數內部,在內部的變量使用global $a,或者$GLOBALS['a']
5.靜態變量:僅在局部函數域中存在,但當程序執行離開此做用域時,其值並不會消失(不會釋放內存),使用 static $a
說明:僅初始化一次;初始化時須要賦值;每次執行函數該值會保留; static修飾的變量是局部的,僅在函數內部有效;
能夠記錄函數的調用次數,從而能夠在某些條件下終止遞歸。
 
isset和empty
isset用來判斷變量是否存在;empty用來判斷變量是否有值。
$a不存在和$a = null 兩種狀況在isset看來爲true,其他爲false(包括$a = ‘’;)
$a = null, 0, false, ‘ ’, 或不存在時在empty看來爲true,其他爲false。
 
PHP操做MySQL:
mysqli_connect();
mysqli_query();
mysqli_close();
mysqli_fetch_array();
mysqli_fetch_assoc();
mysqli_fetch_object();
mysqli_num_rows()
 
[提升PHP性能的方法]
  • 把類定義成static
  • echo比print快
  • 使用函數代替正則
  • 不要濫用@操做符
  • 循環內部不要聲明變量
  • echo用逗號鏈接字符串效率高
  • 多維數組儘可能不要循環嵌套賦值
  • 用全等號代替雙等,減小類型轉換
  • 不須要的數組或數據及時unset掉
  • 儘可能少用全局變量和對象屬性($this->num++)
  • 使用ip2long()和long2ip()把IP地址轉成整型
  • require比require_once()快,而且儘可能不要使用相對路徑
  • 字符串用單引號而不是雙引號,由於雙引號裏面會判斷是否有變量
  • 打開apache的mod_deflate模塊能夠提升網頁瀏覽速度
 
[優化網站響應時間]
  • 減小HTTP請求。例如:合併JS和CSS文件,利用瀏覽器的Cache功能避免下載相同的文件
  • 不長修改的動態內容靜態化
  • 優化數據庫
  • 使用負載均衡,例如HTTP重定向、反向代理服務器
  • 使用緩存,例如memcached和redis
 
[經常使用的字符串函數]
* 轉換字母大小寫:strtolower()所有小寫、strtoupper()所有大寫、ucwords()首字符轉換爲大寫
* 計算長度:strlen($str); substr_count($str,子字符串);str_word_count($str);//共有多少個單詞
* 查找子字符串第一次出現後的全部內容:strstr($str,子字符串); 忽略大小寫用stristr();
* 查找子字符串第一次出現的位置數值:strpos($str,子字符串); 忽略大小寫用stripos();
* 複製字符串:str_repeat($str,複製多少次);
* 反轉字符串:strrev($str);
* 替換字符串:str_replace($old,$new,$str); substr_replace($str,替換的字串,開始替換的位置 [,替換多少個字符]);
* 分割英文字符串爲等長度元素的數組:str_split($str[,分割後的數組的每一個元素的長度 默認1]);
* 分割中文字符串爲等長度元素的數組:preg_split('/(?<!^)(?!$)/u', $str);
* 比較字符串大小:strcmp($str1,$str2); strncmp($str1,$str2,比較多少個字符);
 
[經常使用的數組函數]
數組排序
sort()低到高,rsort()高到低。
保持鍵值對應關係使用 asort()和arsort()。
對鍵排序ksort()和krsort()。隨機排序 shuffle()。
數組key相關
array_keys() 返回數組中全部的鍵名
array_values() 返回數組中全部的值,key從0開始。
array_key_exist() 判斷一個數組中是否包含指定的鍵名
數組value相關
array_push($arr,‘newValue’); 在數組結尾插入一個或多個元素
array_unshift() 在數組開頭插入一個或多個元素。
array_shift() 刪除數組中的第一個元素,並返回被刪除元素的值。
array_rand(array,number); 從數組中隨機選出一個或多個元素,並返回。
range(min,max [,step默認是1]); 快速建立具備連續數值的數組
array_pop():獲取數組中最後一個元素。
array_unique():刪除數組中的重複元素。
array_slice(array,offset,length) 在數組中根據條件取出一段值,並返回。
get_object_vars($obj); 將stdclass object對象轉換爲數組
合併和拆分
array_merge($arr1, $arr2,...) 和 array_combine(); 合併多個數組
array_chunk(數組,結果數組的元素個數 [,bool鍵名是否保持]); 將一個數組分割成多個數組
回調函數
array_filter() 用回調函數過濾數組中的單元
array_walk() 數組中的每一個成員應用用戶函數
array_map() 將回調函數做用到給定數組的單元上
計算和判斷
count() 函數,後面加上COUNT_RECURSIVE或者true,能夠統計多維數組的全部節點的個數。
in_array() 判斷某元素是否在數組中。
array_sum($arr); 計算數組元素的和
array_count_values() 統計數組中全部值出現的次數。
array_intersect(array1,array2,[array3...]); 計算數組的交集。
array_diff(); 計算數組的差集
array_reverse($arr); 翻轉數組
array_flip($arr); 對調數組的鍵和值
 
[PHP的運行原理]
CGI:PHP解析器與webserver的一個協議橋樑。
FastCGI:每次處理完請求後不會kill掉進程,會保留進程。屬於CGI的改良版本。
PHP-FPM:PHP FastCGI Process Manager,PHP FastCGI的進程管理器。
 
 
[PHP常見配置項]
register_globals:注入變量,打開後各類變量都會被注入,不安全,建議關閉。
allow_url_fopen:是否容許打開遠程文件
allow_url_include:是否容許遠程包含文件
date.timezone:設置時區
display_errors:是否顯示錯誤
error_reporting:錯誤級別設置
safe_mode:安全模式
upload_max_filesize:上傳最大文件的大小
max_file_uploads:上傳的最大文件數量
post_max_size:提交的POST數據的最大大小
 
Session 共享(單點登陸)
利用Redis實現簡單的Session共享:
用戶第一次進入商城首頁,給一個CSESSIONID,(不用JSESSIONID的緣由),用戶添加商品,各類須要記錄的操做,都與這個CSESSIONID關聯起來;
當使用登陸操做時候,將這個用戶的信息,如用戶名等存入到redis中,經過K_V,將CSESSIONID加一個標誌做爲key,將用戶信息做爲value;
當用戶點擊頁面被轉發到其餘服務器時候,在須要驗證是否同一個用戶時,就能夠從redis中取出value,進行驗證用戶信息,實現共享。
相關文章
相關標籤/搜索