文件包含:經過一些文件包含的函數將本地揮着遠程服務器中文件包含解析到當前中,達到文件讀取、代碼利用、函數調用等目的php
include 「文件名」 ==include(「文件名」)java
include_oncemysql
去包含文件時,後者只須要包含一次便可,當找不到要包含的文件,會警告,但後續代碼繼續執行linux
requireweb
require_onceredis
包含文件時,後者只須要包含一次便可,當找不到包含的文件時,會直接報錯,後續代碼不執行sql
包含過來的文件中,只要文件中代碼是標準格式PHP代碼就會被解析,若是裏面的內容不是PHP代碼,就會吧內容顯示出來。包含的文件路徑寫法:能夠是相對路徑也但是絕對路徑mongodb
注意:讀文件時須要注意當前web服務對應的權限shell
Copy good.png/b+shell.php/a bad.png(windows本地生成圖片木馬)數據庫
good.png 是一個正常圖片 /b表示比特流文件
shell.php這是木馬文件或者含有php代碼的文件,後綴名不作要求,主要是ascii文件便可, /a表示ASCII文件
bad.png是生成的圖片馬
會話管理
會話:服務器和用戶之間傳輸數據的方式或者途徑,在通道傳輸數據以前須要創建通道,這個通道能夠理解爲會話,在客戶端通富哦cookie來管理會話,在服務器經過session來管理會話。
Cookie與session區別以前筆記有記錄
Cookie的管理
首先須要服務器給用戶分發cookie數據,setcookie(name,value,表示式,路徑,域範圍),後三者能夠不寫,其中表達式主要是用來設置cookie時效性。注意:setcookie須要寫在HTML代碼前
服務器獲取cookie:$_COOKIE[「cookie的名字」] 注意:須要使用當前打開的瀏覽器去訪問,不能換用其餘瀏覽器
刪除cookie:setcookie(「loginInfo」,」」,time()-3600),經過服務器去刪除
Session的管理:
工做機制:爲用戶建立惟一的uid,在該uid的基礎上存儲變量,uid放在cookie或者經過URL去傳輸(相比較而言後者不安全)
在HTML代碼以前經過session_start()開啓,開啓以後能夠經過session[]數組(一個超級全局變量)存儲某些變量。
銷燬session的方式(和session_start()一塊兒使用):unset() session_destory()後者慎用,會清除全部session數據。
文件上傳:
經過代碼實現上傳文件的功能,
explode(標識,字符串) 按標識將字符串分割成數組
explode(「.」,」test.te.png」) ==arrat(「test」,」te」,」png」)
end(數組) 取出數組中最後一個值
in_array($fileendname, $array) 在數組當中匹配要找的內容,若是有則返回true
echo $_FILES["file"]["tmp_name"] 顯示臨時文件位置
move_uploaded_file(臨時文件位置,目標位置) 將文件從臨時文件位置移動到目標位置
file_exists()檢測文件或者目錄是否存在,若是存在則返回true
文件管理:
文件的打開、關閉、讀取、寫入
fopen(文件位置~文件路徑和文件名~:絕對和相對路徑,打開文件的方式)
r 只讀的方式打開
r+ 讀寫
w只寫,若是不存在文件 則建立
w+ 讀寫,不存在則建立
a 文件末尾追加,若是不存在,則建立
a+ 讀和追加,若是不存在,則建立
fclose(句柄~打開文件對應的句柄~)關閉
feof() 檢測是否到達文件的末尾,若是沒有到達文件末尾,則返回值爲false
fread(打開的文件句柄,讀取大小)讀取指定大小的文件內容
fgets() 讀取單行數據內容,只有一個參數,若是想讀取整個文檔內容,則須要使用feof+fgets循環讀取
好比while (!feof($file)){
echo fgets($file);
}
fgetc() 讀取單個字符,若是想讀取所有,同上用while循環
file() 將整個文檔中數據讀取到數組中,一行對應一個單元
file_get_contents() 將整個文檔中數據讀取到字符串中
file_put_contents(文件名,數據) 寫數據,將指定內容寫到指定文件中(沒有則建立)
basename() 文件名
copy(源,目的) 拷貝
unlink() unset() 刪除文件
命令執行函數,經過php中某些函數去執行系統命令,和系統交互,經常使用的命令執行函數有:
system()
exec()
shell_exec()
echo’whoami’
passthru()等等
代碼執行函數,使用PHP的某些函數去執行字符串類型的PHP代碼,注意:PHP代碼有要求。
eval()
assert()
preg_repalce() 等等
數據庫管理
MYSQL 輕量級數據庫,適用於中小型企業,性能好,開源
MSSQL 微軟開發,須要安裝在NT系統中,不支持跨平臺,適用於中大型企業
ACCESS 小巧方便,使用與小型企業,小型項目
ORACLE 甲骨文,收費,適用於大型企業,跨平臺,性能高,須要良好底層硬件支持
經常使用框架組合
Mysql+php
Mssql+asp、aspx
Oracle+java
Access+asp
Jsp+oracle
數據庫模型
關係型數據庫(結構化數據庫):mysql mssql oracle ab2
非關係型數據庫(非結構化數據庫):redis mongodb nosql postgresql Hbase等等
配置mysql的環境變量
管理mysql數據庫的方式:
DOS-mysql:mysql -uroot -proot 須要配置mysql的環境變量
phpmyadmin 基於網頁的數據庫管理平臺
mysql-front 開源的C/S模式的數據庫管理平臺
Navicat 功能強大的數據庫管理平臺,收費
Mysql數據庫結構:數據庫名-->數據庫表-->表頭(字段名)-->數據內容
表中有幾個字段就會有幾列數據
一行數據稱爲記錄
管理mysql數據庫的經常使用命令:(在DOS-mysql命令須要加分號「;」)
mysql -uroot -p (二進制方式) 退出:exit
show database; 查看全部數據庫
use mysql; 使用mysql,表示進入到選中的數據庫中了
show tables; 查看當前數據庫中全部的表
select*from user; 查看user表下全部的數據內容
select version(); 查看當前數據庫版本
information_schema 是5.0之後的mysql自帶的,彙總數據庫信息
mysql 存放當前數據庫信息,如登陸信息、權限設置、安全設置
test 測試數據庫
修改密碼
知道原密碼去修改
Step1:進入數據庫,mysql -uroot -p
Step2:
低版本(5.0如下、5.1、5.4):
update mysql.user set password=password(‘新密碼’) where uesr=’root’ and host=’127.0.0.1’;
flush privileges; 刷新數據庫
高版本(5.7 、8.0版本)
use mysql;
alter user 「root」@」localhost」identified by 「新密碼」;
(等同於update mysql.UESR set authentication_string=Password(「新密碼」);)
flush privileges;
在mysql系統以外修改的方法(須要原密碼 ):
使用mysqladmin(在mysql文件的bin目錄下):
mysqladmin -u root -p password」新密碼」;
Step3:使用新密碼登陸測試
忘記密碼去修改(linux中):
step1:
關閉mysql服務,修改my.cnf/my.ini
Step2:
打開mysql配置文件,找到mysqld,加上:skip-grant-tables(跳過密碼驗證),重啓mysql服務
Step3:直接免密碼登陸mysql數據庫,利用以前上面的方法修改密碼
Step4:修改配置文件,將剛纔添加的命令刪除或者註釋掉,再次重啓服務
Step5:使用新密碼登陸測試
在mysql數據庫中添加賬號並受權
添加賬號:
creat user 「用戶」@」主機IP」 identified by 「密碼」;
主機IP:容許哪一個主機能夠登陸,(localhost本機可登陸 ; %任意用戶均可登陸 ; 192.168.1.1表示該ip上的用戶可登陸)
添加權限:
grent 權限 on 庫名.表名 to 「用戶名」@」主機IP」
權限:inset增;drop刪;update改;select查;all全部權限
庫名.表名:表示可以操做的數據庫和表, *.*表示全部的數據庫以及全部的表
好比grant all on *.*to」用戶名」@」192.168.1.1」;
注意:配置中bind 127.0.0.1須要註釋掉,或者根據需求進行修改
數據庫外聯:(容許遠程鏈接)
Update user set host=」%」 where user=」root」 and host=」localhost」;
Flush privileges;
注意:配置中127.0.0.1須要註釋掉
Msql的經常使用函數 :
version();
select @@version; (後面不加括號) 同上查看版本
user();
select @@hostname; 當前用戶名
select @@tmpdir; 查看臨時目錄
select @@basedir; 數據庫服務所在位置
select @@datadir; 數據庫數據存放位置
數據庫文件格式:
opt:編碼
MYD:存儲數據,數據內容
frm:存儲表結構
MYI:存儲當前數據的配置信息和索引信息
mid(被截取的字符串,開始索引,截取的長度); 截取字符串
ord():顯示字符的ascii
concat();拼接字符串 concat(「1」,」2」,」3」); ==123
concat_ws(|,多個參數); 以分隔符分割拼接字符串
group_concat();分組並拼接
sleep(1);讓數據庫等待1s
SQL語法
建立數據庫:
create database 數據庫名;(交互模式/命令行模式)
Mysqladmin -uroot -proot creat 數據庫名;(在DOS命令中,須要使用mysqladmin.exe)(登陸帳戶root 密碼root 建立)
刪除數據庫:
Drop database 名字;
Mysqladmin -uroot -proot drop 名字;
數據庫中的數據類型
int整型
biging 大整型
float 浮點型
date 日期
time 時間
char 字符
varchar 變長字符
text 文本
timestamp 時間戳
double 雙進度浮點型 3.00
bit 比特
tinyint 0/1
建立表:use 表;
create table 表名(字段名1 數據類型 primary key auto_increment, 字段名2 數據類型......)DEFAULT CHARSET=utf8(設置編碼方式); /*primary key 表示爲主鍵、auto_increment 表示自增(看狀況使用)* /
表中須要一個大哥做爲表明,該表明是惟一的,可以表示某我的、事物,將該大哥稱爲主鍵,經過該主鍵可以肯定一個記錄
刪除表:
drop table 表名;
查看錶中字段:show create table 表名;desc 表名;
後續添加主鍵:
Alter table 表名 add primary key(字段); 注意:主鍵字段名不能爲空
插入數據:
insert into 表名(字段名1,字段名2) value (值1,值2); 注意:自增的主鍵能夠不插入數據
查詢數據:
select 字段1,字段2 from 表名;
Select 字段1,字段2 from 表名 where 字段名1=指定的值 and 字段名2=指定的值;
限制查詢:
limit a,b (a、b均爲數字,a表示記錄的索引,b表示記錄的長度)
limit a (從0開始選擇a個記錄)
更新數據:
update 表名 set 字段1=值1,字段2=值2 where條件(同上);
刪除表中數據:delete from 表名;
Like字句:
匹配符:% 任意字符 、 _ 單個字符
Select *from 表名 where name like」shijie%」;(模糊查詢)
△重點
Union聯合查詢:
語法:
查詢語句1 union 查詢語句2; 將查詢語句1與2查詢出來的結果放到一張表中顯示
他們查詢出來的字段個數必須一致,
能夠根據語句2的字段數量查詢語句1的字段數量
△△
Order by的使用
Order by 條件:根據給定的條件排序,默認是升序asc 降序是desc
Select * from order by 字段名 [asc/desc];
Select * from 表 order by 數字; 表示對第n行的數據進行排序,若是數字超過表格的列數,則會報錯,能夠根據數字來推斷表中列數。
△△△
刪除字段:
Alter table 表名 drop 字段名;
添加字段:
Alter table 表名 add 字段名 字段類型;
修改表名:
Alter table 原表名 rename to 新表名;
去重查詢:
Select DISTINCT 字段 from 表名;
數據的導入和導出
導入:
方法1
Mysql -uroot -proot <須要帶入的數據庫文件(data.sql)> 注意:data.sql須要自動建立數據庫,而且須要選擇該數據庫,若是data.sql沒有自動建立數據庫,則要手動建立
Mysql -uroot -proot
Create database 數據庫名
Use 數據庫名
Source 數據庫文件
方法2:
使用phpmyadmin等平臺導入數據,若是導入的文件仍是不能本身建立數據庫,則須要手動建立
方法3:
Mysqlimport -uroot -proot --local 數據庫名 數據庫文件;
導出數據:
方法1:藉助平臺
方法2:mysqldump -uroot -proot 數據庫名>./data.sql; 導出整個數據庫
mysqldump -uroot -proot 數據庫名 表名>./table.sql; 導出某個表
方法3:select 字段 from 表 into outfile」文件」;
後轉10.11