You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							247 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							247 lines
						
					
					
						
							5.0 KiB
						
					
					
				| <?php | |
| 
 | |
| $remoteUrl = 'https://article.kkxxkj.cn/api/getArticle'; | |
| $saveSrc = '/www/wwwroot/article.kkxxkj.cn/public/uploads'; | |
| 
 | |
| 
 | |
| try { | |
|     while (true) { | |
|         saveRemote($remoteUrl, $saveSrc); | |
|          | |
|         sleep(60); | |
|     } | |
| }catch(\Exception $e) { | |
|     echo $e->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; | |
| }
 |