亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

使用PHP的Phing項目部署工具

2020-03-22 19:25:45
字體:
來源:轉載
供稿:網友
  • Phing 是一個基于 Apache Ant 開源項目的 PHP 項目構建工具。

    “Phing”是一個遞歸的縮寫詞,全稱為“Phing Is Not GNU make”,是 PHP 自動部署html' target='_blank'>應用程序的一種方法。它還可以讓我們與 SVN 服務器集成,還可以采用 PHPUnit 自動化方式執行單元測試,并且還可以實現文件復制這樣的安裝、部署任務。

    Phing 官方網站是 http://www.phing.info/。

    一、安裝:

    Phing 隨 PERA 擴展包發布,需要使用 PEAR 包管理程序來安裝。

    執行命令:

    pear channel-discover pear.phing.info
    pear install --alldeps phing/phing

    PEAR 可以與 SVN(Subversion) 進行集成,但 Phing 對 SVN 的支持是可選的,所以必須獲得 PEAR 包 VersionControl_SVN。但用 pear install pear/VersionControl_SVN 命令安裝的話,由于它還是個處于測試狀態的包,我們不能成功安裝。
    所以,必須使用完整的頻道 URI 來安裝它:

    pear install channel://pear.php.net/VersionControl_SVN-0.3.3

    二、Phing 部署腳本 build.xml 文件

    Phing 使用了 XML 格式的配置文件來定義部署腳本,從中可以獲得工程信息,定義操作組(target)。作為示例,我們將會創建一個基本的 Phing 部署腳本,其中定義了4個目標:

    1,工程(project)
    定義工程名字,是 build.xml 文件的最外層標簽。比如:

    <project name="MyPhingPrj" basedir="." default="install">

    name定義工程名稱,還可以定義 basedir 等屬性。default 表示,當在命令行下運行 phing.exe 文件時,若不帶參數指定“目標”(Target),則以default的值指定的目標作為默認值。

    2,目標(target)
    build.xml 文件是以目標作為分組的,phing 命令也以目標作為部署腳本執行的起點。目標的定義標簽:
    <target name="……" depends="another_target1,another_target2"></target>
    目標之間可以互相依賴(depends),被依賴的目標會先被執行。當一個目標依賴多個目標的時候,目標名之間以英文半角逗號分隔。

    3,任務(task)
    任務即腳本的行為或動作,有許多標簽來定義。例如:
    <echo msg="……" /> 顯示提示信息
    <copy></copy> 拷貝文件夾或文件
    <mkdir dir="……" /> 創建文件夾
    <delete dir="……" /> 刪除文件夾
    <exec command="……" dir="……" /> 執行外部腳本命令
    <phpunit></phpunit> 、執行PHPUnit單元測試
    <svnupdate svnpath="……" todir="……" /> 操作SVN版本控制服務

    4,其它

    屬性(property):
    <property name="……" value="……" />

    數據類型(Types):
    除過 strings, integer, booleans等,還有:

    定義文件集:
    <fileset dir="……" id="……"></fileset>
    dir 的值中,使用**表示遞歸包含,而單個*則表示不是遞歸包含的。這樣便創建了文件的一種數組,它們可以在被其它任務,比如復制任務所使用。

    定義文件列表:
    <filelist dir="base/" files="file1.txt,file2.txt,file3.txt"/> 或
    <filelist dir="base/" listfile="files_to_process.txt"/>

    一個示例 build.xml 部署腳本文件:

    <?xml version="1.0" encoding="UTF-8"?><project name="MyPhingPrj" basedir="." default="install"><property name="package" value="${phing.project.name}" override="true" /><property name="installdir" value="install" override="true" /><property name="srcdir" value="${project.basedir}" override="true" /><!-- ============================================  --><!-- Fileset: codefiles                            --><!-- ============================================  --><fileset dir="${srcdir}" id="codefiles"><include name="**" /></fileset><!-- ============================================  --><!-- Target: prepare                               --><!-- ============================================  --><target name="prepare"><echo msg="Making directory ${installdir}" /><mkdir dir="${installdir}" /></target><!-- ============================================  --><!-- Target: get                                   --><!-- ============================================  --><target name="get"><svnupdate svnpath="file://D:/svn/myfirstrepo" todir="${srcdir}" /></target><!-- ============================================  --><!-- Target: phpunit                               --><!-- ============================================  --><target name="phpunit"><phpunit haltonfailure="true" printsummary="true"><batchtest><fileset dir="./tests"><include name="*Test.php" /></fileset></batchtest></phpunit></target><!-- ============================================  --><!-- Target: install                               --><!-- ============================================  --><target name="install" depends="phpunit,prepare"><copy todir="${installdir}" overwrite="true"><fileset refid="codefiles" /></copy><copy file="./build.xml" tofile="./${installdir}/build.xml" overwrite="true" /></target></project>

    在以上 build.xml 部署腳本文件中,定義了 4 個目標:

    - prepare 目標做一些初始準備工作,創建一個文件夾;
    - get 目標將從Subversion存儲庫中導出最新版本的文件;
    - phpunit 目標將執行單元測試,它會從 tests 文件夾尋找與 *Test.php 文件名匹配的文件,調用 phpunit 進行單元測試。自然需要首先安裝了 PHPUnit 相關類庫;
    - install 目標將會把文件安裝到指定文件夾(例如網站的跟文件夾),本例是拷貝到 install 文件夾。還可以拷貝單個文件;

    其中,install 是默認執行的目標,它依賴 phpunit 和 prepare 兩個目標。目標 phpunit 沒有依賴別的目標。目標 get 沒有被任何目標依賴,所以除過在 phing 命令行后指定,它不會自動被別的目標調用執行。

    Phing 有些特性需要操作系統的支持,比如文件的打包和壓縮任務,只能在 Unix/Linux 下運行:
    <tar destfile="./build.tar.gz" compression="gzip">
    <fileset dir="./install">
    <include name="*" />
    </fileset>
    </tar>

    三、執行 Phing

    在 DOS 命令行或 Linux 的 Shell 下執行 Phing 命令,格式:

    phing [目標名]

    不指定目標名時,會執行工程中指定的默認目標。

    默認地,Phing 會在當前路徑下查找一個名叫 build.xml 的 XML 文件。

    本例中,運行 phing 或 phing install 命令,會把 id 等于“codefiles”的 fileset 下定義的所有文件,根據 todir 的值,拷貝到指定文件夾下。

    C:/Program Files/Zend/Apache2/htdocs/phing>phing install
    Buildfile: C:/Program Files/Zend/Apache2/htdocs/phing/build.xml

    BUILD FAILED
    Error reading project file [wrapped: C:/Program Files/Zend/Apache2/htdocs/phing/build.xml:13:18: No memory]
    Total time: 0.4898 seconds

    運行以上命令,并沒有成功,報告“…… No memory”錯誤,即內存不足。需要內存大小,是根據 build.xml 文件的大小來確定的。

    解決內存不足的問題,可以修改 php.ini 中的 memory_limit 的值:www.it165.net

    memory_limit = 128M ;Maximum amount of memory a script may consume (128MB)

    改為 memory_limit = 256M,重啟 Web 服務。再次運行 phing 命令:

    C:/Program Files/Zend/Apache2/htdocs/phing>phing
    Buildfile: C:/Program Files/Zend/Apache2/htdocs/phing/build.xml

    MyPhingPrj > phpunit:
    [phpunit] Tests run: 2, Failures: 0, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.07960 s

    MyPhingPrj > prepare:
    [echo] Making directory install
    [mkdir] Created dir: C:/Program Files/Zend/Apache2/htdocs/phing/install

    MyPhingPrj > install:
    [copy] Created 2 empty directories in C:/Program Files/Zend/Apache2/htdocs/phing/install
    [copy] Copying 5 files to C:/Program Files/Zend/Apache2/htdocs/phing/install
    [copy] Copying 1 file to C:/Program Files/Zend/Apache2/htdocs/phing/install

    BUILD FINISHED
    Total time: 1.4857 second
    附錄-1:

    運行命令 pear channel-discover pear.phing.info:

    C:/Program Files/Zend/ZendServer/bin>pear channel-discover pear.phing.info
    Adding Channel "pear.phing.info" succeeded
    Discovery of channel "pear.phing.info" succeeded

    附錄-2:

    運行命令 pear install --alldeps phing/phing:

    C:/Program Files/Zend/ZendServer/bin>pear install --alldeps phing/phing
    Failed to download pear/VersionControl_SVN within preferred state "stable", latest release is version 0.3.3, stability "alpha",
    use "channel://pear.php.net/VersionControl_SVN-0.3.3" to install Failed to download pear/Console_ProgressBar within preferred state "stable",
    latest release is version 0.5.2beta, stability "beta", use "channel://pear.php.net/Console_ProgressBar-0.5.2beta" to install
    Failed to download pear/XML_Serializer within preferred state "stable", latest release is version 0.20.0, stability "beta",
    use "channel://pear.php.net/XML_Serializer-0.20.0" to install
    WARNING: "pear/HTML_Common" is deprecated in favor of "pear/HTML_Common2"
    phing/phing can optionally use package "pear/VersionControl_SVN" (version >= 0.3.2)
    pear/PHP_CompatInfo can optionally use package "pear/Console_ProgressBar" (version >= 0.5.2beta)
    pear/PEAR_PackageFileManager_Plugins requires package "pear/XML_Serializer" (version >= 0.18.0)
    pear/PEAR_PackageFileManager requires package "pear/PEAR_PackageFileManager_Plugins"
    pear/PEAR_PackageFileManager2 requires package "pear/PEAR_PackageFileManager_Plugins"
    downloading phing-2.4.1.tgz ...
    Starting to download phing-2.4.1.tgz (365,217 bytes)
    ........done: 365,217 bytes
    downloading phingdocs-2.4.1.tgz ...
    Starting to download phingdocs-2.4.1.tgz (114,405 bytes)
    ...done: 114,405 bytes
    downloading xdebug-2.1.0.tgz ...
    Starting to download xdebug-2.1.0.tgz (301,354 bytes)
    ...done: 301,354 bytes
    downloading PHP_CompatInfo-1.9.0.tgz ...
    Starting to download PHP_CompatInfo-1.9.0.tgz (180,340 bytes)
    ...done: 180,340 bytes
    downloading Console_Table-1.1.3.tgz ...
    Starting to download Console_Table-1.1.3.tgz (9,253 bytes)
    ...done: 9,253 bytes
    downloading Console_Getargs-1.3.4.tgz ...
    Starting to download Console_Getargs-1.3.4.tgz (17,796 bytes)
    ...done: 17,796 bytes
    downloading File_Find-1.3.0.tgz ...
    Starting to download File_Find-1.3.0.tgz (7,941 bytes)
    ...done: 7,941 bytes
    downloading Event_Dispatcher-1.1.0.tgz ...
    Starting to download Event_Dispatcher-1.1.0.tgz (8,500 bytes)
    ...done: 8,500 bytes
    downloading Var_Dump-1.0.3.tgz ...
    Starting to download Var_Dump-1.0.3.tgz (16,342 bytes)
    ...done: 16,342 bytes
    downloading HTML_Table-1.8.3.tgz ...
    Starting to download HTML_Table-1.8.3.tgz (16,994 bytes)
    ...done: 16,994 bytes
    downloading Console_Color-1.0.2.tgz ...
    Starting to download Console_Color-1.0.2.tgz (4,727 bytes)
    ...done: 4,727 bytes
    downloading HTML_Common-1.2.5.tgz ...
    Starting to download HTML_Common-1.2.5.tgz (4,585 bytes)
    ...done: 4,585 bytes
    install ok: channel://pear.phing.info/phing-2.4.1
    install ok: channel://pear.phing.info/phingdocs-2.4.1
    66 source files, building
    WARNING: php_bin C:/Program Files/Zend/ZendServer/bin/./php.exe appears to have
    a suffix .exe, but config variable php_suffix does not match
    ERROR: The DSP xdebug.dsp does not exist.
    install ok: channel://pear.php.net/Console_Table-1.1.3
    install ok: channel://pear.php.net/Console_Getargs-1.3.4
    install ok: channel://pear.php.net/File_Find-1.3.0
    install ok: channel://pear.php.net/Event_Dispatcher-1.1.0
    install ok: channel://pear.php.net/Var_Dump-1.0.3
    install ok: channel://pear.php.net/Console_Color-1.0.2
    install ok: channel://pear.php.net/HTML_Common-1.2.5
    install ok: channel://pear.php.net/PHP_CompatInfo-1.9.0
    install ok: channel://pear.php.net/HTML_Table-1.8.3

    附錄-3:

    沒有安裝VersionControl_SVN-0.3.3 時,運行 phing:

    C:/Program Files/Zend/Apache2/htdocs/phing>phing t
    Buildfile: C:/Program Files/Zend/Apache2/htdocs/phing/build.xml
    [PHP Error] include_once(VersionControl/SVN.php): failed to open stream: No such file or directory [line 59 of
    C:/Program Files/Zend/ZendServer/bin/PEAR/phing/tasks/ext/svn/SvnBaseTask.php]
    [PHP Error] include_once(): Failed opening 'VersionControl/SVN.php' for inclusion
    (include_path='.;C:/Program Files/Zend/ZendServer/bin/pear;C:/Program Files/Zend/ZendServer/share/ZendFramework/library')
    [line 59 of C:/Program Files/Zend/ZendServer/bin/PEAR/phing/tasks/ext/svn/SvnBaseTask.php]

    BUILD FAILED
    Error reading project file [wrapped: The SVN tasks depend on PEAR VersionControl_SVN package being installed.]
    Total time: 7.4325 seconds

    附錄-4:

    安裝 VersionControl_SVN-0.3.3:

    C:/Program Files/Zend/ZendServer/bin>pear install channel://pear.php.net/VersionControl_SVN-0.3.3
    downloading VersionControl_SVN-0.3.3.tgz ...
    Starting to download VersionControl_SVN-0.3.3.tgz (33,630 bytes)
    .........done: 33,630 bytes
    install ok: channel://pear.php.net/VersionControl_SVN-0.3.3

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    国产香蕉97碰碰久久人人| 欧美尺度大的性做爰视频| 九九视频直播综合网| 国产成人精品一区二区三区| 97成人精品区在线播放| 亚洲精品中文字幕有码专区| 91精品国产成人www| 欧美日韩国产二区| 国产日韩欧美综合| 久久精彩免费视频| 亚洲国产精品一区二区久| 久久亚洲精品小早川怜子66| 欧美电影免费观看网站| 精品视频在线播放色网色视频| 中文字幕在线看视频国产欧美| 在线播放日韩av| 精品久久香蕉国产线看观看亚洲| 国产精品都在这里| 欧美日韩另类在线| 亚洲国产成人精品久久久国产成人一区| 久久免费福利视频| 国产精品国内视频| 中文字幕在线日韩| 77777亚洲午夜久久多人| 久久综合伊人77777尤物| 日韩毛片中文字幕| 日韩欧美aⅴ综合网站发布| 日韩在线免费视频| 亚洲精品女av网站| 夜夜狂射影院欧美极品| 91精品在线观看视频| 亚洲国产成人久久| 国产精品入口日韩视频大尺度| 久久免费国产视频| 在线一区二区日韩| 日韩国产精品视频| 国产一区在线播放| 亚洲电影免费在线观看| 日韩黄在线观看| 日韩女优人人人人射在线视频| 欧美韩国理论所午夜片917电影| 亚洲成人激情视频| 最近日韩中文字幕中文| 中文字幕日本欧美| 日韩一二三在线视频播| 91精品国产亚洲| 91免费电影网站| 中文字幕日韩在线播放| 亚洲精品欧美极品| 亚洲一级片在线看| 97精品国产91久久久久久| 久久精品久久久久久国产 免费| 少妇久久久久久| 国产精品第一区| 91免费视频网站| 久久婷婷国产麻豆91天堂| 日韩福利视频在线观看| 久久精品中文字幕| 国产精品第三页| 日韩电影中文字幕在线观看| 久久久久亚洲精品成人网小说| 97在线观看免费| 美日韩精品免费视频| 国产精品久久久久久久久久三级| 亚洲乱码国产乱码精品精| 精品国产91久久久久久| 国产精品久久网| 日本精品va在线观看| 欧美成人午夜激情| 狠狠操狠狠色综合网| 国产一区二区三区视频在线观看| 国产一区二区黄| 欧美日韩精品中文字幕| 日韩**中文字幕毛片| 久久久久久综合网天天| 久久久久久久久久亚洲| 国内精品视频一区| 欧美与欧洲交xxxx免费观看| 欧美大胆在线视频| 中文字幕av一区二区三区谷原希美| 日本一欧美一欧美一亚洲视频| 久久久精品久久久| 亚洲欧美国产精品专区久久| 亚洲精品久久久久久下一站| 亚洲欧美在线一区| 91精品国产91久久| 日韩h在线观看| 欧美激情在线视频二区| 日韩在线精品视频| 国产精品影院在线观看| 中文字幕亚洲自拍| 欧美一级电影久久| 国产一区二区在线播放| 久久久爽爽爽美女图片| 成人午夜在线影院| 午夜精品久久久久久久99黑人| 久久久影视精品| 亚洲乱亚洲乱妇无码| 97在线免费观看| 中日韩美女免费视频网站在线观看| 日韩精品极品在线观看| 精品国产视频在线| 久久久久成人网| 国产精品综合久久久| 国产精品入口福利| 日韩av电影手机在线观看| 亚洲高清久久久久久| 亚洲图片制服诱惑| 日韩精品久久久久久福利| 一本色道久久综合狠狠躁篇怎么玩| 精品久久久久久久久久久久| 欧美裸体视频网站| 不卡伊人av在线播放| 丝袜情趣国产精品| 免费97视频在线精品国自产拍| 精品欧美激情精品一区| 中文字幕视频一区二区在线有码| 另类视频在线观看| 国产激情视频一区| 这里只有精品丝袜| 欧美亚洲日本黄色| 久久久亚洲网站| 国产精品久久不能| 亚洲午夜久久久影院| 日韩av在线直播| 亚洲影院高清在线| 亚洲最新中文字幕| 日韩视频亚洲视频| 亚洲va欧美va在线观看| 最近免费中文字幕视频2019| 成人激情综合网| 国产精品亚发布| 亚洲精品电影网在线观看| 国产精品美女久久久免费| 97视频免费在线观看| 国产精品av在线播放| 中文日韩在线观看| 国产狼人综合免费视频| 日韩精品免费在线播放| 久久成年人视频| 国产一区二区日韩| 日韩精品在线视频| 亚洲最大中文字幕| 久久精品久久久久久国产 免费| 亚洲最新视频在线| 97超级碰碰人国产在线观看| 欧美激情精品久久久久久久变态| 伊人成人开心激情综合网| 亚洲国产精彩中文乱码av在线播放| 国产91在线高潮白浆在线观看| 亚洲欧洲在线观看| 色综合久综合久久综合久鬼88| 中国人与牲禽动交精品| 国产激情999| 欧美性xxxx极品hd欧美风情| 91色视频在线观看| 黄色一区二区三区| 久久久久在线观看| 精品一区二区三区三区| 中文综合在线观看| 国产精品视频网址| 97国产suv精品一区二区62| 精品国产区一区二区三区在线观看| 亚洲国内精品视频|