欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

PHP技巧:PHP文件系統基本操作類_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:PHP應用:PHP在linxu下的安裝與配置
環境需求與準備工作 在安裝 PHP 做為 WWW 服務器的一部份時,我們可以考慮用 UNIX 操作系統;或者是 Windows NT/95 等 Win32 API 的平臺。當然,大部份的人都會使用 UNIX 來當作 PHP 的執行平臺 (在 Windows NT 的用戶大多數都會選擇 IIS ASP),因此,本書的

/*
*
* ===========Z=================
* QQ:118824
* MSN:snakevil_@hotmail.com
* HP:http://www.snakevil.com/
* ===========Z=================
*
*/

/**
* @]Class Name[= IO
* @]Class URI[= System.IO
* @]Purpose[=
* 本類用于對文件系統的處理
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]Version[= 1.1.1
* @]Create[= 17:13 2004-3-25
* @]Modifications[=
* 4:04 2004-3-30
* 修復 generate_path() 方法中存在的一些 BUG
* 重新設計方法 no_comment()
* 4:32 2004-3-29
* 簡化方法 list_dir() 的返回值
* 增加方法 file_info() 獲取文件或目錄信息
* 5:35 2004-3-28
* 整理優化算法
* 7:31 2004-3-27
* 將錯誤處理抽象為基類
* 增加方法 no_comment() 刪除文件中 C 規范注釋
* @]See[=
*/
class IO extends SnkClass {
var result; // 操作返回結果,如方法返回值為 mixed,則成功操作結果可在此獲得
var exec_cmd; // 執行方法,暫時沒應用到
var exist_dir; // 創建目錄時最后存在的目錄,現用于 copy() 和 move()
var buffer_size; // 文件讀取緩沖區大小,根據服務應用規模和服務器配置修改,建議默認值

function IO() {
parent::SnkClass();
this->result = array();
this->exec_cmd = "";
this->exist_dir = "";
this->buffer_size = 8192;
return this;
}

/**
* @]Method Name[= list_dir()
* @]Purpose[=
* 讀取指定目錄內容,返回內容數組
* @]Parameter[=
* string dir_path 指定目錄路徑,默認為當前目錄
* @]Return[= mixed 錯誤返回 FALSE,否則返回
* array(
* array("name","location","type"),
* ......
* )
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function list_dir(path=".") {
if (!is_dir(path)) return this->error_occur(0x000B, __FUNCTION__);
if (!is_readable(path)) return this->error_occur(0x0002, path);
dh = @opendir(path);
result = array();
path = realpath(path);
if (path[strlen(path)-1]!=DIRECTORY_SEPARATOR) path .= DIRECTORY_SEPARATOR; // 保證目錄絕對地址后帶目錄分隔符
while (FALSE!==(fh=readdir(dh))) { // 使用 !== 防止處理名稱為 0 或 FALSE 的文件、目錄
if (fh=="."||fh=="..") continue; // 忽略系統特定文件夾
i = path.fh; // 獲取絕對地址
t = array(
"name" => fh,
"location" => i,
"type" => is_file(i) ? 1 : (is_dir(i) ? 0 : -1)
);
result[] = t;
}
closedir(dh);
unset(dh, fh, t, i);
clearstatcache(); // 清除文件系統緩存
return this->result = result;
}

/**
* @]Method Name[= file_info()
* @]Purpose[=
* 獲取指定文件或目錄的屬性
* @]Parameter[=
* string dir_path 指定目錄路徑,默認為當前目錄
* @]Return[= mixed 錯誤返回 FALSE,否則返回
* array("name","location","type","size","access","change","modify","read","write"),
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function file_info(path=".") {
path = realpath(path);
if (!path) return this->error_occur(0x000A, __FUNCTION__);
result = array(
"name" => substr(path, strrpos(path, DIRECTORY_SEPARATOR) 1),
"location" => path,
"type" => is_file(path) ? 1 : (is_dir(path) ? 0 : -1),
"size" => filesize(path),
"access" => fileatime(path),
"modify" => filemtime(path),
"change" => filectime(path),
"read" => is_readable(path),
"write" => is_writeable(path)
);
clearstatcache();
return this->result = result;
}

/**
* @]Method Name[= seek_file()
* @]Purpose[=
* 根據正則表達式條件,在相應目錄及給定層次的子目錄中搜索匹配的文件、目錄
* @]Parameter[=
* string pattern 兼容 PERL 標準的正則表達式指明搜索匹配要求,會添加 /^ /,默認為 .*
* string path 進行搜索的目錄路徑,默認為當前路徑
* enum seesk_type 有 -1 0 1 三種可能值,0 僅文件夾,1 僅文件,-1 兩者都包括,默認為 1
* int sub_dir 搜索的子目錄深度,指定目錄不算,建議不要超過 5,默認為 0
* limit limit 搜索結果限制,避免過度浪費系統資源,默認為 100
* @]Return[= mixed 錯誤返回 FALSE,否則
* array(
* array(
* "name","locate","type"
* ),
* ......
* )
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function seek_file(pattern=".*", path=".", seek_type=1, sub_dir_level=0, limit=100) {
/* 檢查參數值 */
is_error = seek_type!=1 && seek_type!=0 && seek_type!=-1;
is_error = is_error && (!is_int(sub_dir_level) || sub_dir_level < 0);
is_error = is_error && (!is_int(limit) || limit < 1);
if (is_error) return this->error_occur(0x000B, __FUNCTION__);
unset(is_error);
result = array();
/* array() == FALSE,所以需要使用 === */
if (FALSE===i=this->list_dir(path)) return FALSE; // 如果不能列舉目錄,返回
for (j=0,k=count(i);j<k;j ) {
if (i[j]["type"]==-1) continue; // 對于非目錄非文件項目,跳過
if (i[j]["type"]==0&&sub_dir_level) { // 如果需要搜索下層目錄
if (FALSE===l=this->seek_file(pattern,i[j]["location"],seek_type,(sub_dir_level - 1),limit)) return FALSE;
result = array_merge(result, l); // 將下層目錄搜索結果添加
}
if (seek_type i[j]["type"]==1||!preg_match("/^".pattern."/", i[j]["name"])) continue; // 如果不搜索當前類型,跳過
result[] = i[j];
if (count(result)>=limit) { // 截去超過要求的長度,離開列舉
array_splice(result, limit);
break;
}
}
unset(i, j, k, l);
return this->result = result;
}

