Rev 906 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/php<?php/*QBPWCF, Quick Build PHP website Component base on Fedora Linux.Copyright (C) 2015~2024 Min-Jhin,ChenThis file is part of QBPWCF.QBPWCF is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.QBPWCF is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with QBPWCF. If not, see <http://www.gnu.org/licenses/>.*//*逐一bytes比對兩個檔案有哪些bytes不同*/#使用命名空間qbpwcfnamespace qbpwcf;#以該檔案的實際位置的 lib path 為 include path 首位exec("cd ".pathinfo(__FILE__)["dirname"]."/../lib/qbpwcf;pwd;",$output,$status);set_include_path($output[0].PATH_SEPARATOR.get_include_path());#匯入外部套件include("allInOne.php");#函式說明:#抓取命令列的參數.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["argu"],使用的參數陣列.#$result["content"],要回傳的參數陣列.#$result["count"],參數的數量.#必填參數:#無#可省略參數:#$conf["echo"],"true"代表要將抓到的參數一個個印出來,"false"代表用回傳的方式,預設為"false".$conf["echo"]="false";$getArgu=cmd::getArgu($conf);unset($conf);#如果抓參數出錯if($getArgu["status"]==="false"){#印出內容var_dump($getArgu);#結束執行exit;}#如果參數數量不等於3if($getArgu["count"]!==3){#印出內容var_dump($getArgu);#結束執行exit;}#取得檔案A名稱$fileNameA=$getArgu["content"][1];#取得檔案B名稱$fileNameB=$getArgu["content"][2];#檔案A的pointer$fhA=fopen($fileNameA,"r");#檔案B的pointer$fhB=fopen($fileNameB,"r");#位置索引$addr=0;#無窮迴圈while(true){#位置從1開始,且每次+1.$addr++;#若檔案A尚未結束if(!feof($fhA)){#取得 1 bytes$bytesA=fread($fhA,1);}#若檔案B尚未結束if(!feof($fhB)){#取得 1 bytes$bytesB=fread($fhB,1);}#兩邊都有資料時if( isset($bytesA) && isset($bytesB) ){#解析A成16進位大小文數字$bytesA=strtoupper(sprintf("%02s",base_convert(ord($bytesA),10,16)));#解析B成16進位大小文數字$bytesB=strtoupper(sprintf("%02s",base_convert(ord($bytesB),10,16)));#如果有差異if($bytesA!==$bytesB){echo "於第 ".$addr." 個bytes處相異,左方為:".$bytesA.";右方為:".$bytesB.PHP_EOL;unset($bytesA);unset($bytesB);continue;}}#單邊有資料else{if(isset($bytesA)){#解析A成16進位大小文數字$bytesA=strtoupper(sprintf("%02s",base_convert(ord($bytesA),10,16)));echo "於第 ".$addr." 個bytes處相異,左方為:".$bytesA.";右方不存在".PHP_EOL;unset($bytesA);continue;}else if(isset($bytesB)){#解析B成16進位大小文數字$bytesB=strtoupper(sprintf("%02s",base_convert(ord($bytesB),10,16)));echo "於第 ".$addr." 個bytes處相異,左方不存在;右方為:".$bytesB.PHP_EOL;unset($bytesB);continue;}else{break;}}}?>