用PHP整理照片和视频文件
时间:2020-01-08
本文章向大家介绍用PHP整理照片和视频文件,主要包括用PHP整理照片和视频文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这个年代,谁要没有几张照片都对不起自己。从有相机到照的第一张照片起,留下了太多美好的记忆,记忆已成过往,回忆却希望永恒。奈何这些年照片太多,粗略看了下,将近70G,从这些个照片里找些回忆,翻找起来太麻烦,作为一个农场主的“老农民”,必须得想个办法整理下。梳理了自己的问题和需求如下:
花了2小时,整理了一段小代码,不到3分钟所有的照片和视频就规规矩矩,服服帖帖了。代码如下:
<?php
/**
* 相册大翻转
* @param $process_dir 要处理的文件夹
* @param $tidy_dir 目标文件夹
* * @return bool
*/
function read_all($process_dir,$tidy_dir)
{
$i=0;
if(!is_dir($process_dir)) return false;//如果传过要处理的不是文件夹,则直接返回false
$handle = opendir($process_dir);
if ($handle) {
while (($fl = readdir($handle)) !== false) {
$temp = $process_dir . DIRECTORY_SEPARATOR . $fl;
if (is_dir($temp) && $fl != '.' && $fl != '..') {
read_all($temp,$tidy_dir);
}
else{
if ($fl != '.' && $fl != '..') {
if(strtolower(substr(strrchr($temp, '.'), 1))=='jpg' || strtolower(substr(strrchr($temp, '.'), 1))=='jpeg'){
$exif_info=getExif($temp);
if($exif_info)
{
if(array_key_exists('EXIF',$exif_info) && array_key_exists('DateTimeOriginal',$exif_info['EXIF']))
{
$file_exif_date=$exif_info['EXIF']['DateTimeOriginal'];
}
elseif(array_key_exists('IFD0',$exif_info) && array_key_exists('DateTime',$exif_info['IFD0']))
{
$file_exif_date=$exif_info['IFD0']['DateTime'];
}
elseif(array_key_exists('FILE',$exif_info) && array_key_exists('FileDateTime',$exif_info['FILE']))
{
$file_exif_date=date('Y-m-d H:i:s',$exif_info['FILE']['FileDateTime']);
}
else
{
$file_exif_date='';
}
}
else
{
if(is_file($temp))
{
$file_date=filemtime($temp);
$file_exif_date=date('Y-m-d H:i:s',$file_date);
}
}
$file_dir=empty($file_exif_date)?'temp':date('Y',strtotime($file_exif_date)).DIRECTORY_SEPARATOR.date('m',strtotime($file_exif_date));
$file_dir=$tidy_dir.DIRECTORY_SEPARATOR.$file_dir;
$file_name=empty($file_exif_date)?md5($fl):date('Ymd@His',strtotime($file_exif_date));
$file_full_name=$file_name.'.'.substr(strrchr($temp, '.'), 1);
$dest_file=$file_dir.DIRECTORY_SEPARATOR.$file_full_name;
$sour_size=filesize($temp);
if(file_exists($dest_file))
{
$dest_size=filesize($dest_file);
if($sour_size==$dest_size)
{
unlink($temp);
continue;
}
else
{
$i++;
$file_full_name=$file_name.'_'.$sour_size.'.'.substr(strrchr($temp, '.'), 1);
}
}
echo $dest_file."<br>";
create_folders($file_dir);
rename($temp,$file_dir.DIRECTORY_SEPARATOR.$file_full_name);
}
else
{
if(is_file($temp))
{
$fiel_type=strtolower(substr(strrchr($temp, '.'), 1));
$file_exif_date=filemtime($temp);
$file_dir=empty($file_exif_date)?'temp':date('Y',$file_exif_date).DIRECTORY_SEPARATOR.date('m',$file_exif_date);
$file_dir=$tidy_dir.DIRECTORY_SEPARATOR.'video'.DIRECTORY_SEPARATOR.$fiel_type.DIRECTORY_SEPARATOR.$file_dir;
$file_name=empty($file_exif_date)?md5($fl):date('Ymd@His',$file_exif_date);
$file_full_name=$file_name.'.'.substr(strrchr($temp, '.'), 1);
$dest_file=$file_dir.DIRECTORY_SEPARATOR.$file_full_name;
$sour_size=filesize($temp);
if(file_exists($dest_file))
{
$dest_size=filesize($dest_file);
$file_exif_date_dest=filemtime($dest_file);
if($sour_size==$dest_size && $file_exif_date==$file_exif_date_dest)
{
unlink($temp);
continue;
}
else
{
$i++;
$file_full_name=$file_name.'_'.$sour_size.'.'.substr(strrchr($temp, '.'), 1);
}
}
echo $file_dir.DIRECTORY_SEPARATOR.$file_full_name."<br>";
create_folders($file_dir);
rename($temp,$file_dir.DIRECTORY_SEPARATOR.$file_full_name);
}
}
}
}
}
}
}
/**
* 检查并删除为空的文件夹
* @param $path
*/
function rm_empty_dir($path){
echo '目录:'.$path."<br>";
if(is_dir($path) && ($handle = opendir($path))!==false){
// print_r($path);exit;
while(($file=readdir($handle))!==false){// 遍历文件夹
if($file!='.' && $file!='..'){
$curfile = $path.DIRECTORY_SEPARATOR.$file;// 当前目录
if(is_dir($curfile)){// 目录
rm_empty_dir($curfile);// 如果是目录则继续遍历
if(count(scandir($curfile))==2){//目录为空,=2是因为.和..存在
rmdir($curfile);// 删除空目录
}
}
}
}
closedir($handle);
}
}
/**
* 检查并建立目标文件夹
* @param $dir
* @return bool
*/
function create_folders($dir) {
return is_dir($dir) or (create_folders(dirname($dir)) and mkdir($dir, 0777));
}
/**
* 获取图片EXIF信息
* @param $img
* @return array
*/
function getExif($img){
$exif = @exif_read_data($img,0,true);
return $exif;
}
error_reporting(E_ERROR | E_WARNING | E_PARSE);
set_time_limit(0);
define("SOUR_DIR","J:\\photo");
define("DEST_DIR","J:\\tidy-up");
read_all(SOUR_DIR,DEST_DIR);
rm_empty_dir(SOUR_DIR);
原文地址:https://www.cnblogs.com/jessicor/p/12165921.html
- 老域名做新站如何能快速得上首页?
- Silverlight:分包下载及SEO优化方案
- jQuery调用RESTful WCF示例(GET方法/POST方法)
- "RDLC"报表-参数传递及主从报表
- 初探小程序之运营及未来方向
- 微信小程序深夜开放NFC等连接能力,未来可直接刷公交?
- Silverlight:获取ContentTemplate中的命名控件
- silverlight向wcf传递大于8192字节(8k)的字符串
- vim使用笔记
- "RDLC报表"速成指南
- Silverlight:双向绑定综合应用-自动更新集合汇总字段
- Silverlight:双向绑定综合应用-多集合的依赖绑定
- python sorted排序用法详解
- Silverlight:MouseDragElementBehavior无法应用于ListBox的变相解决办法
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- android studio 3.6.1导入项目报错提示无法下载classpath里的内容
- Linux VPS使用命令行快速查询百度网盘提取码
- Flutter 首页必用组件NestedScrollView的示例详解
- AUXPI:简单的API图床程序,支持上传到搜狗/新浪/SMMS等多个图床
- android使用TextView实现跑马灯效果
- Android 自定义 View 中使用 Spannable的实例详解
- Android实现扫描和生成二维码
- android自定义弹出框样式的实现方法
- Android实现手绘功能
- Android 实现秒转换成时分秒的方法
- Android实现简单用户注册案例
- Android原生视频播放VideoView的使用
- Android table布局开发实现简单计算器
- Android实现面包屑功能的代码(支持Fragment联动)
- Android自定义带动画效果的圆形ProgressBar