青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

教父的告白
一切都是紙老虎
posts - 82,  comments - 7,  trackbacks - 0

Phing是什么?

Phing是一個基于Apache Ant的項目代碼構建系統.你可以用她做傳統的構建系統能做的任何事情,比如GNU make,并且Phing使用簡單的XML構建文件和可擴展的”任務”使之成為易于使用和極具可擴展性的框架.

因為Phing是基于Ant的,所以本手冊部分內容是摘自Ant手冊.

Phing & Binarycloud :歷史

Phing源自Binarycloud的一個子項目.Binaryclound是一個高度工程化的框架,為了在企業環境中使用而設計.Binarycloud廣泛使用XML來存儲關于項目的元數據(配置,節點,窗口小部件,站點結構,等等).

因為Binarycloud是為PHP構建的,在每一個頁面請求上執行XML處理和轉換是不切實際的.Phing用于”編譯”XML元數據為可被PHP引擎處理的數組形式.

當然,XML”編譯”只是Binarycloud使用Phing構建系統的許多方法中的一個.Phing構建系統使你能夠:

1. 從單一的源代碼樹構建多語言頁面.

2. 在單個XML文件中聚集元數據(Metadata)并且用多個不同的XSLT生成幾個文件.(譯者注:在XSLT2.0規范中,消除了1.0規范只能有一個輸入一個輸出的限制,現在我們可以做到單一輸入來生成多個輸出文件)

最初,Binarycloud使用GNU make構建系統,但是,這樣有些缺點. 在makefile中的"Space before tab problem"問題.實際上,它僅在UNIX系統上沒有問題.因此需要尋找一個更好的構架系統.Apache Ant是一個不錯的選擇—它使用XML構建文件和模塊化的設計.但問題是Ant用java寫成,要使用它你必須得在你得計算機上安裝Java虛擬機.

Besides the need for yet another interpreter (i.e. besides PHP), there was also legal/ideological conflict in requiring a commercial JVM (there were problems with Ant on JVMs other than Sun's) for an LGPL'd Binarycloud.

因此,Phing開始開發了,Phing是一個借助于Ant的思想用PHP寫成的構建系統.第一版同時設計和開發,因此不是十分穩定.系統很快暴露出了它的限制并且需要一個更好的Phing系統.因此衍生了Phing2的雛形.

Phing當前的開發集中于Phing2,它涉及許多功能增強,bug修正,并且最值得注意的轉變是用PHP5的抽象類,接口,和try/catch/throw異常處理來重寫了原來Phing的基礎代碼.

Phing怎樣工作

Phing使用包含一組項目構建描述的XML構建文件.構建文件由一些運行實際的命令的目標組成(比如復制文件,刪除目錄,執行數據庫查詢,等等).因此使用Phing,第一步要編寫構建文件,然后運行Phing,在構建文件中定義的要執行的目標.

phing −f mybuildfile.xml mytarget

如圖1,鍵入phing –h可以查看命令參數的描述

默認情況下,Phing將會查找一個叫build.xml的文件.(除非構建文件的名稱不是build.xml,否則不必為Phing指定構建文件的名稱) 并且,如果沒有指定任何目標那么Phing將執行在<project>標簽中設置的默認目標(default屬性所指定的).

Cool,so how can i help?

Phing當前正在積極額開發之中并且又許多事情要完成.如果要參與其中,可以通過下面的方法:

1. 閱讀本手冊以了家Phing ;-)

2. 到http://phing.tigris.org訂閱”dev”郵件列表

設置Phing

本章的目標是幫助你在你的操作系統上正確的設置和執行Phing.一旦你正確的設置了phing你就不需要再回過頭來看這章了,除非你要重新安裝,或者是遷移到其他的平臺.

有幾種方法來獲得Phing的發行包.如果你不想參與當前的開發,推薦你獲取最近的快照版本或穩定版本,如果你有興趣參與我的的開發,你可以從CVS獲取正在開發中的文件.