/**
* @]Method Name[= delete()
* @]Purpose[=
* 刪除指定對象,文件或文件夾——包括內含子目錄和文件的非空文件夾
* @]Parameter[=
* string path 指定要刪除的內容路徑,文件或目錄均可
* @]Return[= boolean 錯誤返回 FALSE,否則 TRUE
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function delete(path="") {
path = realpath(path);
if (!path) return this->error_occur(0x000A, __FUNCTION__);
if (!is_dir(path)) {
if (@unlink(path)) return TRUE; // 文件刪除成功
return this->error_occur(0x0004, path);
} else {
if (FALSE===i=this->list_dir(path)) return FALSE; // 不能列舉目錄
for (j=0,k=count(i);j<k;j )
if (!this->delete(i[j]["location"])) return FALSE; // 刪除目錄內容出錯
unset(i, j, k);
return TRUE;
}
}

/**
* @]Method Name[= generate_path()
* @]Purpose[=
* 獲取現有或不存在文件、目錄的絕對地址
* @]Parameter[=
* string path 要獲取地址的文件、目錄現有相對、絕對地址
* @]Return[= string 獲得的地址
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function generate_path(path="") {
i = "/"==DIRECTORY_SEPARATOR ? "\\" : "/"; // 統一目錄分割符
path = str_replace(i, DIRECTORY_SEPARATOR, strval(path));
if (path[strlen(path)-1]!=DIRECTORY_SEPARATOR) path .= DIRECTORY_SEPARATOR;
i = strpos(path, DIRECTORY_SEPARATOR); // 獲得路徑中首個目錄分割符的位置
ext = substr(path, i 1);
path = substr(path, 0, i 1);
if (i=realpath(path)) path = i; // 得到基本路徑
else {
ext = path.ext;
path = realpath(".");
}
if (strlen(ext)) { // 對剩余內容處理
ext = preg_replace("/[\:\*\?\"\<\>\|]/", "", explode(DIRECTORY_SEPARATOR, ext));
array_pop(ext);
path = explode(DIRECTORY_SEPARATOR, path); // 建立目錄層軸
if (path[count(path)-1]=="") array_pop(path);
while (count(ext)) {
i = array_shift(ext);
if (i==".."&&count(path)>1) array_pop(path);
elseif (""!=str_replace(".", "", i)) path[] = i;
}
path = implode(DIRECTORY_SEPARATOR, path);
}
unset(ext, i);
return path;
}

/**
* @]Method Name[= make_dir()
* @]Purpose[=
* 建立任意文件夾,相對或絕對路徑皆可,深層建立亦可
* @]Parameter[=
* string path 要建立的最終目錄路徑
* @]Return[= boolean 錯誤返回 FALSE,否則 TRUE
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function make_dir(path="") {
i = explode(DIRECTORY_SEPARATOR, this->generate_path(path)); // 生成目錄路徑
path = array_shift(i);
for (j=0,k=count(i);j<k;j ) {
path .= DIRECTORY_SEPARATOR.i[j];
if (!is_dir(path)) {
if (this->exist_dir=="") this->exist_dir = path; // 記錄最后存在的目錄路徑
if (!@mkdir(path)) return this->error_occur(0x0003, substr(path, 0, strrpos(path, DIRECTORY_SEPARATOR)));
}
}
if (this->exist_dir=="") this->exist_dir = path;
return TRUE;
}

/**
* @]Method Name[= verify_file()
* @]Purpose[=
* 使用 MD5 算法比較兩個文件是否相同
* @]Parameter[=
* string src 源文件路徑
* string dst 目標文件路徑
* boolean interal 對于超過 1MB 文件,設置 FALSE 省去 MD5 檢驗步驟,減輕服務器負擔
* @]Return[= boolean 錯誤返回 FALSE,否則 TRUE
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function verify_file(src="", dst="", interal=TRUE) {
if (!is_file(src)||!is_file(dst)) return this->error_occur(0x000B, __FUNCTION__);
if (!is_readable(src)) return this->error_occur(0x0006, src);
if (!is_readable(dst)) return this->error_occur(0x0006, dst);
i = filesize(src);
if (filesize(dst)!=i) { // 文件大小不等
unset(i);
return FALSE;
}
if (i>1024*1024*1024&&!interal) { // 對于 1MB 的文件,如果不要求精確檢查,跳過
unset(i);
return TRUE;
}
unset(i);
if (md5_file(src)!=md5_file(dst)) return FALSE; // 文件 MD5 效驗不符合,內容不相同
return TRUE;
}

/**
* @]Method Name[= copy()
* @]Purpose[=
* 對任意文件夾、文件進行復制,相對或絕對路徑皆可,文件復制完成后會進行效驗,檢查是否出錯數據錯誤
* @]Parameter[=
* string src_path 指定要復制的源內容路徑,文件或目錄均可
* string dst_path 指定要復制的目標內容路徑,文件或目錄均可,性質由 src_path 決定,可為 src_path 下層目錄
* @]Return[= boolean 錯誤返回 FALSE,否則 TRUE
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function copy(src="", dst="", sub=FALSE) {
if (!src=realpath(src)) return this->error_occur(0x000B, __FUNCTION__);
dst = this->generate_path(dst);
if (is_dir(src)) { // 處理目錄
/*
* 關于算法的說明:
* 本來打算使用很簡單的遞歸算法,遇神殺神,遇魔斬魔的,后來發現一個問題:如果目標路徑
* 為源路徑的后代路徑怎么辦?這樣算法會不停的探測下去…
* 于是添加了 this->exist_dir 屬性,用來記錄這一情況下目標路徑中存在的部分。于是新的問
* 題出來了:如何保存這一屬性?
* 將整個功能整合到 this->copy() 方法中,那么必然需要在這個函數中記錄 this->exist_dir
* 的變化,于是乎需要另外的一個有效的方法來阻止每一次操作中對其的更改。
* 作為變通,我使用的隱藏參數 sub,這個參數無論如何,只要算法不變,永遠在參數表的最
* 后一個。因此,方法開始變得不穩定,但這也沒有辦法,只能希望程序員自己不要故意破壞。
* 在外部調用時,因為默認 FALSE,所以對 this->exist_dir 寫。內部遞歸時,顯性 TRUE,不
* 該屬性,保證有效性。
*/
if (!is_readable(src)) return this->error_occur(0x0002, src);
if (dst[strlen(dst)-1]!=DIRECTORY_SEPARATOR) dst .= DIRECTORY_SEPARATOR;
if (TRUE===sub&&src==this->exist_dir) return TRUE; // 源路徑為記錄的目標路徑
if (TRUE!==sub) this->exist_dir = ""; // 記錄創建目錄前目標目錄路徑中存在的目錄路徑
if (!this->make_dir(dst)) return FALSE; // 創建目錄
if (FALSE===i=this->list_dir(src)) return FALSE; // 讀取目錄出錯
for (j=0,k=count(i);j<k;j ) if (!this->copy(i[j]["location"], dst.i[j]["name"],TRUE)) return FALSE;
unset(i, j, k);
RETURN TRUE;
} else {
if (!is_readable(src)) return this->error_occur(0x0006, src);
if (this->verify_file(src,dst)) return TRUE;
if (!copy(src,dst)) return this->error_occur(0x0007, dst);
if (!this->verify_file(src,dst)) {
@unlink(dst); // 復制文件失敗刪除新文件
return this->error_occur(0x0007, dst);
}
return TRUE;
}
}

