getMessage(); } //保存远程附件 function saveRemote($remoteUrl, $saveSrc){ $fileinfo = getRemote($remoteUrl); $mimeType = $fileinfo['head']['content_type']; if($mimeType != 'application/zip')return false; //下载失败 if(!isset($fileinfo['head']['http_code']) || $fileinfo['head']['http_code'] !== 200){ return false; } $fileName = $saveSrc . '/tmp/' . uniqid() . '.zip'; $res = setContent($fileName, $fileinfo['body']); //保存 if(!$res)return false; //解压 unzip($fileName, $saveSrc . '/ready'); } //获取远程文件信息 function getRemote($url){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $package = curl_exec($ch); $httpinfo = curl_getinfo($ch); curl_close($ch); return [ 'body' => $package, 'head' => $httpinfo ]; } /** * 存储文件内容 * @param string $filesrc 文件路径 * @param string $content 内容 */ function setContent($filesrc, $content){ createDir(dirname($filesrc)); return file_put_contents($filesrc, $content) !== false ? true : false; } /** * 递归创建文件夹 * @param string $path 路径 */ function createDir($path){ if (!file_exists($path)){ createDir(dirname($path)); mkdir($path, 0777); } } /** * zip解压 * @param string $zipfile 压缩文件目录 * @param string $unzipdir 解压目录 */ function unzip($zipfile, $unzipdir){ //判断压缩文件是否存在 if(!file_exists($zipfile)){ return false; } //判断解压目录是否存在 if(is_dir($unzipdir)){ deldir($unzipdir); createDir($unzipdir); }else{ createDir($unzipdir); } $zip = new \ZipArchive; $res = $zip->open($zipfile); if($res !== true){ return false; } $docnum = $zip->numFiles; $ret = true; for($i = 0; $i < $docnum; $i++) { $statInfo = $zip->statIndex($i); if($statInfo['crc'] == 0 && $statInfo['comp_size'] == 0) { //目录 createDir(iconv('UTF-8', 'GB2312', $unzipdir.'/'.$statInfo['name']), 0777, true); } else { //文件 //拷贝文件,特别的改动,iconv的位置决定copy能不能work $fileName = iconv('UTF-8', 'GB2312', $unzipdir.'/'.$statInfo['name']); $aimDir = dirname($fileName); createDir($aimDir); if(copy('zip://'.$zipfile.'#'.$statInfo['name'], $fileName) == false){ $ret = false; break; } } } $zip->close(); if(!$ret){ return false; } //解决压缩方式问题 $fileArrTemp = scandir($unzipdir); $fileArr = []; for($i = 0; $i < count($fileArrTemp); $i++){ if($fileArrTemp[$i] != '.' && $fileArrTemp[$i] != '..'){ $fileArr[] = $fileArrTemp[$i]; } } if(count($fileArr) == 1){ moveDir($unzipdir . $fileArr[0], $unzipdir, true); } return true; } //删除文件夹 function deldir($dir) { //先删除目录下的文件: if(!is_dir($dir)){ return true; } $dh = opendir($dir); while($file = readdir($dh)) { if($file != "." && $file != "..") { $fullpath = $dir."/".$file; if(!is_dir($fullpath)) { unlink($fullpath); } else { deldir($fullpath); } } } closedir($dh); //删除当前文件夹: if(rmdir($dir)) { return true; } else { return false; } } /** * 移动文件夹 * * @param string $oldDir * @param string $aimDir * @param boolean $overWrite 该参数控制是否覆盖原文件 * @return boolean */ function moveDir($oldDir, $aimDir, $overWrite = false, $chmod = false) { $aimDir = str_replace('', '/', $aimDir); $aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/'; $oldDir = str_replace('', '/', $oldDir); $oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/'; if (!is_dir($oldDir)) { return false; } if (!file_exists($aimDir)) { createDir($aimDir); } @$dirHandle = opendir($oldDir); if (!$dirHandle) { return false; } while (false !== ($file = readdir($dirHandle))) { if ($file == '.' || $file == '..') { continue; } if (!is_dir($oldDir . $file)) { moveFile($oldDir . $file, $aimDir . $file, $overWrite, $chmod); } else { moveDir($oldDir . $file, $aimDir . $file, $overWrite); } } closedir($dirHandle); return rmdir($oldDir); } /** * 移动文件 * * @param string $fileUrl * @param string $aimUrl * @param boolean $overWrite 该参数控制是否覆盖原文件 * @return boolean */ function moveFile($fileUrl, $aimUrl, $overWrite = false, $chmod = false) { if (!file_exists($fileUrl)) { return false; } if (file_exists($aimUrl) && $overWrite = false) { return false; } elseif (file_exists($aimUrl) && $overWrite = true) { @unlink($aimUrl); } $aimDir = dirname($aimUrl); createDir($aimDir); rename($fileUrl, $aimUrl); if($chmod){ @chmod($aimUrl, 0777); } return true; }