獲取Phing發行包的最容易的方法是訪問Phing的主頁http://phing.info 下載當前相應格式的你需要的分發包.

自2.0.0b1版之后,你可以可以下載PEAR可安裝包和完全的Phing分發包.如果你希望修改Phing,我們建議你下載完整的Phing發行包,這樣你可以創建你自己的PEAR包.如果你知識簡單地使用Phing作為項目的需要或構建其他的包,下載并且安裝PEAR包.

CVS獲取一個正在開發中的拷貝

鼓勵你對Phing的開發作出貢獻.如果你像參與到Phing的開發中或你知識對其中最新的功能感興趣,你可以看看下面的敘述并中從CVS獲取一份拷貝.

The CVS revisions of Phing are not bullet−proof and may fail to execute properly on your machine. Only obtain the CVS versions if you are absolutely aware of limitations and constraints of such an action.Additionally you should sign up to the development mailinglist to report and notice errors and incompatibilities.

我們假設你正運行UNIX類型的操作系統

So we expect the CVS software is installed ant the cvs executable is in your system's search path.. However, the steps for a Windows based system are very similar.

這里有大量的關于如何使用CVS的資源可用,并且還有關于tigris項目管理平臺的CVS說明.

首先你必須做的第一件事是登錄到CVS服務器.在命令行下鍵入:

cvs –d :pserver:guest@cvs.tigris.org:/cvs login

如果你要作為開發者登錄到Tigris Web站點上.用你自己的用戶名和密碼登錄.你也可以以訪客的身份登錄到Tigris Web站點.

要從項目源代碼資源庫中撿出個別的模塊(如果你不需要整個項目資源庫),鍵入:

cvs –d :pserver:guest@cvs.tigris.org/cvs checkout phing

PEAR 安裝

安裝Phing最簡易的方法是使用pear安裝工具.

$> pear install http://phing.info/pear/phing-current.tgz

PEAR安裝工具將檢查包的依賴性,并把Phing的執行腳本放到PHP的安裝目錄下面(pear命令腳本同時也在這個目錄下面)

PEAR安裝(手動安裝)

如果你不是用pear安裝,你可以自己手動安裝,但這樣要復雜一些,你需要配置你的環境變量以使phing能夠找到phing.bat執行腳本.你可以從http://phing.tigris.org下載

phing-2.0.0.zip 或phing-2.0.0.tar.gz ,解壓到任意一個目錄下,產生三個目錄 bin,docs和classes,然后設置環境變量PHING_HOME,把它指向到Phing目錄.

例如:我下載了phing-2.0.0.tar.gz 解壓到 D:\Phing 那么就把PHING_HOME設置為D:\Phing.

運行Phing之前,你還需要做一下配置.

1. 添加$PHING_HOME(*nix)或%PHING_HOME%(windows)到PATH環境變量中.

2. 設置PHING_HOME環境變量指向到Phing的安裝目錄.

3. 設置PHP_COMMAND變量,指向php命令所在的位置,例如(*nix /usr/bin/php)或windows(c:\php5\php.exe)

4. 設置PHP_CLASSPATH環境變量以包含Phing需要額類庫.至少應該包含%PHP_HOME%\classes.

還有一種方法是把%PHP_HOME%\classes路徑添加到php.ini文件中的include_path參數中去.

5. 檢查php.ini,并確保有如下設置

a) nax_execution_time = 0 // 不限制

b) memory_limit = 32MB // 決于你的構建文件的大小,你可能需要更多的內存

UNIX

如果你使用UNIX,使用 bash bourne shell,并且Phing安裝在/opt/phing目錄下

通過下面的方法適當地設置環境.

export PHP_COMMAND=/usr/bin/php

export PHING_HOME=/opt/phing

export PHP_CLASSPATH=${PHING_HOME}/classes

export PATH=${PATH}:${PHING_HOME}/bin

Windows

在Windows平臺生假設Phing安裝在 c:\opt\phing目錄,那么配置入下:

set PHP_COMMAND=c:\opt\php\php.exe

