I am trying to fix a problem in an auto-zip script for some images that I wrote a while ago, and this has worked so far. Everything seems fine to $zip->close(); which gives the following:
<b>Warning</b>: ZipArchive::close(): Read error: No such file or directory in <b></b> on line <b>287</b><br />
I read the docs and some forums and found out that this could happen in one of the following scenarios:
- If the actual files have not been added to the zip, since PHP 5.6, this may be the likely explanation, since I recently upgraded to PHP 5.6. But:
- I verify that every file exists before adding it
- I tried adding a dummy nonempty text file to zip. Adding it to zip returns true, like
file_exists() in a file - When I echo
$zip->numFiles and it gives a number of at least 1 (when zip has no files except the dummy)
- If the directory in which the zip should be written does not exist or does not have access rights: this does not seem to be the case, but to be sure, I wrote a text file for the same folder in the same script and there were no problems
- If there is a problem writing to the temp directory. This is a bit more difficult to verify, but I downloaded the script to the same system as it works, and I made sure there were no problems with disk space, etc.
Here is the relevant code. Some variables are predefined. Please note that I write every problem in my log and this script does not generate any records!
$zip_file = 'Project'.$project_id.'.zip'; $zip = new ZipArchive; if ($zip_result = $zip->open($zip_path.'/'.$zip_file, ZIPARCHIVE::CREATE) !== true) { echo 'Error creating zip for project: '.$project_id.'. Error code: '.$zip_result; help::debugLog('Error creating zip for project: '.$project_id.'. Error code: '.$zip_result); return false; } $file_list = array(); foreach ($item_thumbs as $item) { $full_thumb_path = $thumb_dir.'/'.$item['thumb']; if (file_exists($full_thumb_path) and $item['thumb']) { $file_added = $zip->addFile($full_thumb_path, basename($item['thumb'])); if (!$file_added) help::debugLog('Failed to add item thumb to project zip. Project: '.$project_id.', file name: '.$item['thumb']); else $file_list[] = $item['thumb']; } elseif ($item['thumb']) help::debugLog('Item thumb file '.$item['thumb'].' from item: '.$item['id'].' is missing from its indended location: '.$full_thumb_path); } $file_list_path = $zip_path.'/file_list.txt'; if (!($file_list_file = fopen($file_list_path, 'w+'))) help::debugLog('Failed to create list file (intended for zip) for project: '.$project_id); fwrite($file_list_file, "File list:\n"); fwrite($file_list_file, implode("\n", $file_list)); if (file_exists($file_list_path)) { fclose($file_list_file); if (!$zip->addFile($file_list_path)) help::debugLog('Failed to add list file to project zip for project: '.$project_id); unlink($file_list_path); } else help::debugLog('Failed to create list file (intended for zip) for project: '.$project_id); $zip->close();
source share