php slaveok_ZipArchive::open

用户评论:

[#1]

ohcc at 163 dot com [2015-11-06 21:45:54]

return values of ZipArchive::open() and their values and meanings

ZipArchive::ER_SEEK 4Seek error.

ZipArchive::ER_READ 5Read error.

ZipArchive::ER_NOENT 9No such file.

ZipArchive::ER_OPEN 11Can't open file.

ZipArchive::ER_EXISTS 10File already exists.

ZipArchive::ER_MEMORY 14Malloc failure.

ZipArchive::ER_INVAL 18Invalid argument.

ZipArchive::ER_NOZIP 19Not a zip archive.

ZipArchive::ER_INCONS 21Zip archive inconsistent

[#2]

ohcc at 163 dot com [2015-11-06 21:29:21]

// Warning: ZipArchive::addFile(): Invalid or uninitialized Zip object

// try ZipArchive::OVERWRITE|ZipArchive::CREATE when you want to replace a zip archive that may not exist$zip= newZipArchive;$rt=$zip->open('i.zip',ZipArchive::OVERWRITE);

echo$rt;// when i.zip does not exist, $rt is 9, ZipArchive::ER_NOENT, or "No such file."$zip->addFile('wuxiancheng.cn.sql','db.sql');// triggers an error with the message "Warning: ZipArchive::addFile(): Invalid or uninitialized Zip object ..."

// Use ZipArchive::OVERWRITE|ZipArchive::CREATE$zip= newZipArchive;$zip->open('i.zip',ZipArchive::OVERWRITE|ZipArchive::CREATE);$zip->addFile('wuxiancheng.cn.sql','db.sql');?>

[#3]

abolfazl dot ziaratban at gmail dot com [2015-05-24 16:35:47]

#license GPLclasszipextendsZipArchive{

public functionmessage($code)

{

switch ($code)

{

case0:

return'No error';

case1:

return'Multi-disk zip archives not supported';

case2:

return'Renaming temporary file failed';

case3:

return'Closing zip archive failed';

case4:

return'Seek error';

case5:

return'Read error';

case6:

return'Write error';

case7:

return'CRC error';

case8:

return'Containing zip archive was closed';

case9:

return'No such file';

case10:

return'File already exists';

case11:

return'Can\'t open file';

case12:

return'Failure to create temporary file';

case13:

return'Zlib error';

case14:

return'Malloc failure';

case15:

return'Entry has been changed';

case16:

return'Compression method not supported';

case17:

return'Premature EOF';

case18:

return'Invalid argument';

case19:

return'Not a zip archive';

case20:

return'Internal error';

case21:

return'Zip archive inconsistent';

case22:

return'Can\'t remove file';

case23:

return'Entry has been deleted';

default:

return'An unknown error has occurred('.intval($code).')';

}

}

public functionisDir($path)

{

returnsubstr($path,-1) =='/';

}

public functiongetTree()

{$Tree= array();$pathArray= array();

for($i=0;$inumFiles;$i++)

{$path=$this->getNameIndex($i);$pathBySlash=array_values(explode('/',$path));$c=count($pathBySlash);$temp= &$Tree;

for($j=0;$j

if(isset($temp[$pathBySlash[$j]]))$temp= &$temp[$pathBySlash[$j]];

else

{$temp[$pathBySlash[$j]] = array();$temp= &$temp[$pathBySlash[$j]];

}

if($this->isDir($path))$temp[$pathBySlash[$c-1]] = array();

else$temp[] =$pathBySlash[$c-1];

}

return$Tree;

}

}?>

[#4]

jekillen at prodigy net [2015-04-13 07:23:29]

Calling ZipArchive->open() will not create an empty zip archive file.

I found this out the hard way. I wrote code that produced positive

results: I.E. the return value from the call to ZipArchive was TRUE

and the empty zip file was not created. So at least call

ZipArchive->addFromString(, '')

when creating a new zip archive file.

[#5]

Eric Langlois [2014-01-29 21:53:23]

$zip= newZipArchive;$res=$zip->open('test.zip',ZipArchive::CREATE);

if ($res===TRUE) {//CODE GOES HERE$zip->close();

} else {

switch($res){

caseZipArchive::ER_EXISTS:$ErrMsg="File already exists.";

break;

caseZipArchive::ER_INCONS:$ErrMsg="Zip archive inconsistent.";

break;

caseZipArchive::ER_MEMORY:$ErrMsg="Malloc failure.";

break;

caseZipArchive::ER_NOENT:$ErrMsg="No such file.";

break;

caseZipArchive::ER_NOZIP:$ErrMsg="Not a zip archive.";

break;

caseZipArchive::ER_OPEN:$ErrMsg="Can't open file.";

break;

caseZipArchive::ER_READ:$ErrMsg="Read error.";

break;

caseZipArchive::ER_SEEK:$ErrMsg="Seek error.";

break;

default:$ErrMsg="Unknow (Code$rOpen)";

break;

}

die('ZipArchive Error: '.$ErrMsg);

}?>

[#6]

walter at clevertechie dot com [2012-11-17 20:53:33]

If you have archives that you want to overwrite just use:

ZIPARCHIVE::CREATE

It will overwrite existing archives and at the same time create new ones if they don't already exist.

ZIPARCHIVE::OVERWRITE won't work for both of these scenarios.

(PHP version 5.4.4)

[#7]

YiiWanAB at hotmail dot com [2011-08-30 10:06:21]

Most of the time people iterate over a directory with 'opendir' or 'readdir' to add files to a zip. Like...

while ($file = readdir($dir)) { ... $zip->addFile($file) }

Note that $zip->addFile($file) will only work in the current directory if your at the root. You will need to add the correct path to that $file string variable to have the full file name like ...

$zip->addFile($dir . DIRECTORY_SEPARATOR . $file); will work.

This may identify why you may get a read error when closing the file.

Enjoy.

[#8]

sunil dt bhave at gmail dt com [2011-03-16 22:44:27]

Even though the api specifies that the flags are optional I found that I had to specify the flag ZIPARCHIVE::CREATE for an archive to be opened.

This is on a Windows 7 system with PHP 5.3.0

[#9]

Jan Vavra [2011-03-10 00:04:28]

As discussed in http://bugs.php.net/bug.php?id=54128 on Windows Server systems (2003, 2008) and IIS there is a problem when you want to unzip file stored in C:\Windows\Temp folder.

User of worker process IUSR_XXX has no directory listing right for C:\Windows\Temp and this is a reason why ZipArchive::open() fails with error 11 (error open). So it is not a good idea to store file for unzipping in folder defined by sys_get_temp_dir().

[#10]

sebwoolford at gmail dot com [2009-10-23 03:29:32]

Further to what rickky at gmail dot com was saying, I've had that problem while trying to cache zip files and found that I had to set the permissions of the containing folder to 777 to get it to work.

Because this is a potential security weakness if on a public viewable folder, I'd recommend moving the folder so that it is no longer within public_html. You can then use readfile() to output the archive to the browser, with some HTTP headers to tell the browser it is a zip file.

[#11]

michael202 at gmx dot de [2009-07-29 06:33:00]

to anyone getting an error ZIPARCHIVE::ER_READ = 5, when

doing $zip->open($zipfile) with a ZIP file containing a total of more then (around) 800 files (even when they are in sub-directories).

possibly related bugs 40873, 8714:

1. it was not an OS limit, because it worked when called from windows via samba on the same file at the same place

2. it wasn't working under 32bit linux

with php 5.3.0 the issue seems to be resolved.

[#12]

eric at webdeveric dot com [2009-02-06 07:06:21]

With php 5.2.6, the following code created a new zip or replaced a existing zip.

Note that I am only using the ZIPARCHIVE::OVERWRITE flag.

$zip= newZipArchive();$opened=$zip->open($zipFileName,ZIPARCHIVE::OVERWRITE);

if($opened!==true){

die("cannot open{$zipFileName}for writing.");

}$zip->addFromString($name,$contents);$zip->close();?>

Now, with php 5.2.8, it does not work and gives this warning:

Warning: ZipArchive::addFromString() [ziparchive.addfromstring]: Invalid or unitialized Zip object in [myfile] on line [myline]

To fix this, you must specify the flags as create or overwrite.

$zip= newZipArchive();$opened=$zip->open($zipFileName,ZIPARCHIVE::CREATE|ZIPARCHIVE::OVERWRITE);

if($opened!==true){

die("cannot open{$zipFileName}for writing.");

}$zip->addFromString($name,$contents);$zip->close();?>

When googling for the error message I found a lot of people that had it but couldn't figure out why they were getting it.

I hope this helps someone.

[#13]

jj at icglink dot com [2008-12-04 11:09:37]

if you are echoing out the output and confused about the number...maybe this will help.  i'm not totally sure it is accurate though.

ZIPARCHIVE::ER_EXISTS - 10

ZIPARCHIVE::ER_INCONS - 21

ZIPARCHIVE::ER_INVAL - 18

ZIPARCHIVE::ER_MEMORY - 14

ZIPARCHIVE::ER_NOENT - 9

ZIPARCHIVE::ER_NOZIP - 19

ZIPARCHIVE::ER_OPEN - 11

ZIPARCHIVE::ER_READ - 5

ZIPARCHIVE::ER_SEEK - 4

[#14]

azsymvelik at gmail dot com [2008-08-01 13:25:57]

<?php $somefile="zip.zip";$someurl="/some/url"$zip= newZipArchive;$open=$zip->open($somefile,ZIPARCHIVE::CHECKCONS);// If the archive is broken(or just another file renamed to *.zip) the function will return error on httpd under windows, so it's good to check if the archive is ok with ZIPARCHIVE::CHECKCONSif ($open===TRUE) {

if(!$zip->extractTo($someurl)) {

die ("Error during extracting");

}$zip->close();

}$new_archive_name="new.zip";$new_zip= newZipArchive;$new_open=$new_zip->open($new_archive_name,ZIPARCHIVE::CREATE);

if ($new_open===TRUE) {$dir=opendir($someurl);

while ($file=readdir($dir)) {

if ($file=="."||$file=="..") { } else {//We do not wanna this files in the new zip archiveif (!$new_zip->addFile($file)) {

print$file."was not added!
";

}

}

}

}$new_zip->close();?>

[#15]

Jonathan Baltazar [2008-07-23 07:14:22]

The file name does not need to end in '.zip' if it is created using tempnam().  You just need to overwrite the file instead of trying to read it:

$file=tempnam("tmp","zip");$zip= newZipArchive();// Zip will open and overwrite the file, rather than try to read it.$zip->open($file,ZipArchive::OVERWRITE);$zip->close();// Stream the file to the clientheader("Content-Type: application/zip");header("Content-Length: ".filesize($file));header("Content-Disposition: attachment; filename=\"a_zip_file.zip\"");readfile($file);unlink($file);?>

[#16]

olivier pons [2008-05-16 00:26:45]

If you try this to open a file with creation in mind (= empty zip to fill with other files), this may not work :

$res = $zip->open($zip_file, ZipArchive::CREATE);

// you may get false

Try this instead, it should work :

$res = $zip->open($zip_file, ZIPARCHIVE::OVERWRITE);

[#17]

rickky at gmail dot com [2007-07-02 05:07:38]

If the directory you are writing or saving into does not have the correct permissions set, you won't get any error messages and it will look like everything worked fine... except it won't have changed!

Instead make sure you collect the return value of ZipArchive::close(). If it is false... it didn't work.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值