set PHING_HOME=c:\opt\phing

set PHP_CLASSPATH=c:\opt\phing\classes

set PATH=%PATH%;%PHING_HOME%\bin

高級

有許多用于運行Phing的變量,你至少需要如下幾個設置:

1. 如果你要Phing能夠使用其他的包/類,那么你要把他們添加到PHP_CLASSPATH變量中PHP.ini文件的include_path變量中.

2. 有些任務要求第三方庫.

調用Phing

現在,你準備在命令行或腳本中調用Phing了.下面的章節簡要的描述了如何正確的執行Phing

命令行

Phing在命令行執行也很簡單.僅僅切換到構建文件所在的目錄,并鍵入:

phing [targetname]

Getting Started

phing構建文件用XML標記語言編寫,因此你應該有一些XML和Ant的基礎知識才能很好的理解下面的章節,在web上有許多的資源可用。

XMLPhing

構建文件有如下基本結構:

1. 文檔序言(document prolog)

2. 根元素<project>

3. 幾個類型元素(<property>,<fileset>,<patternset>)

4. 包含一個或幾個內建的或用戶自定義的任務元素(例如:<javac>,<tar>)

編寫一個簡單的構建文件

<?xml version="1.0"?>

<project name="FooBar" default="dist" basedir=".">

<!—創建文件夾-->

<target name="prepare">

<echo msg="Preparing build..." />

<mkdir dir="./build" />

</target>

<!—復制文件-->

<target name="build" depends="prepare">

<echo>Building...</echo>

<copy file="./src/File.php" to="./build/File.php"/>

<copy file="./src/File2.php" to="./build/File2.php"/>

</target>

<!—打包-->

<target name="dist" depends="build">

<echo message="Creating archive..." />

<tar outfile="furbee.tar.gz" basedir="./build"/>

</target>

<!—刪除,清理-->

<target name="clean">

<echo msg="Cleaning up..."/>

<delete file="./build"/>

</target>

</project>

project 元素

文件序言之后緊跟著的第一個元素的是<project>,此元素是一個包含其他元素的容器,并且有以下屬性:

<project>的屬性:

屬性 含義 要求的?

name 項目的名稱 No

basedir 項目的根目錄,如果未指定將使用當前目錄 No

default 在調用構建文件的時候,如果沒有指定要執行的目標,

將執行在此定義的項目默認目標 Yes

description 項目的描述 Yes

target 元素

一個目標可依賴其他的目標.你可能有一個在構建樹中安裝文件的目標,例如,創建一個tar.tgz分發包的目標.

Target元素的屬性:

屬性 含義 要求

name 目標的名稱 Yes

depends 此目標依賴的逗號分隔列表 No

if 為了使此目標得以執行而必須設置的屬性的名稱 No

unless 為了使此目標得以執行而禁止設置的屬性的名稱

任務元素

一個任務是一段可執行的PHP代碼段.此代碼段實現了特定的行為(例如,復制文件).因此你必須在構建文件中定義,才能是Phing真正的調用它.

附錄有一組核心任務和許多可選的任務.編寫你自己的任務也很容易(擴展Phing一節).

任務可以被分配一個id屬性:

<taskname id=”taskID” …/>

property 元素

屬性是在構建文件使用的基本的變量,可以在構建文件中通過 PropertyTask任務設置或在Phing外部通過命令行傳遞.通過命令行傳遞的屬性總是會覆蓋在構建文件中設置的屬性,也就是說命令行是最后傳遞給Phing的,自然會覆蓋先前在構建文件中設置的屬性.

屬性有一個名稱和一個唯一的值.屬性可以作為任務屬性的值.這是通過在”${”和”}”包含屬性名稱來設置的.例如:

<propery name=”javasourcedir” value=”./src/java”/>

<javac srcdir=”${javasourcedir}”/>

這里在運行時${javasourcedir}將被展開為./src/java

內建屬性

