一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

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教程
久国产精品视频| 国产在线视频99| 精品乱人伦一区二区三区| 国产又粗又猛又黄| 波多野结衣中文字幕在线播放| 亚洲人成网在线播放| av在线播放一区二区三区| 国产亚洲欧美一区二区三区| 日韩综合在线观看| 中文字幕一区日韩电影| 国产精品久久婷婷| 久久中文字幕视频| 欧美黄色免费看| 亚洲人在线观看| 94色蜜桃网一区二区三区| 一本久道综合色婷婷五月| 一级黄色大片免费观看| 欧美日韩视频在线一区二区| 欧美日韩偷拍视频| 国产一区二区看久久| 美女福利视频在线| 欧美黑人视频一区| 亚洲精品精品亚洲| 蜜臀av一区二区在线免费观看| 老熟妇精品一区二区三区| 久久久精品在线| 97超碰在线人人| 国产精品久久久久精k8 | 韩国一区二区av| 欧美老女人性生活视频| 91色乱码一区二区三区| 国模吧一区二区三区| 日韩理论片一区二区| 精品一区二区6| 久久亚洲精品一区二区| 91在线观看喷潮| www.中文字幕在线| 日韩免费在线视频| 亚洲一区视频在线观看视频| 欧美一级特黄高清视频| 精品88久久久久88久久久| 潘金莲一级淫片aaaaaa播放| 99免费在线视频观看| 一级欧美一级日韩| 亚洲欧洲精品成人久久奇米网| 国产精品久久久久野外| 伊人久久大香线蕉精品 | 日韩中文字幕国产精品| 亚洲天堂视频在线| 一本大道久久精品懂色aⅴ| 亚洲精品视频导航| 国产97在线|日韩| 国产伦理一区二区| 欧美精品情趣视频| 一级特黄aaa| 欧美日韩高清免费| 国产日韩视频一区二区三区| 欧洲国产精品| 久久久久久久综合色一本| 青春草国产视频| 中文一区一区三区高中清不卡| 日韩一区二区在线观看| 成人午夜影院在线观看| 香蕉视频黄在线观看| 欧美在线精品免播放器视频| 男人天堂2024| 日日摸夜夜添一区| 久久久久久久久久免费视频| 色婷婷国产精品久久包臀| 久久精品一区二区三区av| 无码人妻av一区二区三区波多野| 久久久久久久久久免费视频| 国产精品久久久久久搜索| 国产成人精品久久二区二区91| 欧美老人xxxx18| 久久综合资源网| 精品成人无码久久久久久| 日韩欧美一级在线| 精品国产乱码久久久久久免费| 国产成人高清视频| 亚洲人成无码网站久久99热国产 | 欧美另类videos| 欧美日韩免费视频| 亚洲国产高清aⅴ视频| 91精东传媒理伦片在线观看| 91大学生片黄在线观看| 美日韩精品免费观看视频| 国产va在线播放| 日韩网站在线观看| 久久国产精品99精品国产| 午夜精品亚洲一区二区三区嫩草| 日韩精品有码在线观看| 亚洲久久久久久| 欧美精品一区在线| 亚洲va欧美va天堂v国产综合| 成人黄色免费网| 精品久久久噜噜噜噜久久图片| 欧美日韩三级视频| 99久久99久久久精品棕色圆| 天堂av在线网站| 青青影院一区二区三区四区| 最好看的中文字幕久久| 高清国产在线观看| 国产美女视频免费| 另类天堂视频在线观看| www.欧美国产| 中文字幕第4页| 18视频在线观看娇喘| 国产成人精品一区二区在线| 最近2019年好看中文字幕视频| 亚洲激情图片qvod| 丰满少妇xoxoxo视频| 中文字幕成人在线视频| 精品日韩欧美| 欧美成人黄色小视频| 无码精品黑人一区二区三区| av免费一区二区| 蜜桃久久精品成人无码av| 成人永久aaa| 中文字幕+乱码+中文| 亚洲狠狠婷婷综合久久久久图片| 综合色婷婷一区二区亚洲欧美国产| 欧美视频日韩视频| 色综合久久综合网欧美综合网| 亚洲激情五月婷婷| 国产精品夫妻自拍| 国产精品国产三级国产| 国产在线一二区| 精产国品一二三区| 欧美大尺度做爰床戏| 亚洲第一精品区| 亚洲一区美女| 色综合五月婷婷| 国产免费一区二区三区四区五区| 国产精品一二三四五区| 亚洲欧美精品在线观看| 欧美精品videosex牲欧美| 欧美一级日韩免费不卡| 91视频一区二区| 国产成人午夜精品5599| 欧美男人天堂网| 欧美色图另类小说| 亚洲精品免费网站| 国产精品丝袜高跟| 欧美伊人久久大香线蕉综合69| 久久久www成人免费毛片麻豆| 可以看av的网站久久看| 殴美一级特黄aaaaaa| www黄色在线观看| 人妻体体内射精一区二区| 国产综合内射日韩久| 亚洲成人中文在线| 制服.丝袜.亚洲.中文.综合| 91久久国产精品| 视频二区在线播放| av大全在线观看| 久久日韩粉嫩一区二区三区| 色综合天天综合网国产成人综合天| 欧美日韩精品电影| 91精品国模一区二区三区| 亚洲成人久久久久| 色yeye香蕉凹凸一区二区av| 国产97免费视| 国产丝袜一区二区三区免费视频| 国产精品午夜久久| 精品国产区在线| 深夜福利成人| 日本美女黄色一级片| 国产成年人免费视频| 国产成人亚洲精品自产在线| 精品人妻一区二区三区日产乱码| 九九九在线观看视频| 成年人看的免费视频| 久久久久人妻一区精品色| 激情图片小说一区| 日韩视频一区在线观看| 在线观看18视频网站| 中文字幕码精品视频网站| 亚洲国产中文字幕在线视频综合| 久久久精品电影| 成人在线观看av| 国产在线精品一区二区不卡了 | 久久久高清视频| av视屏在线播放| 性欧美13一14内谢| 91精品国产乱码久久久| 成人高清在线视频| 亚洲人成色777777老人头| 日本强好片久久久久久aaa| 亚洲国产电影在线观看| 97久久精品人人做人人爽| 99精品在线免费| 69久久夜色精品国产69乱青草| 姑娘第5集在线观看免费好剧| 波多野结衣加勒比| 日韩xxxx视频| 日本一区二区三区四区高清视频| 成人av电影天堂| 国产精品午夜国产小视频| 456亚洲影院| 在线观看亚洲视频啊啊啊啊| 欧美 亚洲 视频| 国产精品视频地址| 美女精品视频一区| 欧美激情精品久久久久久黑人 | 国产a∨精品一区二区三区不卡| 黑人巨大精品欧美一区二区一视频| 中文字幕视频免费观看| www.这里只有精品| 久久av一区二区三区漫画| 国产视频精品免费播放| 欧美日韩在线视频一区| 国产精品欧美久久久久一区二区| 国产精品一区二区你懂的| 337p粉嫩大胆噜噜噜噜噜91av| 天堂av中文字幕| 国产成人免费视频| 夜夜精品视频一区二区| 国产主播欧美精品| 久久视频精品在线观看| 五月婷婷伊人网| 亚洲综合久久av| 日本久久久久久久久| 一二三av在线| 在线日韩国产网站| 国产日产精品一区二区三区| 国产欧美视频一区二区三区| 欧美精品在线观看一区二区| 亚洲精品免费在线看| 手机在线精品视频| 美女999久久久精品视频| 成人性生活毛片| 亚洲免费色视频| 国产一区二区三区免费不卡| 国产一区二区播放| 国产美女久久久久| 在线观看日韩欧美| 久久久久久久久一区| 欧美老熟妇乱大交xxxxx | 中文字幕欧美在线| 欧美中文字幕在线播放| 久久国产精品99久久久久久丝袜| 青青草自拍偷拍| 亚洲国产精品高清久久久| 国产日韩视频一区| 99久久伊人网影院| 亚洲第一精品久久忘忧草社区| 国产婷婷一区二区三区| 国产高清一区二区三区四区| 国产影视一区二区| 欧美日韩精品欧美日韩精品一 | 欧美羞羞免费网站| 国产ts人妖一区二区三区 | 久久天天狠狠| 黄色录像免费观看| 国产成人欧美日韩在线电影| 国产精品白丝在线| 欧美成人免费全部| 国产精品99久久免费黑人人妻| 欧美男人天堂网| 国产精品成人国产乱一区 | av天堂永久资源网| 99精品久久99久久久久| 日本视频一区在线观看| 色欲av永久无码精品无码蜜桃| 欧美一区二区久久久| 人人干人人视频| 成人涩涩小片视频日本| 捆绑紧缚一区二区三区视频| 亚洲精品视频在线播放 | 亚洲综合视频在线播放| 亚洲午夜国产一区99re久久| 日韩精品无码一区二区三区久久久 | 成人免费毛片xxx| 久久99国内精品| 97人妻精品一区二区免费| 三级三级久久三级久久18| 日韩黄色短视频| 无码少妇精品一区二区免费动态| 亚洲精品国产精品乱码不卡| 波多野结衣在线网址| 亚洲视频免费播放| 美日韩一级片在线观看| 久久电影网电视剧免费观看| 成人av片在线观看| 国产精品国产自产拍在线| 亚洲h动漫在线| 日韩中文字幕国产精品| 欧美一区1区三区3区公司| 丰满岳乱妇一区二区| 99久久精品国产一区色| 亚欧精品在线视频| 蜜臀av一区二区三区有限公司| 高清在线成人网| 国产日韩欧美在线观看| 亚洲av成人精品日韩在线播放| 91成人在线播放| 亚洲色图 激情小说| 亚洲精品久久久一区二区三区| 91国模少妇一区二区三区| 色婷婷av一区| 好吊色欧美一区二区三区四区 | 久久伊人免费视频| 日韩精品视频一二三| 成人午夜免费av| 艳母动漫在线免费观看| 97精品国产97久久久久久久久久久久 | 国产成人aaaa| 97色在线播放视频| 欧美夫妇交换xxx| 国产网红主播福利一区二区| 精品产品国产在线不卡| 一级黄色录像视频| 久久久性生活视频| www一区二区www免费| 免费看av在线| 亚洲a一区二区| 99精品99久久久久久宅男| 伊人久久一区二区三区| 九一久久久久久| 成人久久18免费网站图片| 国产高清av片| 免费成人你懂的| 欧美精品乱人伦久久久久久| 久久久久久国产精品mv| 爱爱视频免费在线观看| 欧美精品日韩一本| 中文字幕一区二区三区四区五区人 | 91久久国语露脸精品国产高跟| 国产精品资源在线| 亚洲一二三区视频在线观看| 国产精品日韩在线观看| 在线观看成人毛片| 亚洲精品欧美在线| 91免费福利视频| 99热在线只有精品| 欧美三级中文字幕在线观看| 亚洲热在线视频| 国产精品国产精品国产专区不片| 成人综合av网| 免费无遮挡无码永久在线观看视频| 91免费在线看| 成人国产精品日本在线| 精品国产999久久久免费| 亚洲精品乱码久久久久久蜜桃91| 亚洲一区二区三区视频在线| 午夜免费激情视频| 91在线观看免费网站| 激情偷乱视频一区二区三区| 国产三级三级在线观看| 亚洲人免费视频| 国产精品扒开腿做爽爽爽a片唱戏| 92国产精品观看| 国内精品一区二区| 免费观看a视频| 天天综合狠狠精品| 成人黄色小视频在线观看| xxxx日本黄色| 精品麻豆av| 欧美一级淫片007| 午夜精品一区二| 久久精品这里有| 国产精品日日摸夜夜摸av| 精品成人无码一区二区三区| 国产精品高精视频免费| 欧美日韩精品中文字幕| 亚洲av无码国产精品久久不卡| 国产伦精品免费视频| 色欲av伊人久久大香线蕉影院| 欧美日韩精品不卡| 日韩福利在线播放| 国产激情视频一区二区三区欧美| 蜜桃免费在线视频| 亚洲欧洲日产国产综合网| 国产av无码专区亚洲精品| 91麻豆123| 屁屁影院ccyy国产第一页| www国产精品av| 国产乱子伦精品无码专区| 日韩毛片视频在线看| 秋霞无码一区二区| 亚洲午夜影视影院在线观看| 日日橹狠狠爱欧美超碰| 亚洲欧美一区二区三区国产精品| 国产精品又粗又长| 亚洲精品亚洲人成人网在线播放| 5月婷婷6月丁香| 亚洲va在线va天堂| 亚洲天堂一区二区在线观看| 欧美日韩一区二区三区视频| 91精品人妻一区二区三区蜜桃欧美| 欧美久久一二区| 国产福利拍拍拍| 日韩免费观看网站| 香蕉国产在线视频| 久久福利电影| 中文字幕欧美日韩一区| 欧美国产日韩另类| 精品少妇一区二区三区在线播放 | 国产拍揄自揄精品视频麻豆| 免费成人深夜夜行视频| av福利精品导航| 免费观看成人在线视频| 日韩区在线观看| 校园春色 亚洲| 26uuu亚洲国产精品| 日本伊人午夜精品| 婷婷视频在线播放| 欧美日韩国产成人在线免费| 中文字幕 亚洲视频|