ZipArchive create problem
| From: | Jeffry Killen | Date: | Sun, 12 Apr 2015 21:32:44 +0000 |
| Subject: | ZipArchive create problem | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-324801@lists.php.net to get a copy of this message | ||
I am working on a class def to wrap ZipArchive in.
I have hit a snag that I cannot seem to solve.
I have the page issue an async request that calls this code
The result indicates that the zip archive was created successful
written and I get the expected result ( at newArch line indicated by //<<<<) Result that is printed is at line marked //??<<<< Note: Regarding issue with ZipArchive::open not returning errors until close() is called (manually or automatically), I think I coded it to catch the return value of ZipArchive::open. But if the return value === TRUE, there is no err code to catch. I often hit on a syntax and/or logic solution to a problem such as this while I am composing a query, such as this. That is not the case so far here. I have posted a demo for highlighting the files involved at www.jekillen.com/demos/ -> Issue with ZipArchive::open I did try to file a bug report after searching similar bugs and finding none. But the bug report page timed out while I was composing the demo: The bug report form did not want more that 20 lines of code in the form fields. I use "performance issue", but I don't know that that label is intended for this type of issue. Here is the relevant code 4/12/2015 from Firefox console record of get request: http://localhost/dev_lab/lab_8/?test=g&newArch=test_2.zip (I also tried it with newArch=test.zip with no better result) calling script in index.php: else if($_GET['newArch'])But no zip file shows up where it should. <<< I tried setting the write permission to prevent the archive from being
{
$_input = array();
$_input['name'] = $_GET['newArch'];
$_retStr = $_zip->run('newArch', $_input);
}
__construct method
public function __construct($_cwd)
{
self::$_class = get_class($this);
self::$_zipper = new ZipArchive;
require_once("php/zpArchConst.php");
self::$_zipErCodes = $_constER;
self::$_cwd = $_cwd;
}
code use in $_zip->run():
public function run($_what, $_with)
{
$_out = array();
$_errHead = self::$_class.'->'.__FUNCTION__;
switch($_what)
{
case 'newArch': // create an archive
$_out = self::newArch($_with);
return $_out;
break;
// ..etc..
private function newArch($_input) //string: name with path relative to script
{
$_out = array();
$_errHead = self::$_class.'->'.__FUNCTION__;
$_name = $_input['name'];
$_parent = dirname(getcwd().'/'.$_name);
if(!is_writable($_parent))
{
$_out['error'] = $_errHead.' error: '.$_parent.' does not have write permissions'; //<<<<
return $_out;
}
$_retStr = self::$_zipper->open($_name, ZIPARCHIVE::CREATE);
$_ret = self::$_zipper->close();
if($_retStr === TRUE && $_ret === true)
{
$_out['success'] = true;
}
else if($_retStr > 0)
{
$_out['error'] = $_errHead." error: ".self::$_zipErCodes[$_retStr];
}
return $_out;
}
What the index page does with the result:
else if($_GET['newArch'])
{
if($_retStr['error'])
{
print $_GET['test']."\n".$_GET['newArch'].': '.$_retStr['error'];
}
else if($_retStr['success'])
{
print $_GET['test']."\n".$_GET['newArch'].': archive created'; //??<<<<
}
}