Phing給你提供了訪問系統屬性的能力,好像它已經通過<property>定義過的一樣.例如,${os.name}展開為操作系統的名稱.附錄有完整的內建屬性的列表.

更復雜的構建文件

<?xml version="1.0" ?>

<project name="testsite" basedir="." default="main">

<property environment="env"/>

<property file="${env.BCHOME}/build.properties"/>

<property name="package" value="${phing.project.name}" override="true" />

<property name="builddir" value="${env.BCHOME}/build/testsite" override="true" />

<property name="srcdir" value="${project.basedir}" override="true" />

<!-- Fileset for all files -->

<fileset dir="." id="allfiles">

<include name="**">

</fileset>

<!-- Main Target -->

<target name="main" description="main target">

<copy todir="${builddir}">

<fileset refid="allfiles" />

</copy>

</target>

<!-- Rebuild -->

<target name="rebuild" description="rebuilds this package">

<delete dir="${builddir}" />

<phingcall target="main"/>

</target>

</project>

構建文件首先用<property>標記調用PropertyTask任務來定義屬性.然后它定義一個文件集和兩個目標.

前面5個元素定義了項目的屬性.(按照訪問方式不同分三種)

1.(環境變量)第一個property元素,有屬性environment屬性,其值為env,這樣就可以通過env.VARIABLE_NAME的方式來訪問環境變量.例如,我可以調用echo任務吧env.PATH變量打印在控制臺輸出上:

<echo messages=”${env.PATH}”/>

這樣就會輸出PATH環境變量的字符串.

2.(文件)第二個propery元素僅包含file屬性,這里file屬性的值是一個相對的或絕對的指向屬性文件的路徑(屬性文件:后綴名為 .properties,其中包含的鍵值對(key/value)的集合,格式見附錄E).

3.(直接在構建文件中定義屬性變量)通過如下方式定義:

<property name=”propertyname” value=”propertyvalue”/>

另外要注意的是構建文件中的<fileset>標簽.它定義一個文件集合,例如一組多個文件組成的集合.你還可以用<fileset>元素的子元素<include>和<exclude>包含和排除<fileset>文件模式指定的文件集合

譯者注:實際上<fileset>最終所包含的文件是<include>和<exclude>的差集)

關于文件集,見附錄C有更詳盡的描述.另外<fileset>標簽有id屬性,通過id屬性可以在其他地方引用.就像直接包含一樣,通過引用實現了代碼的復用.

第一個任務僅僅包含通過<copy>標簽調用的CopyTask任務.其中并沒有用<include>和<exclude>標簽來包含和排除文件,而是用了<fileset>的refid屬性來引用前面定義的fileset,這樣我們就可以在一個定方定義,而在構建文件中的其他地方多次的使用.

在第二個目標中使用了<phingcall>標簽來調用了PhingTask任務(詳盡見附錄B)

設置Phing

本章的目標是過去和正確的設置并且在你的操作系統上執行Phing,你但以安裝完成就不必在回過頭來再看這章,除非你要重新安裝或移植到其他平臺上去.

系統要求

操作系統

要使用Phing你必須安裝PHP5.0.0b1和以上的版本并且加上 –with-libxml2,和—with-xsl選項.

if you want to make use of advanced functionality. At the time of writing PHP5.0.0b2−dev is currently unable to run Phing due to segmentation faults arising somewhere in the XML parsing of the build file.

關于PHP和其要求額模塊請查看PHP網站http://www.php.net 對于一個簡要的軟件依賴性列表如下

項目組件

這一章的目標是使你熟悉構建文件的基本組件.讀完這一章,即使你不知道構建文件中;某些代碼段的含義,你也能夠讀懂,和理解構建文件的基本結構.

對于補充的參考信息,你可以查看附錄A,附錄B,附錄C,附錄D.

Project

在項目文件結構中,必須定義<project>元素,它是Phing構建文件的根元素,是必須的,意味著所有的項目相關的信息都是包含這<project>元素以內的.

<?xml version=”1.0”?>

