您的位置:首页 > 编程语言 > PHP开发

php 打包图片

2015-05-28 17:17 429 查看
1.为一组图片打包

//yii2  先引用
use ZipArchive;
public function actionZip(){
$model=new Subjectzip;
$arr=  Subjectitem::find()->all();
// $arr是一组图片
$url=array();
$filename=array();
$yuan=array();
$local_path=array();
$zip = new \ZipArchive();
$filename_zip = "./zips/" . time().".zip";
//一个包的名字
if ($zip->open($filename_zip, ZIPARCHIVE::CREATE) !== TRUE) {
exit("cannot open <$filename_zip>\n");
}
for($i=0;$i<count($arr);$i++){
$url[]=$arr[$i]['pic'];//图片路径
$yuan[] =explode("/", $url[$i]);
$filename[]=end($yuan[$i]);//去图片名称
$local_path[] = $this->getImg($url[$i], $filename[$i]);//本地路径
$zip->addFile($local_path[$i], $filename[$i]);//图片添加到包中
}
//kb  压缩包的大小
$model->zip_size= @ceil(filesize($zip->filename)/1024);
// 闭包
$zip->close();
}
//getImg方法
public function actionGetImg($url = "", $filename = "",$extend_path="") {
//去除URL连接上面可能的引号
//$url = preg_replace( '/(?:^['"]+|['"/]+$)/', '', $url );
$hander = curl_init();
//获取今天的日期,然后进行拼接,创建路径,保存图片
$data = date("Y", time()) . '/' . date("m", time()) . '/' . date("d", time()) . '/';
if($extend_path !=""){
$extend_path.="/";
}
$save_path = "./upload/user/".$data.$extend_path;
//创建相应了、目录
if (!file_exists($save_path)) {
$this->mkdirs($save_path);

}
$fp = fopen($save_path.$filename, 'wb');
curl_setopt($hander, CURLOPT_URL, $url);
curl_setopt($hander, CURLOPT_FILE, $fp);
curl_setopt($hander, CURLOPT_HEADER, 0);
curl_setopt($hander, CURLOPT_FOLLOWLOCATION, 1);
//curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);
//以数据流的方式返回数据,当为false是直接显示出来
curl_setopt($hander, CURLOPT_TIMEOUT, 60);
curl_exec($hander);
curl_close($hander);
fclose($fp);
return $save_path.$filename;
}
//mkdir创建文件夹
/**
* 递归创建目录
* @param type $path
* @param type $mode
*/
private function actionMkdirs($path, $mode = 0777) { //creates directory tree recursively
$dirs = explode('/', $path);
$pos = strrpos($path, ".");
if ($pos === false) { // note: three equal signs
// not found, means path ends in a dir not file
$subamount = 0;
} else {
$subamount = 1;
}

for ($c = 0; $c < count($dirs) - $subamount; $c++) {
$thispath = "";
for ($cc = 0; $cc <= $c; $cc++) {
$thispath.=$dirs[$cc] . '/';
}
if (!file_exists($thispath)) {
//print "$thispath<br>";
mkdir($thispath, $mode);
}
}

}


这样就完成了一组图片的打包操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息