PHP自動更新網站

來源:互聯網
上載者:User

標籤:rem   用戶端   page   cto   ack   decode   響應   rect   let   

目前軟體開發主流越來越傾向於B/S模式,不同於C/S模式的軟體,B/S模式下的WEB程式自動更新是個麻煩問題。

本人利用PHP下載遠程檔案和ZIP類,寫了一個簡單的自動更新DEMO,供大家參考。

服務端目錄結構
|data    |--20140918.zip|--index.php

其中 data 檔案夾用來存放補丁包,index.php 檔案用來響應版本資料給用戶端。

index.php
<?phpsleep(3);header(‘Content-Type:application/json;utf-8‘);echo json_encode(array(    ‘20140918‘ => array(        ‘version‘ => 20140920,        ‘desc‘ => ‘BUG修正,緩衝系統‘,        ‘url‘ => ‘http://‘ . $_SERVER[‘HTTP_HOST‘] . $_SERVER[‘REQUEST_URI‘] . ‘/data/20140918.zip‘    )));exit();

20140918 對應的是用戶端版本號碼,20140920 對應的是服務端版本號碼,desc 是本次補丁的描述,url 則是補丁包

用戶端目錄結構
|tmp|--config.php|--Zip.php|--index.php

config.php 為設定檔,儲存本地版本資訊,Zip.php 為ZIP操作類(從服務端下載的補丁包均為zip格式),index.php 為自動更新程式(只是為了方便,實際中可以寫個方法出來)

index.php
<?phpob_implicit_flush(true);$begin = microtime(true);//檢查更新,載入本地版本號碼$config = require(__DIR__ . ‘/config.php‘);$server = ‘http://localhost/version‘;echo ‘串連補救伺服器...<br/>‘;ob_flush();$versions = json_decode(file_get_contents($server), true);if (!isset($versions[$config[‘version‘]])) {    echo ‘當前已是最新版本!‘;} else {    echo ‘目前的版本:<b>‘, $config[‘version‘], ‘</b> 伺服器版本:<b>‘,     $versions[$config[‘version‘]][‘version‘], ‘</b><br/>‘;    ob_flush();    //開始下載    $remote_fp = fopen($versions[$config[‘version‘]][‘url‘], ‘rb‘);    if(!is_dir(__DIR__.‘/tmp‘)) mkdir(__DIR__.‘/tmp‘);    $tmp = __DIR__ . ‘/tmp/‘ . date(‘YmdHis‘) . ‘.zip‘;    $local_fp = fopen($tmp, ‘wb‘);    echo ‘開始下載...<br/>‘;    ob_flush();    while (!feof($remote_fp)) {        fwrite($local_fp, fread($remote_fp, 128));    }    fclose($remote_fp);    fclose($local_fp);    echo ‘下載完成,準備解壓<br/>‘;    ob_flush();    require(__DIR__ . ‘/Zip.php‘);    $zip = new Zip();    $zip->extra($tmp, __DIR__);    echo ‘解壓完成,準備刪除臨時檔案<br/>‘;    ob_flush();    //刪除補丁包    unlink($tmp);    echo ‘臨時檔案刪除完畢<br/>‘;    ob_flush();    //更新本地版本號碼    $content = file_get_contents(__DIR__.‘/config.php‘);    $content = str_replace($config[‘version‘],$versions[$config[‘version‘]][‘version‘],$content);    file_put_contents(__DIR__.‘/config.php‘,$content);    echo ‘更新完成!耗時‘,microtime(true) - $begin,‘秒<br/>‘;    ob_flush();    ob_end_clean();    exit();}
config.php 
<?phpreturn array(    ‘version‘ => ‘20140918‘);
Zip.php
<?php/** * @version 1.0 * 壓縮、解壓縮類 */class Zip{    /**     * 打包     * @param $path     * @param $save     */    public static function archive($path, $save)    {        $zip = new ZipArchive();        if ($zip->open($save, ZipArchive::OVERWRITE) === true) {            self::addZip($path, $zip);            $zip->close();        }    }    /**     * 添加檔案或檔案夾到zip對象     * @param string $path     * @param ZipArchive $zip     */    private static function addZip($path, $zip)    {        $handler = opendir($path);        while (($file = readdir($handler)) !== false) {            if ($file != ‘.‘ && $file != ‘..‘) {                if (is_dir($path . DIRECTORY_SEPARATOR . $file)) {                    self::addZip($path . DIRECTORY_SEPARATOR . $file, $zip);                } else {                    $zip->addFile($path . DIRECTORY_SEPARATOR . $file);                }            }        }        closedir($handler);    }    /**     * 解壓檔案     * @param string $file 壓縮檔路徑     * @param string $path 解壓路徑,為空白則以檔案名稱為路徑     */    public static function extra($file, $path = null)    {        if (!isset($path)) {            $array = explode(‘.‘, $file);            $path = reset($array);        }        $zip = new ZipArchive();        if ($zip->open($file) === true) {            $zip->extractTo($path);            $zip->close();        }    }}

本文唯寫了一個很簡單的自動更新程式,只是為了說明更新程式的基本思路。還有很多細節方面可以定製的。

PHP自動更新網站

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.