<project name=”test” description=”this is a simple test for buildfile” default=”main”>

<!—Everything else here-->

</project>

project的三個屬性,name—項目名稱,這是必須的,description—項目的簡單描述,default—如果在執行時沒有指定目標,那么將使用項目的默認目標.

Project Components In General

項目組件是你能夠在項目文件中找到的所有描述項目信息的標記,目標是項目組件,還有任務,類型,等等.項目組件可能有屬性和嵌套的標簽.屬性僅僅包含簡單的值,例如字符串,整數,等等.嵌套的元素可以是復雜的Phing類型(如Filesets)或簡單的值的封裝類(wrapper classes)

編寫映射器

創建一個Mapper

在PHP5中編寫一個文件Mapper由PHP5支持的接口簡化了.本質上,你的自定義文件名mapper必須實現phing.mappers.FileNameMappers接口.這里有一個創建DOS文件名風格的文件名Mapper

附錄情況說明書

hing內建屬性

屬性 內容

application.startdir

host.arch 主機名稱.在Windows上不可用

host.doman DNS域名.例如php.net.在Windows不可用

host.fstype 文件系統類型,可能的取值為UNIX,WINNT,WIN32.

host.machine 系統架構.例如,i586.在Windows不可用

host.name 由posix_name()返回的名稱,在Windows上不可用

host.os.release 操作系統正是發行版本,例如2.2.10,在Windows上不可用

host.os.version 操作系統版本, #4 Tue Jul 20 17:01:36 MEST 1999.在Windows上不可用

lince.separator 行分隔符,Unix為”\n”,Windows為”\r\n”,Macintosh為”\r”

php.classpath PHP_CLASSPATH環境變量的值.

php.version PHP解釋器的版本.

phing.buildfile 當前構建文件的完整路徑

phing.id

phing.version 當前的Phing版本

project.name 當前項目名稱

project.basedir 當前項目的根路徑

project.description 當前項目描述

user.home 環境變量HOME的值

附錄核心任務

AdhocTaskdefTask

AdhocTypedefTask

AppendTask

AvailableTask

CallTargetTask

CopyTask

DeleteTask

EchoTask

ExecTask

ForeachTask

InputTask

MkdirTask

MoveTask

PhingTask

PearPackageTask

PhpEvalTask

PropertyTask

ReflexievTask

ResolvePathTask

arTask

askdefTask

TouchTask

TypedefTask

UpToDateTask

XsltTask

附錄核心類型

這是一個Phing系統數據類型的參考

FileList文件列表

FileList數據類型,正如它的名字一樣描述文件,不像FileSets,FileList可以包含還沒有創建的文件,就是說它不在文件系統中。同樣FileLists可以用指定的順序來描述文件,然而從文件系統返回的FileSet確實無序的。

使用例子

<filelist dir="/etc" files="httpd/conf/httpd.conf,php.ini"/>

或者使用一個列表文件(listfile屬性),每行包含一個文件名

<filelist dir="conf/" listfile="ini_files.txt"/>

這將截取ini_files.txt文件中的每一行作為一個文件返回到FileList中

屬性

Name Type Description Default Required

dir String files和listfile指出的文件所在的目錄 N/A Yes

files String 逗號或空格分隔的文件列表 N/A Yes(或listfile)

listfile String 一個表示一個文件列表的文本文件,

每行表示一個文件 N/A Yes(或files)

PATH/CLASSPATH

Core Filters

Phing Filter Reader

Expand Properties

HeadFilter

LineContains

LineContains RegExp

Prefix Lines

Replace Tokens

ReplaceRegexp

StripLineBreaks

StripLineComments

StripPHPComments

TabToSpace

TailFilter

XsltFilter

Core Mappers

FlattenMapper

GlobMapper

IdentityMapper

ergeMapper

RegexpMapper

附錄項目組件

Phing項目

Projects在構建文件中是項目最外面的容器元素,同時<project>也是項目構建文件中的根元素,它包含有名稱,目錄,一個簡短的描述和默認目標等屬性.

