php入門學習筆記

學習筆記[6.5-6.13]php

1.經常使用命令

打開數據庫格式: mysql -h主機地址 -u用戶名 -phtml

重啓nginxsudo /etc/init.d/nginx restart或者service nginx restart mysql

修改權限:chmod *** filenamenginx

2.mysql5.7修改配置文件

注意版本,好像從5.65.5就不同,配置文件更深了一層。git

1.vimnano編輯 /etc/MySQL/mysql.conf.d/mysqld.cnfredis

2.[mysqld]後面添加 character_set_server=utf8 保存退出sql

3.#service mysql restart數據庫

3.終端連接進入數據庫的一個錯誤

mysql> use dbname express

Reading table information for completion of table and column names 編程

You can turn off this feature to get a quicker startup with -A

而後就卡在這裏。

上面卡住的緣由::

是因爲數據庫太大,即數據庫中表很是多,因此若是預讀數據庫信息,將很是慢,因此就卡住了,若是數據庫中表很是少,將不會出現問題。

問題的緣由是:

咱們進入mysql 時,沒有使用-A參數;

即咱們使用

mysql -hhostname -uusername -ppassword -Pport 的方式進入數據,

而沒有使用

mysql -hhostname -uusername -ppassword -Pport -A的方式進入數據庫。

 

4.Phpstorm license server

選擇license server。而後複製http://idea.imsxm.com/



5.用終端apt-get安裝軟件:

1.加入源ppa例如:sudo add-apt-repository ppa:git-core/ppa

2.更新源sudo apt-get update

3.安裝sudo apt-get install git

4.檢驗:git --version

6.echo,print,print_r的區別:

echoPHP語句, printprint_r是函數,語句沒有返回值,函數能夠有返回值(即使沒有用)

print只能打印出簡單類型變量的值(int,string)

print_r能夠打印出複雜類型變量的值(如數組,對象)

echo -- 輸出一個或者多個字符串

Description

void echo ( string arg1 [, string ...] ) //返回值爲空

echo "你好"," 朋友";

print --輸出一個字符串

Description

int print ( string arg )//返回值爲整形

print "你好朋友";

能夠進行下面操做

$name=print "nihao \n";

$str = 'test print value is $name .';

eval("$print=\"$str\";");

echo $print;

print_r -- 打印關於變量的易於理解的信息。

bool print_r ( mixed expression [, bool return] ) //返回值是布爾型的,參數是mix類型的,能夠是字符串,整形,數組,對象類print_r() 顯示關於一個變量的易於理解的信息。若是給出的是 stringinteger float,將打印變量值自己。若是給出的是 array,將會按照必定格式顯示鍵和元素。object 與數組相似。

print_r() 將把數組的指針移到最後邊。

你能夠

print_r(str);

print_r(int);

print_r(array);

print_r(obj);

也能夠用var_dump var_export

7.php中單引號和雙引號的區別:

php裏的單引號把內容當成純文本,不會通過服務器翻譯。而雙引號則與此相反。裏面的內容會通過服務器處理(process). 舉個簡單的例子:

$foo="data";

echo '$foo'; //單引號輸出$foo

echo "$foo"; //雙引號輸出data

