• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    為加速 PHP 程序而努力

    發布: 2007-7-14 19:53 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 8次 | 進入軟件測試論壇討論

    領測軟件測試網


    動態網站的內容加速顯示十分重要,本文通過對 PHP 幾個函數的深入討論,提出了 PHP 網頁壓縮和緩沖的解決方案

    一、介紹幾個控制 PHP 輸出的函數

    PHP4 采用了緩沖機制,在你決定發送以前,所有內容只是存在于緩沖中,而不是直接發送給瀏覽器,雖然你可以用 header 和 setcookie 函數來實現,但是這兩個函數相比于功能強大的輸出函數來說只是一點“雕蟲小技”。讓我們來看看這些函數的真本事:

    void ob_start(void);

    本函數告訴 PHP 處理器把所有輸出重定向到內部緩沖,調用這個函數后,就不會有輸出到瀏覽器。

    string ob_get_contents(void);

    本函數把輸出緩沖返回到一個字符串,你可以用來把堆積起來的輸出一起發送到瀏覽器。當然要先關掉緩沖。

    int ob_get_length(void);

    本函數返回輸出緩沖的長度。

    void ob_end_clean(void);

    本函數清除并關閉緩沖。在輸出到瀏覽器之前你需要使用這個函數。

    void ob_implicit_flush ([int flag])

    本函數用來控制隱式緩沖瀉出,缺省為 off,如果打開時,對每個 print/echo 或者輸出命令的結果都發送到瀏覽器。

    二、采用輸出控制來壓縮 PHP 的輸出

    在開始之前,要保證你的 PHP4 編譯時支持 Zlib。
    首先,初始化輸出緩沖:

    <?php
    ob_start();
    ob_implicit_flush(0);
    ?>

    然后產生所有的輸出內容。

    <?php
    print("本例為壓縮輸出!");
    ?>
    頁面生成以后,采用:

    <?php
    $contents = ob_get_contents();
    ob_end_clean();
    ?>

    還要檢查瀏覽器是否支持壓縮數據,我們采用在變量 $HTTP_ACCEPT_ENCODING 中檢查 "gzip, deflate"的辦法:

    <?php
    if(ereg('gzip, deflate',$HTTP_ACCEPT_ENCODING)) {
    // 產生 gzip 后的內容
    } else {
    echo $contents;
    }
    ?>

    下面我們分析怎樣產生 gzip 輸出:

    <?php
    // 告訴瀏覽器下面接收的是 gzip 數據。
    header("Content-Encoding: gzip");
    // 顯示 gzip 文件的文件頭
    // 只要一次就夠了
    echo "x1fx8bx08x00x00x00x00x00";
    // 計算長度和 CRC 校驗碼
    $Size = strlen($contents);
    $Crc = crc32($contents);
    // 壓縮數據
    $contents = gzcompress($contents, 9);
    // 不能直接在這里輸出內容,因為還沒有寫入 CRC 呢!
    $contents = substr($contents, 0, strlen($contents) - 4);
    echo $contents;
    gzip_PrintFourChars($Crc);
    gzip_PrintFourChars($Size);
    function gzip_PrintFourChars($Val) {
    for ($i = 0; $i < 4; $i ++) {
    echo chr($Val % 256);
    $Val = floor($Val / 256);
    }
    }
    ?>

    三、緩沖 PHP 的輸出

    在 PHP4 里能很容易的實現緩沖,我們來看例子:

    <?php
    // 對請求的 URI 產生唯一的文件名。
    $cached_file=md5($REQUEST_URI);
    if((!file_exists("/cache/$cached_file"))||(!is_valid("/cache/$cached_file"))) {
    ob_start();
    ob_implicit_flush(0);
    // 在這里輸出緩沖
    $contents = ob_get_contents();
    ob_end_clean();
    $fil=fopen($cached_file,"w+");
    fwrite($fil,$contents,$strlen($contents));
    fclose($fil);
    }

    readfile($cached_file);
    ?>

    四、結論

    PHP 輸出緩沖函數在操作腳本輸出方面十分有用,把緩沖壓縮后輸出能減少 80% 的輸出時間,這對于存取其他數據資源(例如數據庫或者 XML)來說,也是一個很好的緩沖機制。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>