使用手順:
//関数の読み込み
include_once('phpCodeZip.php');
//暗号化されたファイルを作成します (sourceDir は暗号化される php ファイル ディレクトリ、targetDir は暗号化されたファイル ディレクトリです)
$encryption = new PhoCodeZip ('sourceDir','targetDir');
//行暗号化を実行
$encryption->zip();
phpCodeZip.php ソースコードのダウンロード
phpCodeZip.rar
phpCodeZip.php ソースコードの内容
コードは次のとおりです:
/*
* @license: MIT & GPL
*/
class PhpCodeZip{
//圧縮および暗号化されるソースフォルダー
var $sourceDir = '.'
//圧縮および暗号化されるフォルダー
; var $targetDir = 'tmp';
//暗号化するかどうか
var $bcompiler = true;
var $strip = true;
var $ sourcefilePaths = array();
//宛先フォルダーのファイルパスの配列
var $targetPaths = array();
//圧縮および暗号化前のフォルダーサイズ
var $sizeBeforeZip = null;
//圧縮および暗号化後のデータ
var $sizeAfterZip = null;
//改行の出力
var $newline = '';
/**
* コンストラクター
*
* @param string $sourceDir コピー元フォルダー
* @param string $targetDir コピー先フォルダー
* @param boolean $bcompiler 暗号化するかどうか
* @param boolean $strip 空白のコメントと改行を削除するかどうか
* @return ブール値
*/
public function PhpCodeZip($sourceDir='.',$targetDir=' tmp' , $bcompiler=true,$strip=true){
//初期変数を設定します
$this->sourceDir = $sourceDir;
$this->bcompiler = $bcompiler;
//ソースデータが存在するか確認します
if(!is_dir($this->sourceDir)){
die('指定されたソースフォルダー'.$this->sourceDir.' は存在しません。リセットしてください ') ;
} else {
//指定された宛先フォルダーが存在する場合は、それを切断して再試行します
if(is_dir($this->targetDir)){
echo '[宛先フォルダーを初期化]'.$ this -> newline.$this->newline;
$this->cleanDir($this->targetDir,true);
//ソースフォルダーと同じ構造の宛先フォルダーを作成します
mkdir( $this- >targetDir,0777);
$dir_paths = $this->getPaths($this->sourceDir,'*',GLOB_ONLYDIR);
foreach($dir_paths as $key => $path){
$path =explode('/',$path);
$path[0] = $this->targetDir; '=> '.join('/',$path);
mkdir(join('/',$path),0777);
}
//ソースフォルダーのファイルパスリストを取得します
$this->sourcefilePaths = $this->getPaths($this-> ; sourceDir,'*');
//対応する宛先のファイルパスリストを照合
foreach($this->sourcefilePaths as $key => $path){
//宛先フォルダーのファイルパスを設定
$パス=explode('/',$path);
$path[0] = $this->targetDir;
$this->targetPaths[$key] = join('/',$path); // 実行前にフォルダーのサイズを記録します
$this->sizeBeforeZip = $this->getSizeUnit($this->getDirSize($this->sourceDir),2);
echo $this-> $this->newline;
}
}
/**
* 圧縮と暗号化を実行します
* @return boolean
*/
public function zip(){
$this->newline = '';
echo '【暗号化処理の開始】( フォルダーサイズ: '.$this->sizeBeforeZip.')'.$this->newline.$this->newline;
//ソースファイルを圧縮します
foreach($this->sourcefilePaths as $key => $ path){
if(is_file($path)){
//ファイル情報を取得
$pathInfo = pathInfo($path);
echo 'ソースファイルを読み込む:'.$path.$this- >newline; /圧縮されたコンテンツを取得します
echo '=>空白の注釈を削除....'
if($this->strip && $pathInfo['extension'] == 'php'){
$fileAterZip = php_strip_whitespace ($path);
} else {
$fileAterZip = file_get_contents($path);
echo 'Finished'.$this->newline
//Get 圧縮されたコンテンツが宛先の場所に書き込まれます
$fp = fopen($this->targetPaths[$key],'w+');
echo '=>宛先ファイルに書き込みます.... ';
fwrite($fp,$fileAterZip); $fp);
echo 'Complete'.$this->newline;
//暗号化を選択するかどうか
if($this->bcompiler && $pathInfo['extension'] == 'php'){
echo '=>元のファイルを暗号化....';
//元のファイルをコピーします
$fh = fopen($this- >targetPaths[$key].'encrypt.php', "w") ;
bcompiler_write_header($fh);
bcompiler_write_file($fh, $this->targetPaths[$key]);
fclose($fh); ($this->targetPaths[$key]);
//暗号化されたファイルの名前を変更します
rename($this->targetPaths [$key].'encrypt.php',$this->targetPaths[$key] );
echo '完了'.$this->newline;
echo $this->newline.$this->newline;
}
//圧縮および暗号化されたフォルダーのサイズを再計算します
$this->sizeAfterZip = $this->getSizeUnit($this->getDirSize($this->targetDir),2)
echo '[暗号化プログラムの終了] 】'.$this->newline.$this->newline;
echo '"レポート情報"'.$this->newline;
echo 'ソースフォルダー:'.$this->sourceDir .'( '.$this->sizeBeforeZip.')'.$this->newline;
echo '宛先フォルダー:'.$this->targetDir.'('.$this->sizeAfterZip.')'。 $this->newline;
echo 'ファイル サイズの増加: +'.$this->getSizeUnit(($this->getDirSize($this->targetDir) - $this->getDirSize ($this- >sourceDir))).$this->newline;
echo 'ファイルの総数:'.count($this->sourcefilePaths).'.$this->newline;
}
/**
* ディレクトリ内のファイルをすべて削除します
*
* @param string $dir 削除するフォルダ
* @param boolean $deleteSelf フォルダも同時に削除します
* @return void
*/
プライベート関数 cleanDir($dir='.',$deleteSelf=true){
if(!$dh = @opendir($dir)) return; )) {
if($obj=='.' || $obj=='..') 続行
if (!@unlink($dir.'/'.$obj)) $this ->cleanDir ($dir.'/'.$obj, true);
} if ($deleteSelf){
closedir($dh);
/**
* フォルダーの合計ファイルサイズを取得します
*
* @param string $dir 解析対象のフォルダー
* @return int byte
* /
private function getDirSize($dir='.'){
//ファイルパスリストを取得
$filePaths = $this->getPaths($dir,'*')
//カウンタを初期化する
$sizeCounter = 0;
foreach($key => $path){
$sizeCounter = $sizeCounter + filesize($path);
}
/**
* フォルダーの一致するパスをすべて取得します
*
* @param string $start_dir 分析対象のフォルダー
* @return array ファイルパス配列
* /
プライベート関数 getPaths($sDir, $sPattern, $nFlags = NULL){
$sDir =scapeshellcmd($sDir);
$aFiles = glob("$sDir/$sPattern", $nFlags); ("$sDir/*", GLOB_ONLYDIR) as $sSubDir) {
$aSubFiles = $this->getPaths($sSubDir, $sPattern, $nFlags) ; }
return $aFiles;
}
/**
* ファイルサイズ単位変換関数
*
* @param int ファイルサイズ
* @param int 小数点数
* @param boolean データを配列に切り出すかどうか
* @return 混合文字列か配列
*/
public function getSizeUnit($size,$decmal=2,$split=false){
//ユニットシーケンスを設定
$unit = array ('Bytes ','KB','MB','GB','TB','PB','EB','ZB','YB');
//初期化インデックス
$flag = 0;単純化除算
while($size >= 1024){
$size = $size / 1024;
}
//単位から値を分離するかどうか
if($split){
$ sizeUnit = array(
'size' =>number_format($size,$10 進数),
'unit' =>$unit[$flag]
);
} else {
$sizeUnit = (number_format($size, $ 10 進数) )).$unit[$flag];
}
//サイズと単位を返します
}
}
上記では、createcompilerdc が bcompiler を使用して PHP ファイルを暗号化するためのコードを紹介しています。これには、createcompatibilitydc の内容も含まれており、PHP チュートリアルに興味のある友人に役立つことを願っています。