/**
* @]Method Name[= move()
* @]Purpose[=
* 對任意文件夾、文件進行移動,相對或絕對路徑皆可,文件移動完成后會進行效驗,檢查是否出錯數據錯誤
* @]Parameter[=
* string src_path 指定要移動的源內容路徑,文件或目錄均可
* string dst_path 指定要移動的目標內容路徑,文件或目錄均可,性質由 src_path 決定,可為 src_path 下層目錄
* @]Return[= boolean 錯誤返回 FALSE,否則 TRUE
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function move(src="", dst="", sub=FALSE) {
if (!src=realpath(src)) return this->error_occur(0x000B, __FUNCTION__);
dst = this->generate_path(dst);
if (is_dir(src)) { // 處理目錄
if (!is_readable(src)) return this->error_occur(0x0002, src);
if (dst[strlen(dst)-1]!=DIRECTORY_SEPARATOR) dst .= DIRECTORY_SEPARATOR;
if (TRUE===sub&&src==this->exist_dir) return TRUE;
if (TRUE!==sub) this->exist_dir = "";
if (!this->make_dir(dst)) return FALSE;
if (FALSE===i=this->list_dir(src)) return FALSE;
for (j=0,k=count(i);j<k;j ) if (!this->move(i[j]["location"], dst.i[j]["name"],TRUE)) return FALSE;
unset(i, j, k);
if (FALSE===strpos(this->exist_dir,src))
if (!@rmdir(src)) return this->error_occur(0x0004, src); // 對非目標目錄的上層目錄,刪除
return TRUE;
} else {
if (!is_readable(src)) return this->error_occur(0x0006, src);
if (this->verify_file(src,dst)) return TRUE;
if (!copy(src,dst)) return this->error_occur(0x0007, dst);
if (!this->verify_file(src,dst)) {
@unlink(dst);
return this->error_occur(0x0007, dst);
}
if (!@unlink(src)) return this->error_occur(0x0006, src); // 刪除源文件
return TRUE;
}
}

/**
* @]Method Name[= no_comment()
* @]Purpose[=
* 清除文件中 C 規范的注釋
* @]Parameter[=
* string path 指定要執行操作的文件
* @]Return[= boolean 錯誤返回 FALSE,否則 TRUE
* @]Author[= SNakeVil <51JS,BU,PHPx> (snakevil@qq.com)
* @]See[=
*/
function no_comment(path="") {
if (!is_file(path)) return this->error_occur(0x000B, __FUNCTION__);
if (!is_readable(path)) return this->error_occur(0x0006, path);
if (!is_writeable(path)) return this->error_occur(0x0007, path);
if (!th=tmpfile()) return this->error_occur(0x000C, path); // 創建臨時文件
fh = fopen(path, "r b");
if (!flock(fh,LOCK_EX)) { // 鎖定文件
fclose(fh);
unset(fh);
return this->error_occur(0x0009, path);
}
fbuffer = fread(fh, this->buffer_size*2); // 文件讀取緩沖區
tbuffer = ""; // 臨時文件緩沖區
in_dq = in_sq = in_lc = in_bc = FALSE;
while (fblen=strlen(fbuffer)) { // 處理原始數據
fstats = feof(fh);
for (i=0;i<fblen;i ) { // 分析文件內容
if (!fstats&&i 5>fblen) break; // 文件未完全讀取時臨近緩沖區讀取完成讀取下一塊文件內容
j = substr(fbuffer, i, 2);
k = j[0];
if (j=="/*"&&!in_dq&&!in_sq&&!in_lc) { // 不在字符串和行注釋中,塊注釋開始
in_bc = TRUE;
i ;
} elseif (j=="*/"&&in_bc) { // 塊注釋結束
in_bc = FALSE;
i =2;
} elseif (j=="//"&&!in_dq&&!in_sq&&!in_bc) { // 行注釋開始
in_lc = TRUE;
i ;
} elseif (in_lc&&(k=="\r"||k=="\n")) in_lc = FALSE; // 行注釋結束
elseif (j=="\\\\"||j=="\\\""||j=="\\'") { // 轉義字符
tbuffer .= j;
i ;
continue;
} elseif (k=="\""&&!in_sq&&!in_bc&&!in_lc) in_dq = !in_dq; // 雙引號字符串開始、結束
elseif (k=="'"&&!in_dq&&!in_bc&&!in_lc) in_sq = !in_sq; // 單引號字符串開始、結束
if (in_lc||in_bc) continue; // 在注釋中,跳過
tbuffer .= fbuffer[i];
}
fbuffer = substr(fbuffer, i); // 拋棄讀取過的部分
unset(i, j, k);
if (!fstats) fbuffer .= fread(fh, this->buffer_size);
if (fstats||strlen(tbuffer)>=this->buffer_size) { // 寫入合法數據到臨時文件
if (!fwrite(th,tbuffer)) { // 寫入失敗,空間不足
fclose(th);
flock(fh, LOCK_UN);
fclose(fh);
unset(th, fh, in_dq, in_sq, in_lc, in_bc, i, j, k);
return this->error_occur(0x000D, "");
}
tbuffer = "";
}
}
unset(fbuffer, tbuffer, fstats, in_dq, in_sq, in_lc, in_bc);
rewind(fh); // 回移文件指針到文件首
rewind(th);
i = j = "";
k = 0;
while (!feof(th)) { // 將臨時文件數據寫回源文件
i = fgets(th, this->buffer_size);
if (j=="") { // 獲得文件系統的換行符
j= substr(i, -2);
if (j=="\r\n") k = 2;
elseif (j[1]=="\r"||j[1]=="\n") {
k = 1;
j = j[1];
} else j = "";
}
if (substr(i, -k)==j) {
i = rtrim(substr(i, 0, -k), " \t");
if (strlen(i)) fwrite(fh, i.j); // 清除右方空格
else continue;
} else fwrite(fh, rtrim(i, " \t"));
}
fflush(fh); // 保存、關閉文件
ftruncate(fh, ftell(fh));
fclose(th);
flock(fh, LOCK_UN);
fclose(fh);
unset(i, j, k, fh, th);
return TRUE;
}
}

