前几天工作中要做这样一个功能,有八百多个系统 生成的会员;给这八百多个系统会员上传图片;然后把图片名放入数据库。
第一步:
第一步肯定是首先把图片上传到对应的图片目录下,直接用框架中已经有的上传类:
try {
$upload=new Upload();
$upload->set_ext(array('zip'));
$path='目录名';
if ( ! Io::mkdir($path)) // 创建目录
{
throw new Exception("无法创建文件上传目录:$path");
}
$upload->set_path($path);
if(!$upload->is_allow_ext($_FILES['files']['name']))
{
$this->show_message('必须zip格式数据', '0', NULL, TRUE);
}
$result=$upload->save($_FILES['files']);
$archive = new Archive_Zip();
$archive->set_target($path)->decompress($result['file']);
unlink($result['file']);//删除使用后的zip;
$this->show_message('导入成功', '1', array(array('text'=>'返回导入页面','href'=>'***跳转的链接地址***')),TRUE);
}catch(Exception $e){
$this->show_message('图片导入失败', '0', NULL, TRUE);
}
}
?>
第二步:
图片上传完成后,就应该把目录下所有的系统会员图片名称取出来,那就得用遍历了。想想也不用那么麻烦了,php自带函数glob();
glob()函数返回匹配指定模式的文件名或目录。
该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。
//获取目录所有文件并将结果保存到数组
foreach(glob("目录名/*") as $d){
$tmp=explode('.',$d);
$k=end($tmp);
//如果是文件,并且后缀名为jpg png的文件
if(is_file($d)&&in_array($k,array('jpg','png'))){
$files[]=str_replace('******目录名/','',$d);
}
}
?>
循环过程中因为我只想得到图片名称,所以我把前面的目录替换为空。
第三步:
列出所有的图片后就该把图片文件名插入数据库了。
写个循环就可以了啊。
首先,用SELECT。。。。。。。。查出系统会员,然后计算出系统会员的个数,
//查出系统会员
$member= DB::query(Database::SELECT,
" SELECT * FROM 会员表名 WHERE 是否为系统会员 =1; ")
->execute()
->as_array();
?>
然后再循环插入数据库:
for($i=0;$i
$data = array(
'图片字段' => $files[$i],
);
DB::update('会员表')
->set($data)
->where('系统会员ID', '=', $member[$i]['系统会员ID'])
->execute();
}
?>
OK。就这样就搞定了。
下面再介绍一下函数glob的使用例子:
使用 Glob() 查找文件
很多PHP的函数都有一个比较长的自解释的函数名,但是,当你看到?glob() 的时候,你可能并不知道这个函数是用来干什么的,除非你对它已经很熟悉了。
你可以认为这个函数就好?scandir() 一样,其可以用来查找文件。
// 取得所有的后缀为PHP的文件
$files = glob('*.php');
print_r($files);
/* 输出:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/
你还可以查找多种后缀名
// 取PHP文件和TXT文件
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* 输出:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/
你还可以加上路径:
$files = glob('../images/a*.jpg');
print_r($files);
/* 输出:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
如果你想得到绝对路径,你可以调用?realpath() 函数:
$files = glob('../images/a*.jpg');
// applies the function to each array element
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/