單引號不能處理變量和轉義字符(除了\\\'這兩個),要輸出下面的字符串。

一旦涉及到Mysql中的sql語句,就更得當心了。從簡單提及,sql語句,其中的條件是常量

SELECE * FROM email_table WHERE username="abc";

php中能夠寫成

$query="SELECE * FROM email_table WHERE username='abc'";//query語句必定要用雙引號括起來

查詢的條件是變量,$abc=$_POST['username'];

能夠寫成:$query="SELECT * FROM email_table WHERE username=' ".$abc." ' ";

能夠分紅幾步理解:

1."SELECT * FROM email_table WHERE username=' " 純字符串

2. .鏈接符,用來連接後面的字符

3.$abc 顯示變量的值

4." ' "連字符連接後面的單引號(爲了與條件中的第一個單引號配對)

其實沒必要這麼複雜,能夠這麼寫

$query="SELECT * FROM email_table WHERE username='$abc' ";

能夠這麼理解,雙引號內部的全都要被服務器解析,單引號只是當成普通字符而已.

 

8.PHP取路徑:

getcwd() :顯示是 在哪一個文件裏調用此文件 的目錄

__DIR__ :當前內容寫在哪一個文件就顯示這個文件目錄

__FILE__ : 當前內容寫在哪一個文件就顯示這個文件目錄+文件名

9.相對路徑和絕對路徑問題

1.首先要知道:

./ 表明當前目錄
../
表明父級目錄
/
表明根目錄.

/var/ww’爲絕對路徑

./var/www’爲想對路徑

a.app’就是未肯定路徑

2.路徑分三種:相對路徑,絕對路徑以及未肯定路徑

3要注意的時相對路徑須要一個參考目錄才能肯定文件的最終路徑,在包含嵌套多少層,這個參考目錄時程序執行入口文件所在目錄

10.php短標記的用法

爲了精簡視圖文件,在使用控制語句和echo語句時使用php的替代語法,

例如:

<?php echo $table;?>能夠精簡爲<?=$table?>

再例如控制語句中:

<ul><?php foreach($todo as $item):?>

<li><?=$item?></li>

<?php endforeach;?></ul>

這裏沒有任何括號.全部的結束括號被替換成了endforeach.上面說的那些控制語句結構一抖有這相似的結束標誌:endid,endfor,endforeachendwhile.要注意的一點時,每一個分支結構後面都要跟一個冒號,而不是分號(除了最後一個)



11.mysqli_real_escape_string($dbc,para)

該函數接收字符串做爲參數,用於檢驗用戶提交的並將組合到sql查詢語句的變量值,它將轉義那些有可能無心或帶惡意的字符。如單引號,在外國人的姓名有可能會包含該符號(如O'Toole),這時就須要用它。案例:

$name = $_POST['name'];

$name = mysqli_real_escape_string($dbc,$name);

$query = "Select ... From tb where name='$name'";

這樣能夠確保帶入sql 時參數的安全。注意:若是在使用php6以前的版本,若啓用MAGIC QUOTES魔法引用時,那麼在使用mysqli_real_escape_string前,須要用stripslashes(para)刪除魔法引用添加的任何斜槓,以下:$fn = mysqli_real_escape_string($dbc,trim(stripslashes($_POST['firstName']))); 備註:在PHP5.3版本以前, mysqli_real_escape_string()函數存在路徑泄漏問題,遠程攻擊者能夠利用漏洞得到服務器端腳本的實際路徑。即若是傳遞的參數值爲數組而不是字符串的狀況下會發出警告,警告消息中會包含有當前服務端運行腳本的完整路徑信息。

12.redis緩存機制

  1. 緩存機制:html頁面讀取數據時先肯定redis中是否存有數據,若是有就直接調取,若是沒有則先從MySQL中調取數據存入緩存,再從緩存中提取顯示.

  2. MySQL同步增刪改的方法:MySQL數據庫有修改時直接刷新redistribute緩存便可;

13.PHP八個魔術常量

  1. __LINE__:顯示文件中的當前行號.

  2. __FILE__:文件的完整路徑和文件名,若是用在被包含的文件中,則返回被包含的文件經,PHP4.0.2,__FILE__老是包含一個絕對路徑,若是時符號連接,只是解析後的絕對路徑,而在此以前的版本有時會包含一個相對路徑.

  3. __DIR__:文件所在的目錄,若是用在被包括的文件中,則返回白包含的文件所在的目錄,它等價於dirname(__FILE__),除非是根目錄,不然目錄名中不包括末尾的斜槓.

  4. __FUNCTION__:函數名稱,php5開始起本常量返回該函數被定義時的名字,區分大小寫在php4中該值總時小寫字母的.

  5. __CLASS__:類的名稱.php5本常量返回該函數被定義時的名字,區分大小寫,php4中該值老是小寫字母,類名包括被定義聲明的做用域,注意自5.4起對trait也起做用,當用在trait方法中時,時調用trait方法的類的名字.

  6. __TRAIT__;類的方法名,返回該方法被定義時的名字,區分大小寫.

  7. __NAMESPACE__:當前命名空間的名稱,區分大小寫,此常量實在編譯時定義的.

14.classself,this,parent的區別

  1. this就是指向當前對象實例的指針,不指向任何其餘對象或類。要用this,你必有是一個對像的形勢,否則它會報錯的,Fatal error: Using $this when not in object contextthis能夠調用本類中的方法和屬性,也能夠調用父類中的能夠調的方法和屬性

  2. self是指向類自己,也就是self是不指向任何已經實例化的對象,通常self使用來指向類中的靜態變量,self能夠訪問本類中的靜態屬性和靜態方法,能夠訪問父類中的靜態屬性和靜態方法。用self時,能夠不用實例化的.

  3. parent能夠訪問父類中的靜態屬性和靜態方法。用parent時,能夠不用實例化的,咱們知道parent是指向父類的指針,通常咱們使用parent來調用父類的構造函數

15.for循環和while循環

一般不知道須要重複的次數時用while循環,若是要求一個固定次數的重複用for循環.

 

 

 

16.常見編程技術英文縮寫

 

  1. HTTP:超文本傳輸協議的縮寫,是用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議.

  2. HTML:HTML 指的是超文本標記語言 (Hyper Text Markup Language)

    1. HTML 不是一種編程語言,而是一種標記語言(markup language)

    2. 標記語言是一套標記標籤(markup tag)

    3. HTML 使用標記標籤來描述網頁

  3. JavaScript:客戶端腳本編程語言,也就是Ajax中的"J"

  4. XHTML:可擴展的超文本標記語言,是基於可可擴展標記語言的標記語言(XML);

  5. XML:可擴展標記語言,被設計用來傳輸和存儲數據.

  6. DHTML:動態HTML,是一個描述將靜態HTML,級聯樣式單(CSS)以及javas結合,而且在載入一個靜態web頁面全部元素後,經過文檔對象模型修改頁面外觀的術語.

  7. 服務器端編程語言:php,jsp,asp,peri等等.

  8. Ajax:異步JavaScript和XML,AJAX 是一種用於建立快速動態網頁的技術。

 

經過在後臺與服務器進行少許數據交換,AJAX 可使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。傳統的網頁(不使用 AJAX)若是須要更新內容,必需重載整個網頁面。有不少使用 AJAX 的應用程序案例:新浪微博、Google 地圖、開心網等等

 

17.session和cookie

 

cookie的內容主要包括:名字,值,過時時間,路徑和域。路徑與域一塊兒構成cookie的做用範圍。若不設置過時時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。會話cookie通常不存儲在硬盤上而是保存在內存裏,固然這種行爲並非規範規定的。若設置了過時時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過時時間。存儲在硬盤上的cookie能夠在不一樣的瀏覽器進程間共享,好比兩個IE窗口。而對於保存在內存裏的cookie,不一樣的瀏覽器有不一樣的處理方session機制。session機制是一種服務器端的機制,服務器使用一種相似於散列表的結構(也可能就是使用散列表)來保存信息。當程序須要爲某個客戶端的請求建立一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),若是已包含則說明之前已經爲此客戶端建立過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),若是客戶端請求不包含session id,則爲此客戶端建立一個session而且生成一個與此session相關聯的session idsession id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式能夠採用cookie,這樣在交互過程當中瀏覽器能夠自動的按照規則把這個標識發送給服務器。通常這個cookie的名字都是相似於SEEESIONID。但cookie能夠被人爲的禁止,則必須有其餘機制以便在cookie被禁止時仍然可以把session id傳遞迴服務器。

 