/**
* @]Error List[=
* 0x0001 指定目錄不存在
* 0x0002 指定目錄無讀取權限
* 0x0003 指定目錄無寫入權限
* 0x0004 指定目錄無刪除權限
* 0x0005 指定文件不存在
* 0x0006 指定文件無讀取權限
* 0x0007 指定文件無寫入權限
* 0x0008 指定文件無刪除權限
* 0x0009 指定文件無法鎖定
* 0x000A 指定對象不存在
* 0x000B 方法指定參數不正確
* 0x000C 無法創建臨時文件
* 0x000D 磁盤空間不足
* 0x000E
* 0x000F
* 0x0010
* 0x0011
*
*/
?>

分享:PHP廣告輪播效果詳細代碼
網路廣告,變成了 Internet 上的熱門學問。而 468x60 更變成了廣告人員絞盡腦汁的尺寸。 在處理廣告時,若能直接使用瀏覽器將廣告的 468x60 圖檔送到處理廣告的伺服器中,相信是件很舒服的事,不用再開 FTP 程式,搞大半天只為了 upload。 這個問題,是所有 W

來源:模板無憂//所屬分類:PHP教程/更新時間:2012-06-09
相關PHP教程
狠狠人妻久久久久久综合麻豆| 日韩精品一区二区三区电影| 日批免费观看视频| 欧美一区二区黄片| 久久狠狠婷婷| 欧美精品色综合| 成人av免费在线看| 久久国产精品无码一级毛片| yy6080久久伦理一区二区| 黄网站免费久久| 精品成人佐山爱一区二区| 麻豆91av| 精品国产视频在线观看| 国产一区在线电影| 亚洲国产精品二十页| 美女撒尿一区二区三区| 欧美精品99久久| 一起草av在线| 亚洲欧美不卡| 欧美精品三级在线观看| 精品视频高清无人区区二区三区| 香蕉视频黄色在线观看| www.欧美| 久久久欧美精品sm网站| 久久精品久久久久电影| 免费黄色日本网站| www.av在线.com| 日韩高清不卡一区二区三区| 精品国产一区二区三区av性色| 精品视频一区二区三区四区| 欧美亚州韩日在线看免费版国语版| 久久久精品久久久| 情侣黄网站免费看| 午夜精品久久久久久久91蜜桃| 免费亚洲视频| 日韩女优电影在线观看| 日韩在线三级| 女人十八岁毛片| 精品91视频| 欧美精品丝袜久久久中文字幕| 97自拍视频| 天堂资源在线视频| 国产精品一国产精品| 亚洲成国产人片在线观看| 成人av在线天堂| 怡红院一区二区三区| 青青草原在线亚洲| 午夜精品福利视频网站| 91久久精品国产91久久性色tv | 国产欧美日韩亚州综合| 高清在线视频日韩欧美| 人妻激情偷乱视频一区二区三区| 精品久久福利| 国产欧美精品一区aⅴ影院 | 黄色在线观看免费| 97人人精品| 精品视频1区2区| 亚洲春色在线| 亚洲男人天堂网址| 日韩精品国产欧美| 亚洲无av在线中文字幕| 男人天堂成人在线| 激情小说亚洲| 国产精品国产三级国产aⅴ中文| 日本在线观看天堂男亚洲| 欧美日韩人妻精品一区在线| 一级毛片精品毛片| 樱花影视一区二区| 国产精品成人一区二区三区| 青青草手机在线视频| 欧美日韩99| 日韩精品专区在线影院观看| 99久久免费观看| 亚洲第一视频在线| 成人av午夜影院| 欧美一级大胆视频| 日本一级免费视频| 日韩精品一卡| 7777女厕盗摄久久久| 潘金莲一级淫片aaaaa免费看| 亚洲熟女乱色一区二区三区久久久 | 日韩av123| 双性尿奴穿贞c带憋尿| 台湾色综合娱乐中文网| 欧美性猛交xxxx黑人| 日本精品国语自产拍在线观看| 日本最新中文字幕| 日韩国产高清影视| 欧美成人中文字幕| 超碰男人的天堂| 精品一区av| 欧美丰满美乳xxx高潮www| 99中文字幕在线观看| 欧美一级特黄aaaaaa| 久久亚区不卡日本| 成人精品一区二区三区| 精品午夜福利在线观看| 美女日韩在线中文字幕| 麻豆一区二区在线观看| 极品白嫩的小少妇| 欧美日韩在线二区| 欧美sm美女调教| 波多野结衣50连登视频| 婷婷激情成人| 午夜精品久久久久久不卡8050| 欧美国产一二三区| 99精品在线视频观看| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美中文字幕在线播放| 亚洲怡红院在线观看| 99精品国产一区二区青青牛奶| 亚洲人成在线观看| 一区二区三区人妻| 青草国产精品| 日韩精品在线视频观看| 欧美一级视频在线| 尤物tv在线精品| 日韩免费看网站| 男操女免费网站| 日韩电影不卡一区| 91精品婷婷国产综合久久竹菊| 分分操这里只有精品| 日本欧美在线| 色综合久久综合网97色综合| 黄瓜视频免费观看在线观看www| 亚洲欧美国产高清va在线播放| 久久亚洲精华国产精华液| 91香蕉视频在线下载| 在线观看亚洲黄色| 91麻豆.com| 粉嫩av四季av绯色av第一区| 国产精品久久久久久久久久久久久久久久| 成人禁用看黄a在线| 国产欧美一区二区白浆黑人| 午夜精品久久久久久久久久久久久蜜桃 | 午夜精品在线视频| 日本免费www| 久久激情网站| 88国产精品欧美一区二区三区| 美女av免费看| 免费在线观看精品| 国产成人拍精品视频午夜网站| 国产一级一级片| 国产精品一区二区你懂的| 国产精品久久久久国产a级| 国产精品国产三级国产专区52| 国产一区二区导航在线播放| 国产精品美女久久久久久免费| 日韩成人高清视频| 成人性视频网站| 99re6在线| 国产精品无码一区二区桃花视频| 国产欧美一区二区精品忘忧草| 久久精品人成| 天天操天天干天天爱| 亚洲地区一二三色| av在线免费观看国产| 天堂久久av| 精品国产乱码久久久久久图片 | 国产麻豆欧美日韩一区| 成人夜晚看av| 国产成人精品无码高潮| 亚洲精品乱码久久久久久| 亚洲一区 在线播放| 网站一区二区| 精品国产乱码久久久久久影片| theporn国产精品| 伊人久久大香线蕉综合四虎小说| 中文字幕亚洲欧美日韩高清| 91麻豆精品久久毛片一级| 狠狠网亚洲精品| 99久久无色码| 无码h黄肉3d动漫在线观看| 欧美日韩精品中文字幕| 国产一区亚洲二区三区| 欧美h版在线| 久久综合伊人77777蜜臀| 国产免费无码一区二区视频| 成人美女视频在线观看18| 精品国产乱码久久久久久丨区2区| 国产综合在线播放| 色国产综合视频| 182午夜在线观看| 亚洲一区欧美| 韩剧1988在线观看免费完整版| 日韩aaaaaa| 国产女人aaa级久久久级| youjizz.com亚洲| 成人另类视频| 一区二区三区日韩在线| 中文字幕五月天| av不卡免费在线观看| 日本一区二区三区免费观看| 深夜福利亚洲| 亚洲精品国精品久久99热一| 久久精品无码一区| 国产一区二区按摩在线观看| 精品国产一区二区三| 亚洲成人精品综合在线| 亚洲精品在线电影| 18啪啪污污免费网站| 99re66热这里只有精品3直播| 茄子视频成人在线观看 | 久久久久久久久一| 国产欧美综合一区| 九九亚洲视频| 欧美情侣性视频| 国产成人自拍偷拍| 亚洲国产aⅴ成人精品无吗| 538在线视频观看| 激情综合视频| 国产免费久久av| 天天干,夜夜操| 欧美一卡二卡在线观看| 日本激情小视频| 99热在这里有精品免费| 日本精品免费视频| 日韩在线视屏| 国产不卡av在线| 国精品人妻无码一区二区三区喝尿 | 欧美成人午夜视频| 免费黄色网址在线| 亚洲在线中文字幕| www.色欧美| 日韩avvvv在线播放| 国模精品一区二区三区| 91成人app| 国产亚洲欧美另类中文| 日本在线视频免费| 亚洲线精品一区二区三区八戒| 亚洲黄色av网址| 久久精品免费| 精品一区二区视频| 精品视频在线你懂得| 久久成人这里只有精品| 亚洲无码久久久久| 在线免费不卡视频| 青青草福利视频| 91在线观看下载| 日本手机在线视频| 伊人成人在线视频| 51成人做爰www免费看网站| 国产亚洲高清在线观看| 日韩在线观看你懂的| 国产精品尤物视频| 欧美伊人久久大香线蕉综合69 | 136福利视频导航| 欧美影视一区在线| 精品一区二区三区蜜桃在线| 欧美激情一二三区| 少妇黄色一级片| 日本亚洲最大的色成网站www| 久久久亚洲综合网站| 欧美美女啪啪| 欧洲精品在线视频| 成人va天堂| 一本大道亚洲视频| 中国黄色一级视频| 欧美日本一道本| 日本 欧美 国产| 亚洲欧美另类综合偷拍| 久久久九九九热| 国产成人在线视频网站| wwwwww欧美| 狠狠综合久久| 好吊色欧美一区二区三区| 日韩深夜影院| 国产激情久久久| 深夜福利亚洲| 欧美二区乱c黑人| 天天干天天草天天射| 亚洲免费视频网站| 中文字幕黄色av| 欧美一级一级性生活免费录像| 大地资源高清在线视频观看| 亚洲日本电影在线| 无码国产69精品久久久久网站| www.成人网.com| 国产精品亚洲二区在线观看| 久久国内精品视频| 乱熟女高潮一区二区在线| 亚洲高清激情| 青青影院一区二区三区四区| 99re66热这里只有精品8| 91在线短视频| 国产精品手机在线播放| 国产一区玩具在线观看| 中文字幕一区图| 欧美中文字幕在线播放| 日韩欧国产精品一区综合无码| 久久国产精品久久久久久| 东京干手机福利视频| 亚洲女人被黑人巨大进入al| 中文字幕资源网| 精品少妇一区二区三区 | 一级黄色a毛片| 欧美变态凌虐bdsm| 亚洲成人av网址| 欧美变态口味重另类| 波多野结衣午夜| 精品国产sm最大网站| 欧美另类高清videos的特点| 精品国产一区二区精华| 中文字幕理论片| 欧美精品一区二区高清在线观看| 久久久久久久久久久影院| 在线综合+亚洲+欧美中文字幕| 免费人成年激情视频在线观看| 天天免费综合色| 777777国产7777777| 欧美日韩精品在线播放| www.av免费| 色噜噜狠狠成人网p站| 免费毛片在线播放免费| 欧美人xxxx| 亚洲毛片一区二区三区| 亚洲精品在线网站| 国产三级漂亮女教师| 伊是香蕉大人久久| 五月天激情开心网| 精品中文字幕在线2019| 免费成人高清在线视频| 欧美资源在线观看| 大陆精大陆国产国语精品| 成人www视频在线观看| 国产成人精品三级高清久久91| 91一区二区三区| 91精品国产成人观看| 日韩欧美视频一区二区| 香蕉久久夜色精品国产| 国产av人人夜夜澡人人爽麻豆| 久久国产精品露脸对白| 国产精品无码专区av在线播放| 成人黄色网址在线观看| 精品国产一二区| 亚洲精品视频在线看| 国产一区第一页| 欧美三级中文字| 亚洲天堂五月天| 亚洲性日韩精品一区二区| 亚洲欧美一区二区三区| 91精品国产99| 人人香蕉久久| 精品一区二区三区日本| 一本一道久久综合狠狠老精东影业| 97在线免费视频观看| 国产精品一区二区三区99| 五月天视频在线观看| 亚洲免费观看高清完整版在线| 日本伦理一区二区三区| 欧美视频三区在线播放| 中文字幕 欧美激情| 国产亚洲精品日韩| 成人精品动漫| 国产精品一区二区三区久久| 青草国产精品| 亚洲在线观看一区| 国内精品久久久久影院色| 91亚洲精品久久久蜜桃借种| 国产精品久久久久久久久久免费看| 51妺嘿嘿午夜福利| 欧美日韩成人综合天天影院| 国产女人18毛片水真多| 免费97视频在线精品国自产拍| 成人国产精品久久| 18成人免费观看网站下载| 国产精品99一区二区| 国产精品久久..4399| 97精品久久久午夜一区二区三区 | 外国成人在线视频| 欧美日韩亚洲免费| 久久 天天综合| 亚洲午夜精品在线观看| 精品久久久久久中文字幕| 欧美在线观看不卡| 日韩小视频在线观看| 婷婷综合国产| 欧美lavv| 麻豆成人综合网| 永久免费看片在线观看| 亚洲地区一二三色| av首页在线观看| 欧美老少配视频| 三级小说欧洲区亚洲区| 亚州欧美一区三区三区在线| 国产一区三区三区| 在线视频 日韩| 日韩av免费一区| 国产精品久久久久久妇女| 国产精品18久久久久久麻辣| 色偷偷综合网| 波多野结衣 作品| wwwwxxxxx欧美| 婷婷综合在线视频| 精品国产一区二区三区久久久蜜月| 精品人妻一区二区三区蜜桃| 日韩av日韩在线观看| 综合久久久久| 草草久久久无码国产专区| 国产精品美女久久久久久|