項目可包含任務調用和目標.(如下)

例子:

<project name=”TestProject” basedir=”.” default=”main”

Description=”This is a test project to show how to use projects”>

<!—Everthing else goes here -->

</project>

屬性

名稱 類型 描述 默認 要求否

basedir 字符串 項目的根目錄 n/a Yes

default 字符串 如果沒有在命令行指定目標,

將使用這里定義的默認目標 all No

description 字符串 項目簡單描述 n/a No

name 字符串 項目的名稱 n/a Yes

目標

例子:

<target if=”lang” unless=”lang.en” depends=”foo1,foo2” name=”main”

Description=”This is a example target”>

<!—everything else gose here -->

</target>

定義在上面例子中的這個目標僅在屬性lang設置并且屬性lang.en沒有設置時執行,另外它依賴foo1和foo2兩個目標,意思是在main目標執行前必須執行foo1和foo2兩個目標,這個目標的名稱是mian并且有一個簡單的描述.

名稱 類型 描述 默認 要求否

depends String 當前目標所以來的目標,

如果有多個依賴目標,以逗號分隔 n/a No

description String 關于目標的簡短的描述信息 n/a No

if String 必須設置的屬性 n/a No

unless String n/a No

name String 目標名稱 n/a Yes

附錄文件格式

構建文件格式

下面的XML文件顯示的了構建文件的一個骨架,它僅包含了一個project和一個target元素.關于如何使用他們,可查看有關Phing Types和Tasks的信息.

<?xml version=’1.0’ ?>

<!--

The root tag of each build file must be a "project" tag.

-->

<project name="(projectname)" [basedir="(projectbasedir)"]

[default="(targetname)"] [description="(projectdescription)"]>

<!−−

Type and task calls here, i.e. filesets, patternsets,CopyTask calls etc.

−−>

<target name="(targetname)" [depends="targetname1,targetname2"]

[if="(ifproperty)"] [unless="(unlessproperty)"]>

<!−−

Type and task calls here, i.e. filesets, patternsets,CopyTask calls, etc.

−−>

</target>

<!−−

More targets here

−−>

</project>

屬性文件格式

屬性文件定義屬性.屬性以鍵/值對的形式保存,并且只包含純文本,屬性文件的后綴名稱一般是.properties,構建文件的默認屬性文件是build.properties

# Property files contain key/value pairs

key=value

# Property keys may contain alphanumeric chars and colons, but

# not special chars. This way you can create pseudo−namespaces

myapp.window.hsize=300

myapp.window.vsize=200

myapp.window.xpos=10

myapp.window.ypos=100

# You can refer to values of other properties by enclosing their

# keys in "${}".

text.width=${myapp.window.hsize}

Everything behind the equal sign is the value, you do

# not have to enclose strings:

text=This is some text, Your OS is ${php.os}

# I guess that is all there is to property files

參考資料

國際標準

[osi−model]

OSI (Open System Interconnect) 模型

http://www.iso.org

http://www.instantweb.com/foldoc/foldoc.cgi?OSI

[xml10−spec]

W3C XML 1.0 規范

http://www.w3.org/XML/

[unicode]

Unicode

http://www.unicode.org

許可

[gnu−lgpl]

The GPL (Gnu Lesser Public License)

http://www.gnu.org/licenses/lgpl.html

[gnu−fdl]

The Gnu FDL (Free Documentation License), the license used for this documentation

http://www.gnu.org/licenses/fdl.html

開源項目

[bc]

Binarycloud

http://www.binarycloud.com

http://binarycloud.tigris.org

[w3c−tidy]

HTMLTidy, a W3C (x)HTML and XML syntax checker and code beautifier

http://www.w3c.org/People/Ragget/tidy/

[phpdoc]

PHPDoc 項目

http://www.phpdoc.de

[phpclasses]

Manuel Lemos的 PHPClasses 資源庫

http://www.phpclasses.org

[pear]

PEAR (Php Extension Archive Repository) PHP擴展庫

