I'm having some difficulty with ZipArchive functions in PHP.
In this code, I am getting an error value of 1 which is, for some reason not found in the zipFileErrMsg function.
The file DOES exist in the path passed to the ZipArchive->open() function.
I'm not sure what is going on as this is essentially the same code that I use in another script that works like a charm.
And another thing, I cannot run this script on WAMPServer 2.0 because the version of PHP installed doesn't have
php_zip.dll. Any ideas on how to remedy that?
Can you guys see anything I may be doing wrong?
<?php
function zipFileErrMsg($errno) {
// using constant name as a string to make this function PHP4 compatible
$zipFileFunctionsErrors = array(
'ZIPARCHIVE::ER_MULTIDISK' => 'Multi-disk zip archives not supported.',
'ZIPARCHIVE::ER_RENAME' => 'Renaming temporary file failed.',
'ZIPARCHIVE::ER_CLOSE' => 'Closing zip archive failed',
'ZIPARCHIVE::ER_SEEK' => 'Seek error',
'ZIPARCHIVE::ER_READ' => 'Read error',
'ZIPARCHIVE::ER_WRITE' => 'Write error',
'ZIPARCHIVE::ER_CRC' => 'CRC error',
'ZIPARCHIVE::ER_ZIPCLOSED' => 'Containing zip archive was closed',
'ZIPARCHIVE::ER_NOENT' => 'No such file.',
'ZIPARCHIVE::ER_EXISTS' => 'File already exists',
'ZIPARCHIVE::ER_OPEN' => 'Can\'t open file',
'ZIPARCHIVE::ER_TMPOPEN' => 'Failure to create temporary file.',
'ZIPARCHIVE::ER_ZLIB' => 'Zlib error',
'ZIPARCHIVE::ER_MEMORY' => 'Memory allocation failure',
'ZIPARCHIVE::ER_CHANGED' => 'Entry has been changed',
'ZIPARCHIVE::ER_COMPNOTSUPP' => 'Compression method not supported.',
'ZIPARCHIVE::ER_EOF' => 'Premature EOF',
'ZIPARCHIVE::ER_INVAL' => 'Invalid argument',
'ZIPARCHIVE::ER_NOZIP' => 'Not a zip archive',
'ZIPARCHIVE::ER_INTERNAL' => 'Internal error',
'ZIPARCHIVE::ER_INCONS' => 'Zip archive inconsistent',
'ZIPARCHIVE::ER_REMOVE' => 'Can\'t remove file',
'ZIPARCHIVE::ER_DELETED' => 'Entry has been deleted',
);
$errmsg = 'unknown';
foreach ($zipFileFunctionsErrors as $constName => $errorMessage) {
if (defined($constName) and constant($constName) === $errno) {
return 'Zip File Function error: '.$errorMessage;
}
}
return 'Zip File Function error: unknown';
}
require_once "libs/Core_cron.php";
set_time_limit(0);
$user = new User;
$inv = new Inventory;
// This loads a list of records from a table into the $files array
$files = $inv->loadImportFiles();
if(count($files) <= 0)
{
echo "NO FILES TO IMPORT"."<br>";
exit;
}
foreach($files as $key=>$file)
{
$file_temp = $file['file_name'];
$file['file_name'] = 'file_uploads/'.$file['file_name'];
$path_parts = pathinfo($file['file_name']);
$user_id = $file['user_id'];
if(strtolower($path_parts['extension']) == 'zip') {
echo "PROCESSING ZIP FILE: ".$file['file_name']."<br>";
// this shows the correct filename and it does exist in the path.
echo "FileName: ".$file['file_name']."<br>";
$zip = new ZipArchive();
$res = $zip->open($file['file_name']);
if (is_resource($res)) {
// Only one file in the zip
$zippedfile = $zip->statIndex(0);
$path_parts = pathinfo($zippedfile['name']);
echo "UNZIPPING FILE: ".$zippedfile['name']."<br>";
$zip->extractTo('file_uploads/', $zippedfile['name']);
$zip->close();
// delete the zip file
unlink($file['file_name']);
// rename the file to include the user_id and date marker in the filename
$filename = 'file_uploads/'.$user_id.'_'.$path_parts['filename'].'_'.date('m_d_Y').'.'.$path_parts['extension'];
rename('file_uploads/'.$zippedfile['name'], $filename);
// Remove the double line feeds, if any in the file
$filestr = preg_replace('`[\r\n]+`',"\n", file_get_contents($filename));
$fp = fopen($filename, "w+");
fwrite($fp, $filestr);
fclose($fp);
$file['file_name'] = $filename;
} else {
// returning "1:Zip File Function error: unknown"
die($res.":".zipFileErrMsg($res));
}
}
/* Dont want to do this until I get the file unzipped.
// import the file
if($inv->importFile($file['user_id'], $file['file_name'], $file['file_id'], null, true))
{
echo "DONE IMPORTING FILE: ".$file['file_name']."<br>";
}
*/
}
?>