cookie session 的區別:

 

1cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

 

2cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙考慮到安全應當使用session

 

3session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE

 

4、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20cookie

 

18.輸出數組中時間的格式:

 

<?php

 

$d=mktime(9, 12, 31, 6, 10, 2015);

 

 echo "建立日期是 ". date("Y-m-d h:i:sa", $d);

 

輸出:建立日期是 2015-06-10 09:12:31am

 

(時,分,秒,月,日,年)

 

19.異常處理

 

  1. 若是返回值是數值,通常返回-1或者null來表示異常並打印日誌,若是返回是數組,通常出現異常就返回空數組,若是返回隻字符串,出現異常就返回null,有必要就記錄日誌.上層調用的時候要對這些異常進行判斷,

  2. 對於用戶輸入的內容,要作嚴格的檢查,包括從url中獲得的

若是時代碼中敲入的能夠直接這樣:

 

 

13.zrankzrange

 

Zrank :

 

返回有序集key中成員member的排名。其中有序集成員按score值遞增(從小到大)順序排列。

 

排名以0爲底,也就是說,score值最小的成員排名爲0若是member是有序集key的成員,返回member的排名。若是member不是有序集key的成員,返回nil

 

redis> ZRANGE salary 0 -1 WITHSCORES # 顯示全部成員及其 score 
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis> ZRANK salary tom # 顯示 tom 的薪水排名,第二
(integer) 1

 

Zrange:

 

返回有序集key中,指定區間內的成員。其中成員的位置按score值遞增(從小到大)來排序。

 

返回值:

 

指定區間內,帶有score(可選)的有序集成員的列表。

 

redis > ZRANGE salary 0 -1 WITHSCORES # 顯示整個有序集成員

 

1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis > ZRANGE salary 1 2 WITHSCORES # 顯示有序集下標區間 1 2 的成員
1) "tom"
2) "5000"
3) "boss"
4) "10086"

redis > ZRANGE salary 0 200000 WITHSCORES # 測試 end 下標超出最大下標時的狀況
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis > ZRANGE salary 200000 3000000 WITHSCORES # 測試當給定區間不存在於有序集時的狀況
(empty list or set)
相關文章
相關標籤/搜索