0
我有一個PHP腳本,使拉鍊帶2個功能:在PHP中,這個錯誤意味着什麼:Warning:ZipArchive :: close():讀取錯誤:錯誤的文件描述符在(...)中?
- dirToArray:讓所有的文件/ empty_folders陣列中的
- create_zip:調用dirToArray(),使zipArchive
我得到了一個奇怪的警告,它實際上是一個真正的錯誤,因爲我的zip檔案沒有被構建。
警告結果
Warning: ZipArchive::close(): Read error: Bad file descriptor in path/to/file.php on line x
有人可以解釋我是什麼意思: 「錯誤的文件描述符」?
這是代碼:
dirToArray
/* to copy all file/folder names from a directory into an array*/
function dirToArray($dir_path) {
$result = array();
$path = realpath($dir_path);
$objects = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object) {
if($object->getFilename() !== "." && $object->getFilename() !== "..") {
$result[] = $object;
}
}
return $result;
}
create_zip
/* creates a compressed zip file */
function create_zip($productPath = '', $dirName = '', $overwrite = false) {
$fullProductPath = $productPath.$dirName;
$a_filesFolders = dirToArray($fullProductPath);
var_dump($a_filesFolders);
//if the zip file already exists and overwrite is false, return false
$zip = new \ZipArchive();
$zipProductPath = $fullProductPath.'.zip';
if($zip->open($zipProductPath) && !$overwrite){
$GLOBALS["errors"][] = "The directory {$zipProductPath} already exists and cannot be removed.";
}
//if files were passed in...
if(is_array($a_filesFolders) && count($a_filesFolders)){
$opened = $zip->open($zipProductPath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
if($opened !== true){
$GLOBALS["errors"][] = "Impossible to open {$zipProductPath} to edit it.";
}
//cycle through each file
foreach($a_filesFolders as $object) {
//make sure the file exists
$fileName = $object -> getFilename();
$pathName = $object -> getPathname();
if(file_exists($pathName)) {
$pos = strpos($zipProductPath , "/tmp/") + 5;
$fileDestination = substr($pathName, $pos);
echo $pathName.'<br/>';
echo $fileDestination.'<br/>';
$zip->addFile($pathName,$fileDestination);
}
else if(is_dir($pathName)){
$pos = strpos($zipProductPath , "/tmp/") + 5;
$fileDestination = substr($pathName, $pos);
$zip->addEmptyDir($fileDestination);
}else{
$GLOBALS["errors"][] = "the file ".$fileName." does not exist !";
}
}
//close the zip -- done!
$zip->close();
//check to make sure the file exists
return file_exists($zipProductPath);
}else{
return false;
}
}
我的猜測是,打電話給'的open()'失敗,然後您嘗試關閉描述符,因爲它一直沒有拉開 –
我不存在檢查:if($ opened!== true){GLOBALS [「errors」] [] =「無法打開{$ zipProductPath}進行編輯。 } –
是的,但它不會停止腳本的執行 –