http://pear.php.net

[ant]

Ant, a Java Build Tool, the main inspiration for Phing

http://ant.apache.org

[gnumake]

GNU make, an inspiration for Phing

http://www.gnu.org/software/make/make.html

[pollo]

Pollo, a visual editor for XML files. A schema to edit phing build files is shipped with Phing.

http://pollo.sourceforge.net

[gingerall]

GingerAlliance − Home Of Sablotorn

http://www.gingerall.com

[php]

PHP 官方主頁 PHP Hypertext Preprocessor

http://www.php.net

[gnu]

GNU (GNU's Not Unix)組織

http://www.gnu.org

[phing]

Phing (PHing Is Not Gnumake) 主頁

http://phing.info

[cvs−howto]

Short manuals for CVS

http://www.ucolick.org/~de/CVSbeginner.html

[cvs−tigris]

CVS and tigris.org

http://binarycloud.tigris.org/project/www/docs/ddUsingCVS_command−line.html

其他資源

[javadoc]

Sun Javadoc

http://java.sun.com/j2se/javadoc/

[zend]

Zend Technologies, Ltd.

http://www.zend.com

手冊

M

T

T

P

posted on 2010-04-08 15:08 暗夜教父 閱讀(4692) 評論(0)  編輯 收藏 引用 所屬分類: Visual Studio

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2009年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲日本中文字幕免费在线不卡| 日韩写真视频在线观看| 久热精品视频在线观看一区| 麻豆国产精品va在线观看不卡| 伊人春色精品| 欧美亚日韩国产aⅴ精品中极品| 久久综合国产精品| 亚洲欧美激情精品一区二区| 亚洲精品久久久久久久久久久久久| 亚洲女与黑人做爰| 一区二区三区日韩精品| 亚洲精品乱码久久久久久蜜桃91 | 一本色道久久综合亚洲精品高清| 欧美视频在线观看一区| 欧美激情亚洲国产| 男女精品网站| 欧美精品综合| 欧美三日本三级三级在线播放| 亚洲区中文字幕| 欧美日韩一视频区二区| 欧美日韩一区不卡| 久久嫩草精品久久久精品| 久久精品亚洲| 羞羞漫画18久久大片| 亚洲韩日在线| 日韩一级免费观看| 亚洲欧美日本日韩| 欧美亚洲一级片| 久久精品国产亚洲一区二区三区| 欧美在线观看视频一区二区三区| 久久av一区二区| 久久一二三区| 欧美成人午夜剧场免费观看| 女主播福利一区| 亚洲靠逼com| 亚洲女人天堂成人av在线| 欧美一区二区三区在线视频| 久久九九免费视频| 欧美精品18+| 国产精品视频福利| 伊人天天综合| 亚洲一区二区免费| 欧美亚洲综合久久| 欧美14一18处毛片| 久热精品视频| 亚洲精品欧洲| 久久福利影视| 久久九九免费视频| 欧美日韩国产一级片| 欧美精品亚洲| 国产精品麻豆成人av电影艾秋| 国产精品99一区| 国产午夜精品麻豆| 影音先锋日韩精品| 亚洲午夜视频在线观看| 久久午夜精品| 亚洲天堂av在线免费| 久久精品成人欧美大片古装| 欧美大片在线观看| 国内不卡一区二区三区| 一区二区三区精品在线| 亚洲在线成人精品| 欧美激情一区三区| 亚洲欧美日韩专区| 欧美极品欧美精品欧美视频| 国产日韩精品视频一区| 亚洲私拍自拍| 欧美成人久久| 欧美在线观看网站| 欧美视频日韩视频| 亚洲国产日韩在线| 性欧美xxxx视频在线观看| 91久久在线视频| 午夜免费在线观看精品视频| 一本久久a久久免费精品不卡| 欧美日韩一卡| 国产精品久久久久久一区二区三区| 欧美日韩国产系列| 亚洲国产成人精品女人久久久| 亚洲欧美精品在线观看| 久久欧美肥婆一二区| 久久色在线播放| 亚洲一区二区三区在线观看视频| 亚洲一区二区三区国产| 欧美日韩精品中文字幕| 亚洲国产欧美一区二区三区丁香婷| 久久国产精品色婷婷| 亚洲自拍偷拍一区| 欧美日本韩国一区| 国产亚洲精品aa| 久久国产一区二区三区| 午夜久久一区| 国产午夜亚洲精品理论片色戒| 亚洲一区二区3| 亚洲美女视频网| 国产精品99久久久久久白浆小说 | 国产精品男女猛烈高潮激情| 一区二区亚洲精品国产| 久久久人人人| 欧美一进一出视频| 1769国内精品视频在线播放| 美国十次了思思久久精品导航| 欧美一区二区在线| 国内成+人亚洲+欧美+综合在线| 久久亚洲一区二区三区四区| 亚洲精品一区二区三区不| 欧美日韩一区二区三区在线| 亚洲女人天堂成人av在线| 亚洲欧美激情在线视频| 国产嫩草影院久久久久| 久久婷婷影院| 欧美日韩成人在线播放| 亚洲一区二区三区免费视频 | 亚洲性感激情| 亚洲国产精品黑人久久久| 欧美日韩精品福利| 欧美特黄一区| 在线精品国产欧美| 亚洲一区区二区| 欧美一区二区黄| 久久人人爽人人爽爽久久| 一本色道久久综合狠狠躁篇怎么玩 | 欧美精品在线视频| 欧美午夜一区二区福利视频| 欧美一区二区三区喷汁尤物| 久久人体大胆视频| 亚洲女人天堂av| 欧美成年视频| 欧美影院精品一区| 欧美激情国产日韩| 欧美在线播放一区| 欧美激情在线有限公司| 久久精品一区二区三区中文字幕| 欧美91精品| 久热精品在线视频| 午夜一区在线| 日韩视频在线观看| 国产精品男女猛烈高潮激情| 亚洲视频999| 男女av一区三区二区色多| 久久久精品免费视频| 欧美日韩激情网| 亚洲成人在线视频播放 | 久久久青草婷婷精品综合日韩| 欧美 日韩 国产 一区| 尤物yw午夜国产精品视频明星 | 久久久精品久久久久| 欧美三级资源在线| 亚洲国产精品福利| 亚洲成人在线免费| 久久精品一区二区三区中文字幕| 午夜久久久久久| 欧美日韩伦理在线| 91久久黄色| 欧美日本免费| 久久精品导航| 国产欧美日韩视频| 午夜一级久久| 久久精品国产免费看久久精品| 国产精品激情av在线播放| 快射av在线播放一区| 欧美体内谢she精2性欧美| 亚洲高清久久网| 91久久国产精品91久久性色| 久久人人爽人人| 欧美激情第六页| 亚洲另类在线视频| 欧美日韩精品一区二区三区四区| 亚洲乱亚洲高清| 亚洲一区区二区| 国产欧美精品日韩| 欧美一区二区精品久久911| 一区二区亚洲| 欧美在线你懂的| 亚洲国产cao| 亚洲人精品午夜在线观看| 欧美激情 亚洲a∨综合| 国产婷婷一区二区| 久久精品日韩| 亚洲第一视频| 亚洲欧美激情视频| 国产一区二区三区四区五区美女 | 亚洲福利专区| 亚洲欧美在线aaa| 黄色一区二区在线观看| 国产亚洲欧美激情| 亚洲欧美日韩国产综合在线| 欧美欧美在线| 亚洲一区免费在线观看| 久久先锋影音| 国产日韩欧美高清免费| 亚洲综合丁香| 欧美国产日本| 亚洲五月婷婷| 欧美午夜a级限制福利片| 99在线|亚洲一区二区| 一区二区三区不卡视频在线观看| 蜜臀av性久久久久蜜臀aⅴ| 亚洲第一页中文字幕| 99国产精品久久久久老师|