圧縮およびアーカイブZipArchiveクラス
- ZipArchive::addEmptyDir〔新しいディレクトリを追加する〕
- ZipArchive::addFile〔指定したパスからファイルを ZIPアーカイブに追加する〕
- ZipArchive::addFromString〔内容を指定して、ファイルを ZIPアーカイブに追加する〕
- ZipArchive::close〔アクティブな (オープンされた、あるいは新しく作成された) アーカイブを閉じる〕
- ZipArchive::deleteIndex〔インデックスを使用して、アーカイブ内のエントリを削除する〕
- ZipArchive::deleteName〔名前を使用して、アーカイブからエントリを削除する〕
- ZipArchive::extractTo〔アーカイブの内容を展開する〕
- ZipArchive::getArchiveComment〔ZIPアーカイブのコメントを返す〕
- ZipArchive::getCommentIndex〔エントリのインデックスを使用して、エントリのコメントを返す〕
- ZipArchive::getCommentName〔エントリ名を使用して、エントリのコメントを返す〕
- ZipArchive::getFromIndex〔インデックスを使用して、エントリの内容を返す〕
- ZipArchive::getFromName〔名前を使用して、エントリの内容を返す〕
- ZipArchive::getNameIndex〔インデックスを使用して、エントリ名を返す〕
- ZipArchive::getStream〔名前を使用して、エントリのファイルハンドラ (読み込み専用) を取得する〕
- ZipArchive::locateName〔アーカイブ内のエントリのインデックスを返す〕
- ZipArchive::open〔ZIPファイルアーカイブをオープンする〕
- ZipArchive::renameIndex〔インデックスを使用してエントリ名を変更する〕
- ZipArchive::renameName〔名前を使用してエントリ名を変更する〕
- ZipArchive::setArchiveComment〔ZIPアーカイブのコメントを設定する〕
- ZipArchive::setCommentIndex〔インデックスを使用してエントリのコメントを設定する〕
- ZipArchive::setCommentName〔名前を使用してエントリのコメントを設定する〕
- ZipArchive::statIndex〔インデックスを使用してエントリの詳細を取得する〕
- ZipArchive::statName〔名前を使用してエントリの詳細を取得する〕
- ZipArchive::unchangeAll〔アーカイブに対するすべての変更を取り消す〕
- ZipArchive::unchangeArchive〔アーカイブ全体に対して行われたすべての変更を取り消す〕
- ZipArchive::unchangeIndex〔指定したインデックスのエントリに対するすべての変更を取り消す〕
- ZipArchive::unchangeName〔指定した名前のエントリに対するすべての変更を取り消す〕
ZipArchive::addEmptyDir
新しいディレクトリを追加する
unknown
指定したディレクトリ名のディレクトリをアーカイブ内に追加します。 追加されるディレクトリは空です。 成功した場合にTRUE、失敗した場合にFALSEを返します。 ディレクトリ名に既にあるディレクトリを指定した場合はFALSEを返します。
<?
# アーカイブ内に新規ディレクトリを作成する
$zip=new ZipArchive;
// ZIPアーカイブを開く
if ($zip->open('test.zip')===true){
// 指定したディレクトリを作成
if($zip->addEmptyDir('newDirectory')) {
echo '新しいディレクトリを作成しました';
}else{
echo 'ディレクトリが作成できませんでした';
}
// ZIPアーカイブを閉じる
$zip->close();
}else{
echo '失敗しました';
}
?>
ZipArchive::addFile
指定したパスからファイルを ZIPアーカイブに追加する
unknown
追加するファイルパスに指定したファイルをZIPアーカイブに追加します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
オプションの第2引数ローカル名には、ZIPアーカイブ内部での名前を指定します。
<?
# 「test.zip」に「/path/to/index.txt」を「ewname.txt」という名前で追加する
$zip = new ZipArchive;
// ZIPアーカイブを開く
if ($zip->open('test.zip')===true){
// 「/path/to/index.txt」を「ewname.txt」という名前で追加する
$zip->addFile('/path/to/index.txt', 'newname.txt');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
} else {
echo '失敗';
}
?>
ZipArchive::addFromString
内容を指定して、ファイルを ZIPアーカイブに追加する
unknown
内容を指定して、ファイルをZIPアーカイブに追加します。 ZIPアーカイブに新しいディレクトリを作成して、そのディレクトリ内にファイルを追加することもできます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数ローカル名には、作成するエントリ名を指定します。
第2引数コンテンツには、エントリを作成するのに使用するデータの内容を指定します。
バイナリセーフな形式で使用します。
<?
# 新しいアーカイブへのエントリの追加
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip', ZipArchive::CREATE);
if ($res===true) {
// 指定した内容でファイルをZIPアーカイブに追加
$zip->addFromString('test.txt', 'ここにファイルの内容を書きます');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
}else{
echo '失敗';
}
# アーカイブ内のディレクトリへのファイルの追加
$zip=new ZipArchive;
// ZIPアーカイブを開く
if ($zip->open('test.zip')===true){
// 指定した内容でファイルをZIPアーカイブに追加
$zip->addFromString('dir/test.txt', 'ここにファイルの内容を書きます');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
}else{
echo '失敗';
}
?>
ZipArchive::close
アクティブな (オープンされた、あるいは新しく作成された) アーカイブを閉じる
unknown
開いた、あるいは作成したアーカイブを閉じ、変更内容を保存します。 このメソッドは、スクリプトの最後で自動的にコールされます。 成功した場合にTRUE、失敗した場合にFALSEを返します。
ZipArchive::deleteIndex
インデックスを使用して、アーカイブ内のエントリを削除する
unknown
指定したエントリのインデックスにあるエントリをアーカイブから削除します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
# インデックスを使用して、アーカイブからファイルを削除する
$zip=new ZipArchive;
// ZIPアーカイブを開く
if($zip->open('test.zip')===true){
// インデックスが2のファイルを削除
$zip->deleteIndex(2);
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
}else{
echo '失敗';
}
?>
ZipArchive::deleteName
名前を使用して、アーカイブからエントリを削除する
unknown
指定したエントリ名のエントリをアーカイブから削除します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
# 名前を使用して、アーカイブからファイルを削除する
$zip=new ZipArchive;
// ZIPアーカイブを開く
if($zip->open('test.zip')===true){
// ZIPアーカイブ内にある「test.txt」を削除
$zip->deleteName('test.txt');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
}else{
echo '失敗';
}
?>
ZipArchive::extractTo
アーカイブの内容を展開する
unknown
アーカイブ全体、あるいは指定したファイルを、指定した場所に展開します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数destinationには、ファイルを展開する場所を指定します。
オプションの第2引数entriesには、展開するエントリを指定します。
単一のエントリ名、あるいはエントリなの配列を指定します。
<?
# 全エントリの展開
$zip=new ZipArchive;
// ZIPアーカイブを開く
if($zip->open('test.zip')===true){
// 「dir」ディレクトリの全エントリを展開
$zip->extractTo('dir/');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
} else {
echo '失敗';
}
# 2つのエントリのみの展開
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// 「test.txt」と「newname.txt」を「dir」ディレクトリに展開
$zip->extractTo('dir/', array('test.txt', 'newname.txt'));
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
} else {
echo '失敗';
}
?>
ZipArchive::getCommentIndex
エントリのインデックスを使用して、エントリのコメントを返す
unknown
エントリのインデックスのエントリに設定されているコメントを返します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
オプションの第2引数フラグにZIPARCHIVE::FL_UNCHANGEDを指定すると、元の変化していないコメントが返されます。
<?
# エントリのコメントの出力
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// インデックスが1のエントリに設定されているコメントを取得
var_dump($zip->getCommentIndex(1));
}else{
echo '失敗、コード:' . $res;
}
?>
ZipArchive::getCommentName
エントリ名を使用して、エントリのコメントを返す
unknown
指定したエントリ名に設定されているコメントを返します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
オプションの第2引数フラグにZIPARCHIVE::FL_UNCHANGEDを指定すると、元の変化していないコメントが返されます。
<?
# エントリのコメントの出力
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// 「test/entry1.txt」に設定されているコメントを取得
var_dump($zip->getCommentName('test/entry1.txt'));
}else{
echo '失敗、コード:' . $res;
}
?>
ZipArchive::getFromIndex
インデックスを使用して、エントリの内容を返す
unknown
指定したエントリのインデックスのエントリの内容を返します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
オプションの第2引数フラグには,アーカイブを開く時に使用するフラグを指定します。
下記の値をORで連結して使用することができます。
- ZIPARCHIVE::FL_UNCHANGED
- ZIPARCHIVE::FL_COMPRESSED
<?
# エントリのコメントの出力
$zip=new ZipArchive;
// ZIPアーカイブを開く
if($zip->open('test.zip')===true){
// インデックスが2のエントリの内容を取得
echo $zip->getFromIndex(2); // ここにファイルの内容を書きます
// ZIPアーカイブを閉じる
$zip->close();
} else {
echo '失敗';
}
?>
ZipArchive::getFromName
名前を使用して、エントリの内容を返す
unknown
指定したエントリ名のエントリの内容を返します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
オプションの第2引数フラグには,アーカイブを開く時に使用するフラグを指定します。
下記の値をORで連結して使用することができます。
- ZIPARCHIVE::FL_UNCHANGED
- ZIPARCHIVE::FL_COMPRESSED
<?
# ファイルの内容を取得する
$zip=new ZipArchive;
// ZIPアーカイブを開く
if($zip->open('test.zip')===true){
// 「testfromfile.php」の内容を取得
echo $zip->getFromName('testfromfile.php');
// ZIPアーカイブを閉じる
$zip->close();
} else {
echo '失敗';
}
# zipエントリの画像を変換する
$z=new ZipArchive();
// ZIPアーカイブを開く
if($z->open(dirname(__FILE__) . '/test_im.zip')) {
// 「pear_item.gif」を「b.png」に変換
$im_string=$z->getFromName("pear_item.gif");
$im=imagecreatefromstring($im_string);
imagepng($im, 'b.png');
}
?>
ZipArchive::getNameIndex
インデックスを使用して、エントリ名を返す
unknown
エントリのインデックスのエントリの名前を返します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
第1引数インデックスには、エントリのインデックスを指定します。
<?
# インデックスを使用して、エントリの名前を取得する
$zip=new ZipArchive;
// ZIPアーカイブを開く
if($zip->open('test.zip')){
for($i=0; $i < $zip->numFiles; $i++){
// エントリの名前を取得
echo 'Filename: '.$zip->getNameIndex($i)."\n";
}
}else{
echo 'Error reading zip-archive!';
}
/*
Filename: zip.php
Filename: newDirectory/
Filename: dir/test.txt
*/
?>
ZipArchive::getStream
名前を使用して、エントリのファイルハンドラ (読み込み専用) を取得する
unknown
指定したエントリ名のエントリのファイルポインタ(読み込み専用)を返します。
失敗した場合にFALSEを返します。
第1引数名前には、使用するエントリ名を指定します。
<?
# エントリの内容をfread()で取得し、それを保存する
$content='';
$zip=new ZipArchive();
// ZIPアーカイブを開く
if($zip->open('test.zip')) {
// エントリのファイルポインタ(リソース)を取得
$fp=$zip->getStream('test');
if(!$fp) exit("失敗\n");
while (!feof($fp)) {
// エントリの内容を取得
$contents.=fread($fp, 2);
}
fclose($fp);
// 取得したエントリの内容を保存
file_put_contents('t',$contents);
echo "終了\n";
}
# 上の例と同じことを、fopen()およびzipストリームラッパーで行う
$fp=fopen('zip://' . dirname(__FILE__) . '/test.zip#test', 'r');
if (!$fp) {
exit("オープンできません\n");
}
while (!feof($fp)) {
$contents.=fread($fp, 2);
echo "$contents\n";
}
fclose($fp);
echo "done.\n";
# ストリームラッパーと画像の組み合わせ。xml 関数とでも使用可能
$im=imagecreatefromgif('zip://' . dirname(__FILE__) . '/test_im.zip#pear_item.gif');
imagepng($im, 'a.png');
?>
ZipArchive::locateName
アーカイブ内のエントリのインデックスを返す
unknown
指定したエントリ名のエントリの場所を取得します。
成功した場合は、アーカイブ内の指定した名前のファイルのインデックスを返します。
失敗した場合は、FALSEを返します。
オプションの第2引数フラグには、下記の値をORで連結して指定します。
何もしない場合は0を指定します。
<?
# アーカイブを作成し、ZipArchive::locateName() を使用する
$file='test.zip';
$zip=new ZipArchive;
// ZIPアーカイブを開く
if ($zip->open($file, ZIPARCHIVE::CREATE)!==true){
exit('失敗');
}
// 内容を指定して、ファイルを ZIP アーカイブに追加
$zip->addFromString('entry1.txt', 'entry #1');
$zip->addFromString('entry2.txt', 'entry #2');
$zip->addFromString('dir/entry2d.txt', 'entry #2');
if(!$zip->status == ZIPARCHIVE::ER_OK) {
echo "zip の書き込みに失敗\n";
}
// ZIPアーカイブを閉じる
$zip->close();
if ($zip->open($file)!==true){
exit('失敗');
}
// アーカイブ内のエントリのインデックスを取得
echo $zip->locateName('entry1.txt') . "\n";
echo $zip->locateName('eNtry2.txt') . "\n";
echo $zip->locateName('eNtry2.txt', ZIPARCHIVE::FL_NOCASE) . "\n";
echo $zip->locateName('enTRy2d.txt', ZIPARCHIVE::FL_NOCASE|ZIPARCHIVE::FL_NODIR) . "\n";
// ZIPアーカイブを閉じる
$zip->close();
/*
0
1
2
*/
?>
ZipArchive::open
ZIPファイルアーカイブをオープンする
unknown
ファイル名に指定したZIPアーカイブを読込/書込/変更用に開きます。
オプションの第2引数フラグには、アーカイブを開くのに使用するモードを指定します。
- ZIPARCHIVE::OVERWRITE
- ZIPARCHIVE::CREATE
- ZIPARCHIVE::EXCL
- ZIPARCHIVE::CHECKCONS
成功した場合にTRUE、それ以外の場合に下記のエラーコードを返します。
- ZIPARCHIVE::ER_EXISTS
- ZIPARCHIVE::ER_INCONS
- ZIPARCHIVE::ER_INVAL
- ZIPARCHIVE::ER_MEMORY
- ZIPARCHIVE::ER_NOENT
- ZIPARCHIVE::ER_NOZIP
- ZIPARCHIVE::ER_OPEN
- ZIPARCHIVE::ER_READ
- ZIPARCHIVE::ER_SEEK
<?
# ZIPファイルアーカイブを開いて内部の各ファイルを読み込み、 その内容を表示する
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
echo '成功';
// 「test」アーカイブの内容を展開
$zip->extractTo('test');
// ZIPアーカイブを閉じる
$zip->close();
} else {
echo '失敗、コード:' . $res;
}
# アーカイブを作成する
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip', ZipArchive::CREATE);
if ($res===true){
// 内容を指定して、ファイルを ZIP アーカイブに追加
$zip->addFromString('test.txt', 'ここにファイルの内容を書きます');
// 「data.txt」を「entryname.txt」という名前で追加
$zip->addFile('data.txt', 'entryname.txt');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
} else {
echo '失敗';
}
?>
ZipArchive::renameIndex
インデックスを使用してエントリ名を変更する
unknown
エントリのインデックスのエントリの名前を新しい名前に変更します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
# エントリ名の変更
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// インデックスが2のエントリの名前を「newname.txt」にリネーム
$zip->renameIndex(2,'newname.txt');
// ZIPアーカイブを閉じる
$zip->close();
}else{
echo '失敗、コード:' . $res;
}
?>
ZipArchive::renameName
名前を使用してエントリ名を変更する
unknown
エントリ名を新しい名前に変更します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
# エントリ名の変更
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// 「currentname.txt」を「newname.txt」にリネーム
$zip->renameName('currentname.txt','newname.txt');
// ZIPアーカイブを閉じる
$zip->close();
}else{
echo '失敗、コード:' . $res;
}
?>
ZipArchive::setArchiveComment
ZIPアーカイブのコメントを設定する
unknown
ZIPアーカイブのコメントを設定します。
成功した場合にTRUE、失敗した場合FALSEを返します。
ZIPアーカイブのコメントを取得するには、ZipArchive::getArchiveCommentを使用してください。
<?
# アーカイブの作成およびコメントの設定
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res = $zip->open('test.zip', ZipArchive::CREATE);
if($res===true){
// 「ここにファイルの内容を書きます」という内容で「test.txt」をZIPアーカイブに追加
$zip->addFromString('test.txt', 'ここにファイルの内容を書きます');
// コメントの設定
$zip->setArchiveComment('新しいアーカイブのコメント');
// ZIPアーカイブを閉じる
$zip->close();
echo 'ok';
}else{
echo 'failed';
}
?>
ZipArchive::setCommentIndex
インデックスを使用してエントリのコメントを設定する
unknown
エントリのインデックスのエントリにコメントを設定します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
# アーカイブをオープンし、エントリのコメントを設定する
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip', ZipArchive::CREATE);
if($res===true){
// インデックスが2のエントリに「新しいエントリのコメント」というコメントを追加
$zip->setCommentIndex(2, '新しいエントリのコメント');
// ZIPアーカイブを閉じる
$zip->close();
echo '成功';
}else{
echo '失敗';
}
?>
ZipArchive::setCommentName
名前を使用してエントリのコメントを設定する
unknown
エントリ名のエントリにコメントを設定します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
<?
# エントリ名の変更
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// 「currentname.txt」を「newname.txt」にリネーム
$zip->renameName('currentname.txt','newname.txt');
// ZIPアーカイブを閉じる
$zip->close();
}else{
echo '失敗、コード:' . $res;
}
?>
ZipArchive::statIndex
インデックスを使用してエントリの詳細を取得する
unknown
エントリのインデックスのエントリの詳細情報を含む配列を返します。 失敗した場合はFALSEを返します。 ZIPARCHIVE::FL_UNCHANGEDをORで連結すると、アーカイブ内に最初に記録された際の情報を取得します。 変更内容は無視されます。
<?
# エントリの情報の出力
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// インデックスが3のエントリの詳細情報を配列で取得
print_r($zip->statIndex(3));
// ZIPアーカイブを閉じる
$zip->close();
}else{
echo '失敗、コード:' . $res;
}
/*
Array
(
[name] => zip/entry1.txt
[index] => 3
[crc] => -200514341
[size] => 8
[mtime] => 1243037624
[comp_size] => 8
[comp_method] => 0
)
*/
?>
ZipArchive::statName
名前を使用してエントリの詳細を取得する
unknown
エントリ名のエントリの詳細情報を含む配列を返します。 失敗した場合はFALSEを返します。
オプションの第2引数フラグには、エントリ名をどのように探すかを指定します。 また、ZIPARCHIVE::FL_UNCHANGEDをORで連結すると、アーカイブ内に最初に記録された際の情報を取得することが出来ます。 変更内容は無視されます。
- ZIPARCHIVE::FL_NOCASE
- ZIPARCHIVE::FL_NODIR
- ZIPARCHIVE::FL_UNCHANGED
<?
# エントリの情報の出力
$zip=new ZipArchive;
// ZIPアーカイブを開く
$res=$zip->open('test.zip');
if($res===true){
// エントリ名が「foobar/baz」のエントリの詳細情報を配列で取得
print_r($zip->statName('foobar/baz'));
// ZIPアーカイブを閉じる
$zip->close();
}else{
echo '失敗、コード:' . $res;
}
/*
Array
(
[name] => foobar/baz
[index] => 3
[crc] => 499465816
[size] => 27
[mtime] => 1123164748
[comp_size] => 24
[comp_method] => 8
)
*/
?>
ZipArchive::unchangeAll
アーカイブに対するすべての変更を取り消す
unknown
アーカイブに対する全ての変更を取り消します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
ZipArchive::unchangeArchive
アーカイブ全体に対して行われたすべての変更を取り消す
unknown
アーカイブ全体に対して行われた全ての変更を取り消します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
現在は、アーカイブのコメントに対する変更のみ取り消すことができます。
ZipArchive::unchangeIndex
指定したインデックスのエントリに対するすべての変更を取り消す
unknown
指定したインデックスのエントリに対する全ての変更を取り消します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
ZipArchive::unchangeName
指定した名前のエントリに対するすべての変更を取り消す
unknown
指定したエントリに対する全ての変更を取り消します。
成功した場合にTRUE、失敗した場合にFALSEを返します。
ZipArchive::getArchiveComment
ZIPアーカイブのコメントを返す
unknown
ZIPアーカイブのコメントを返します。
失敗した場合はFALSEを返します。
ZIPアーカイブにコメントを設定するには、ZipArchive::setArchiveCommentを使用してください。
<? # アーカイブのコメントの出力 $zip=new ZipArchive; // ZIPアーカイブを開く $res=$zip->open('test.zip'); if ($res===true){ // ZIP アーカイブのコメントを取得 var_dump($zip->getArchiveComment()); /* あるいはアーカイブのプロパティを使用 */ var_dump($zip->comment); }else{ echo '失敗、コード:' . $res; } ?>