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

教父的告白
一切都是紙老虎
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   管理



<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用鏈接

留言簿(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>
            99xxxx成人网| 久久免费99精品久久久久久| 欧美中文字幕不卡| 久久综合给合久久狠狠色| 亚洲免费高清| 亚洲精品日韩精品| 午夜激情久久久| 欧美在线一二三四区| 欧美中文字幕精品| 欧美凹凸一区二区三区视频| 亚洲高清一区二区三区| 麻豆成人小视频| 亚洲丁香婷深爱综合| 亚洲精品资源美女情侣酒店| 国产精品99久久久久久人| 午夜精品视频网站| 麻豆精品在线播放| 国产精品a久久久久久| 国产三级欧美三级日产三级99| 国内外成人免费视频| 亚洲伦伦在线| 久久九九国产精品| 亚洲精品欧美一区二区三区| 午夜精品久久久久影视| 欧美成人精品| 国产有码在线一区二区视频| 一区二区三区四区五区在线| 久久久久91| 一区二区三区精品| 欧美88av| 加勒比av一区二区| 亚洲欧美另类久久久精品2019| 女女同性女同一区二区三区91| 一二三区精品| 欧美r片在线| 国内久久视频| 欧美一区成人| 一本色道久久88综合亚洲精品ⅰ| 久久久久久69| 国产精品一区免费视频| 一区二区日韩伦理片| 免费观看欧美在线视频的网站| 亚洲网在线观看| 欧美日韩国产电影| 亚洲欧洲一区二区在线播放| 久久久久久欧美| 亚洲欧美久久久| 欧美日韩在线高清| 亚洲美女精品一区| 亚洲高清不卡在线观看| 巨胸喷奶水www久久久免费动漫| 国产欧美一级| 欧美在线日韩在线| 亚洲欧美另类在线观看| 国产精品电影在线观看| 一区二区三区国产精品| 欧美激情精品| 欧美电影在线观看完整版| 亚洲激情小视频| 欧美1区2区3区| 欧美bbbxxxxx| 一级成人国产| 亚洲午夜电影在线观看| 99天天综合性| 一区二区久久| 欧美日韩综合在线免费观看| 一区二区三区精品视频| 亚洲激情网址| 欧美日韩一区二区三区视频| av成人免费观看| 妖精成人www高清在线观看| 欧美视频在线观看免费| 亚洲欧美日韩精品久久奇米色影视| 一区二区三区高清在线观看| 国产美女精品| 久久字幕精品一区| 欧美a级一区| 亚洲综合色丁香婷婷六月图片| 亚洲淫片在线视频| 国产在线精品一区二区夜色| 欧美 日韩 国产 一区| 欧美精品二区| 欧美影院视频| 老司机午夜精品视频在线观看| 亚洲精品美女久久7777777| 一区二区欧美在线观看| 国产一区二区三区不卡在线观看| 免费亚洲网站| 国产精品高潮呻吟视频| 六月婷婷一区| 欧美午夜视频一区二区| 久久久综合免费视频| 欧美国产日韩免费| 久久疯狂做爰流白浆xx| 欧美大片在线观看一区| 亚洲自拍偷拍一区| 久久在线免费视频| 新狼窝色av性久久久久久| 麻豆精品视频在线| 欧美在线free| 欧美大片一区二区| 久久久久国色av免费看影院| 欧美国产日韩视频| 老**午夜毛片一区二区三区| 欧美激情精品久久久久久变态| 欧美一区二区三区电影在线观看| 免费在线亚洲欧美| 久久久综合激的五月天| 国产精品美女www爽爽爽| 亚洲国产99| 在线成人激情视频| 性色一区二区| 午夜一区在线| 欧美先锋影音| 亚洲精品一区久久久久久| 在线观看国产日韩| 欧美一区二区精品| 午夜在线成人av| 欧美日韩国产在线一区| 欧美激情91| 亚洲黄色在线看| 久久精品一二三| 久久九九久精品国产免费直播| 欧美午夜精品理论片a级按摩| 亚洲国产欧美日韩精品| 在线成人小视频| 久久er99精品| 久久高清福利视频| 久久国产免费看| 国产日韩欧美在线| 亚洲精品美女91| 亚洲精品小视频| 欧美 日韩 国产在线| 欧美成人一区二区| 激情偷拍久久| 久久久久久久999精品视频| 欧美一区二区在线| 国产精品视频久久久| 亚洲午夜精品久久久久久浪潮| 制服诱惑一区二区| 国产精品vip| 小处雏高清一区二区三区 | 欧美刺激午夜性久久久久久久| 黄色资源网久久资源365| 欧美一区三区二区在线观看| 久久久www成人免费无遮挡大片 | 亚洲精品1234| 美国十次成人| 亚洲人成7777| 亚洲资源av| 国内精品99| 欧美激情久久久| 一本久久青青| 久久精品视频导航| 亚洲国产欧美国产综合一区| 欧美1区2区视频| 亚洲一区免费视频| 久久亚洲精品中文字幕冲田杏梨 | 国产乱肥老妇国产一区二| 性8sex亚洲区入口| 亚洲第一页中文字幕| 中文在线一区| 国产日韩综合一区二区性色av| 久久精品99| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区美女视频在线观看免费| 国产欧美日韩中文字幕在线| 久久久久久久激情视频| 夜夜嗨av一区二区三区免费区| 久久电影一区| 一区二区三区欧美亚洲| 国产精品综合视频| 欧美超级免费视 在线| 亚洲欧美中文在线视频| 欧美激情视频免费观看| 亚洲欧洲99久久| 亚洲欧洲三级| 国产日韩在线看| 欧美日韩国产va另类| 久久久久久久尹人综合网亚洲| 亚洲精品国产拍免费91在线| 久久久国际精品| 亚洲深爱激情| 亚洲国产天堂久久综合| 国产麻豆精品视频| 欧美日韩黄色一区二区| 久久一综合视频| 午夜宅男欧美| 中文国产成人精品| 亚洲黄色av| 久久中文字幕一区| 欧美激情 亚洲a∨综合| 欧美一级在线亚洲天堂| 亚洲国产视频a| 精品成人一区二区三区| 国产精品综合久久久| 欧美日韩一区二区在线观看| 裸体女人亚洲精品一区| 久久大综合网| 久久www成人_看片免费不卡|