ホームページ  >  記事  >  バックエンド開発  >  PHP オンライン ファイルとフォルダーの圧縮サンプル コード_PHP チュートリアル

PHP オンライン ファイルとフォルダーの圧縮サンプル コード_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:07:45973ブラウズ

この PHP チュートリアルのファイル圧縮コードは zip.exe ファイルに依存しているため、zip.exe 圧縮ファイルを取り出す必要があることに注意してください。

if ( !IsSet($_GET['dirname']) )
{
show_input_form() ;
}
else
{
// 空かどうかをチェック
if ( empty($_GET[ 'dirname']) )
{
hg_exit("フォルダ名を入力してください!") ;
}

// 有効な dirname をチェック
if ( FALSE !== strpos($_GET['dirname'], "/" ) )
{
hg_exit(""/" は不正なフォルダー名です!") ;
}
if ( FALSE !== strstr($_GET['dirname'], "..") )
{
hg_exit ( "".." は不正なフォルダー名です!") ;
}

// 有効な dir
をチェック if ( !is_dir($_GET['dirname']) )
{
hg_exit(""{$_GET [' dirname']}" は有効なフォルダーではありません!") ;
}

$szData = "" ;
$szInfo = "" ;

$file_count = @ZipDir($_GET['dirname'], &$szData , &$szInfo) ;
$info_size_16byte = @sprintf("%016d", @strlen($szInfo)) ;
$szData = @sprintf("%016d",$file_count) 。 ;
$filename = $_GET['dirname'] . ".dat" ;
if ( function_exists(gzencode) )
{
$szData = gzencode($szData) ;
$filename .= ".gz" ;
}

Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: " . strlen($szData));
Header(" Content-Disposition:attachment; filename=$filename");

echo $szData ;
}


function show_input_form()
{
echo HtmlHead("File Packaging") ;
echo "

. "n"
. "
n" ;
echo "< script>n"
. "input.dirname.focus();n"
. "{"
" . /2 ;n"
. " var left = (screen.width-300)/2 ;n"
. " newwin=window.open('', '', 'width=300,height=200,top=' + top + ', left=' + left + ', resizable=0,scrollbars=auto');n"
. " url = "{$_SERVER['PHP_SELF']}" + "?dirname=" + dir ; n"
. " newwin.document.write('このリンクをクリックしてダウンロードするか、
またはここを右クリックして [名前を付けて保存] を選択してください
');n"
. "}"
. "n" ;
echo HtmlFoot() ;
}


function ZipDir($szDirName, &$szData, &$szInfo)

{

/ / dir ヘッダーを書き込みます
$szInfo .= "$szDirName|[dir]n" ;
$file_count = 0 ;
$hDir = OpenDir($szDirName) ;
while ( $file = ReadDir($hDir) )
{
if ( $file==" ." || $file==".." ) 続行 ;

$szCurFile = "$szDirName/$file" ;

if ( Is_Dir($szCurFile) )

{

$file_count += ZipDir($szCurFile, &$szData, &$szInfo) ;

}
else if ( Is_File($szCurFile) )
{
$hCurFile = fopen($szCurFile, "rb") ;
$size = filesize( $szCurFile) ;
$szStream = fread( $hCurFile, $size ) ;
fclose($hCurFile) ;
$file_count++ ;

// 情報を書き込みます
$szInfo .= "$szCurFile|$sizen" ;

/ / データを書き込みます
$szData . = $szStream ;

}

}

// ディレクトリフッターを書き込みます
$szInfo .= "$szDirName|[/dir]n" ;

return $file_count ;

}


function hg_exit($str)
{
echo HtmlHead("エラー、終了!") ;
echo "

" ;
echo HtmlFoot() ;
exit ;
}


function HtmlHead($title)
{
return "nnn"
. "n"
. "