php实现简单用户登录功能程序代码

 更新时间:2016年11月25日 15:40  点击:1933
下面有两种方法实现用户登录了,一个是无数据库直接登录功能,一个是有数据库查询判断登录,后者是我们最常用的管理权限与后台登录功能,希望对各位有帮助哦。

用户登录系统(没数据库)

关键的代码:
在loginUI.php中主要是:
——————————————————————————–

 代码如下 复制代码
<?php
if(error!=null){
$error=$_GET['error'];
echo $error;
echo “登陆失败,请检查您的用户名(yugaga)和密码(123456)”;
}
?>

————————————————————————————
就是在登录失败之后显示一些提示信息
在loginCheck.php中
————————————————————————————–

 代码如下 复制代码
<?php
$username=$_POST['username'];
$password=$_POST['password'];
if($username==”yugaga”&&$password==”123456″){
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), ‘/’);
$extra = ‘welcome.php?user=’.$username;
header(“Location: http://$host$uri/$extra“);
}else {
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), ‘/’);
$extra = ‘loginUI.php?error=failer’;
header(“Location: http://$host$uri/$extra“);
}
?>

———————————————————————————————————-
主要是对提交的信息进行验证,这里面用到了正则匹配,和全局变量
在welcome.php中,主要输出信息
———————————————————————————————————-

 代码如下 复制代码
<?php
$username=$_GET['user'];
echo “欢迎”.$username.”的登陆”;
?>

用户登录系统(有数据库)

我们试着去连接数据库。主要是增添加了两个文件,一个SqlHepler.php,用来获得数据库的连接,一个userService.php文件,用来处理和用户相关的操作,比如用户登录的验证,在本次中,我们只是添加了一个函数checkUserLogin($username,$password),根据用户名和密码判断用户是不是登录成功!~

html 代码

 代码如下 复制代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title>简单的登陆演示 </title>
 </head>

 <body>
 <center>
  <form action="loginCheck.php" method="post">
   用户账号:<input type="text" name="username" size="20"/><br/>
   用户秘密:<input type="password" name="password" size="20"/><br/>
   <input type="submit" value="提交"/>
  </form>
  <?php
 $error=$_GET['error'];
 if($error=='failer'){
  echo "登陆失败,请检查您的用户名(yugaga)和密码(123456)";
 }
?>
  </center>

 </body>
</html>


主要代码:
——————————————————————————————————-
<?php
include_once ‘SqlHelper.php’;
function checkUserLogin($username,$password){
$res=mysql_query(“select *from users where username=’”.$username.”‘”);
if(($listuser=mysql_fetch_array($res))!=null){
if($listuser[2]==$password){
return true;
}
}else {
return false;
}
}
?>
————————————————————————————————————-
SqlHelper的代码:
————————————————————————————————————
<?php
$server=”localhost”;
$user=”root”;
$pass=””;
$con=mysql_connect($server,$user,$pass);
mysql_select_db(“login”,$con);
?>
————————————————
登录成功之后代码

<?php
 $username=$_GET['user'];
 echo "欢迎".$username."的登陆";
?>

unlink在php中是删除文件如果单文件删除我们直接使用unlink就可以了,如果是目录中的删除我们需要遍历目录进入递归操作删除了,下面来看一个例子。

在学习本方法之前我们最rmdir();函数,这个函数就是根据指定的文件路劲,删除文件或者是文件夹,但是当删除的是文件夹,并且文件夹里面还有内容的时候,就会出现Directory not empty 的错误,这个怎么来解决呢,现在我们就通过编写一个函数来解决这个问题。

在本实例中使用到了php中比较重要的几个文件操作的函数,
1.opendir:如果该函数成功运行,将返回一组目录流(一组目录字符串),如果失败将返回错误[error]。你可以在函数的最前面加上“@”来隐藏错误。
2.readdir:从目录留里面里面的返回的结果是,首先是一个.(表示这个目录,进入目录开始读取),返回..(表示已经在目录中,正在读取目录中的文件)   然后返回文件或者文件夹的名字,如果没有则返回false
3.closedir:关闭目录流
完整代码:

 代码如下 复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<?php
function delDirAndFile($dirName,$flag) {
if (@$handle = opendir ( "$dirName" )) {
    //如果该函数成功运行,将返回一组目录流(一组目录字符串),如果失败将返回错误[error]。你可以在函数的最前面加上“@”来隐藏错误。
while ( false!==($item = readdir($handle))) {
//从目录留里面里面的返回的结果是,首先是一个.(表示这个目录,进入目录开始读取),返回..(表示已经在目录中,正在读取目录中的文件)
//然后返回文件或者文件夹的名字,如果没有则返回false
if ($item!= "." && $item != "..") {
//这里是当有文件或者是文件夹的时候开始做出判断
if (is_dir("$dirName/$item" )) {
//如果是文件夹,递归都用
delDirAndFile("$dirName/$item");
} else {
//否则就删除文件
if (unlink ( "$dirName/$item" ))
   //判断文件是不是删除成功了
echo "删除文件 $dirName/$itemn";
}
}
}
closedir ($handle );//关闭文件目录流
if($flag==true){
if (rmdir($dirName ))
echo '目录以及文件删除成功';//最后删除输入的文件夹
}
}
}
?>

<?php
delDirAndFile("dd",false);
?>
</body>
</html>

代码的基本介绍在代码中都有说明,现在我们来看看测试的结果:
执行前的文件结构目录php中删除文件夹以及文件夹中的文件程序代码
执行时页面显示结果:php中删除文件夹以及文件夹中的文件程序代码
执行之后的问价目录结构:php中删除文件夹以及文件夹中的文件程序代码
防止表单重复提交的解决方案非常的简单,我们下面两个例子都是生成一个随机的token验证用户是不是由我们站内提交并且进行重复验证即可实现了。

在网上搜索了一下有很多站长都这样说的

1、提交按钮置disabled

当用户提交后,立即把按钮置为不可用状态。这种用js来实现。
提交前代码如下:

 代码如下 复制代码

$("#submit").attr('disabled','true');
$("#submit").val("正在提交,请稍等");

执行后,把按钮置为原来状态
代码如下:

 代码如下 复制代码

$('#submit ').removeAttr('disabled');
$("#submit ").val("确定提交");

这样只是针对一些简单的前台提交了,如果我们自己做个表单站长提交给我们php逻辑层文件就过滤这那个js了。

过期时间法

用户提交按钮后生成一个token(每次业务提交token 为唯一值)存入session,并设置过期时间。当用户再此提交时,检测token是否一致且是否过期,若一致且没有过期,则认为提交了二次

例子

 代码如下 复制代码

<?php
/*
* PHP简单利用token防止表单重复提交
* 此处理方法纯粹是为了给初学者参考
*/
session_start();
function set_token() {
 $_SESSION['token'] = md5(microtime(true));
}

function valid_token() {
 $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false;
 set_token();
 return $return;
}

//如果token为空则生成一个token
if(!isset($_SESSION['token']) || $_SESSION['token']=='') {
 set_token();
}

if(isset($_POST['test'])){
 if(!valid_token()){
  echo "token error";
 }else{
  echo '成功提交,Value:'.$_POST['test'];
 }
}
?>
<form method="post" action="">
 <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>">
 <input type="text" name="test" value="Default">
 <input type="submit" value="提交" />
</form>

方法二

 代码如下 复制代码

<?php
//开启session
session_start();
//如果有提交标识
if(isset($_GET['action']) && $_GET['action'] === 'save'){

 //如果有session且跟传过来的值一样才算提交
 if(isset($_SESSION['__open_auth']) && isset($_POST['auth']) && $_SESSION['__open_auth'] == $_POST['auth']){
  print_r($_POST);
  $_SESSION['__open_auth'] = null;//清空
 } else {

  //走起
  header("location: post.php");
 }
 exit();
}

//授权
$auth = $_SESSION['__open_auth'] = time();

?>
<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <title>post</title>
</head>
<body>
 <form action="post.php?action=save" method="post">
  <ul>
   <li>
    <input type="hidden" name="auth" value="<?php echo $auth;?>">
    <input type="text" name="userName">
   </li>
   <li>
    <input type="password" name="userpass">
   </li>
   <li>
    <input type="submit" value="走起">
   </li>
   <li>
    <?php echo time(); ?>
   </li>
  </ul>
 </form>
</body>
</html>

mysql php数据库重复记录防止

 代码如下 复制代码

<?php
$link=mysql_connect(‘localhost’,’root’,’1234’); //得到MySQL数据库连接
$username=$_GET["name"]; //得到从客户端表单传过来的数据
$q="select * from usertable where user_name='$username'";
mysql_query("SET NAMES gb2312"); //避免出现中文乱码
$rs = mysql_query($q, $link); //查询数据库
$num_rows = mysql_num_rows($rs); //得到查询结果的总行数
if($num_rows==0)
// 烈火? liehuo.net 欢迎复制,拒绝恶意采集 liehuo.net
{
$exec="insert into student (user_name) values ($username)";
mysql_query("SET NAMES gb2312");
mysql_query($exec, $link); //若没有此用户则将数据插入到数据库(注册用户)
echo "用户注册成功!";
}
else
{
echo "该用户名已存在,请重新选择用户名!";
}
?>

session过期法有非常重要的一点是一个session设置与提交成功与不成功时的一个session验证了,这个有点像登录一样的如果登录成功了我们要清除session这个原理也差不多。

取所有内容中图片的地址我们必须使用正则表达式来匹配了,如果不使用它来匹配我们是无法获取到或才能获取到也是非常的麻烦了,下面我们一起来看看我整理了几段匹配图片地址程序代码吧。

图片网址规范的html代码无非就是

《img title="??" src="/wp-admin/%E5%9B%A73" alt="??" title="??" width="5" height="6" /》

??和??是非必需的,若要通过XHTML认证??、??、??必不可少,??是核心内容,当然就不能少了。

就正则谈正则的话,我写出的最短匹配是

(?<=img.+?src=").*?(?=")

不过,这条在php里不行,会出现:

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset *** in ***

纠结了很久,都不行,原因何在呢?试了很多次,终于发现问题在(?<=img.+?src=")这个零宽断言里,在php中,零宽断言里不支持类似“*”、“+”这些无限次的东西,于是报错了,把“.+?”改为定长就好。不过,要“img”和“src=”之间定长基本上是不可能的。通常,图片地址的img和src只会相隔一个很简单的空格,但不排除某些情况在src之前,img后有alt、titlte等东西。

所以

(?<=img.src=").*?(?=")

(?<=img\ssrc=").*?(?=")

可能可以,但不保证100%没问题。

你也许会问,单纯

(?<=src=").*?(?=")

不行吗?通常情况,可以,但,搜索过页面的盆友应该知道,除了图片地址用src开头以外,javascript地址也用src开头!而且,太多神通广大的不可预知因素隐含其中,于是这个貌似很简短完美的写法就行不通了。

你又或许会问,聪明简短的不行,我把图片的后缀列出来,总该可以了吧,如

(?<=src=").*?\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)

的确,这个写法实在是很老实,不过,你见过没有后缀的图片?wwe.com 有很多这种例子呢

段一,匹配地址方法

内容:

 代码如下 复制代码

<a href="/item/2864756" target="_blank"><img src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg" height="268" width="200px"/></a>
<a href="/item/2864756" target="_blank"><img src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg" height="268" width="200px"/></a>
<a href="/item/2864756" target="_blank"><img src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg" height="268" width="200px"/></a>

PHP代码:

$p = "/src=\"([^\"]+)/isu";
//$p = "/<[^>]+>/isu";
//$p = "/<a[^>]+>/isu";
preg_match_all($p, $html, $m);
var_dump($m);

结果:

Array
(
    [0] => Array
        (
            [0] => src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg
            [1] => src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg
            [2] => src="/pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg
          
 
    [1] => Array
        (
            [0] => /pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg
            [1] => /pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg
            [2] => /pic/r/e6/14/28b4766b65373ae6a3b3faccc81f_400_536.jpg
          
        )
 
)

段二,

 代码如下 复制代码

newstext=preg_replace(preg_replace('/(<img[^>]+src\s*=\s*”?([^>"\s]+)”?[^>]*>)/im', ‘<a href=”$2″>$1</a>', $newstext);

1.preg_replace和str_replace的区别:

str_replace只是纯字符替换,而preg_replace才是正则替换

2.$0,$1,$2等的说明:

$0指的是被整个模式所匹配的文本;

$1指的是首个 ( ) 引用的串;

$2指的是第二个()引用的串; 以此类推。

网页返回状态代码很多站长会去查自己网站状态码是不是200或错误页面是不是404代码了,那么我们使用最多的查看方法就是使用站长工具或ff浏览器来查,但有很多朋友不知道可以自己写一个查看状态代码的功能哦。

方法一,使用 fsockopen

严重鄙视curl_getinfo!

 代码如下 复制代码

function get_http_code($url="localhost", $port=80, $fsock_timeout=10){
    set_time_limit(0);
    ignore_user_abort(true);
 
    // 记录开始时间
    list($usec, $sec) = explode(" ", microtime(true));
    $timer['start'] = (float)$usec + (float)$sec;
 
    // 校验URL
    if(!preg_match("/^https?:\/\//i", $url)){
        $url = "http://".$url;
    }
    // 支持HTTPS
    if(preg_match("/^https:\/\//i", $url)){
        $port = 443;
    }
 
    // 解析URL
    $urlinfo = parse_url($url);
    if(empty($urlinfo['path'])){
        $urlinfo['path'] = '/';
    }
    $host = $urlinfo['host'];
    $uri = $urlinfo['path'] . (empty($urlinfo['query'])?'':$urlinfo['query']);
 
    // 通过fsock打开连接
    if(!$fp = fsockopen($host, $port, $errno, $error, $fsock_timeout)){
        list($usec, $sec) = explode(" ", microtime(true));
        $timer['end'] = (float)$usec + (float)$sec;
        $usetime = (float)$timer['end'] - (float)$timer['start'];
 
        return array('code'=>-1, 'usetime'=>$usetime);
    }
 
    // 提交请求
    $status = socket_get_status($fp);
    $out = "GET {$uri} HTTP/1.1\r\n";
    $out .= "Host: {$host}\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $write = fwrite($fp, $out);
    if(!$write){
        list($usec, $sec) = explode(" ", microtime(true));
        $timer['end'] = (float)$usec + (float)$sec;
        $usetime = (float)$timer['end'] - (float)$timer['start'];
 
        return array('code'=>-2, 'usetime'=>$usetime);
    }
 
    $ret = fgets($fp, 1024);
    preg_match("/http\/\d\.\d\s(\d+)/i", $ret, $m);
    $code = $m[1];
    fclose($fp);
 
    list($usec, $sec) = explode(" ", microtime(true));
    $timer['end'] = (float)$usec + (float)$sec;
    $usetime = (float)$timer['end'] - (float)$timer['start'];
 
    return array('code'=>$code, 'usetime'=>$usetime);
}

file_get_contents 是 fsockopen 功能的简单打包,效率稍低些,但是抓取成功率很高,所以在 snoopy 出问题的时候我一般那他来。5.0.0 添加了对 context 的支持,有了context,他也可以发送 header 信息,自定义用户 agent, referer, cookies 都不在话下。5.1.0 添加了 offset 和 maxlen 参数,可以只读文件的一部分内容。

方法二,使用snoopy.class.php

Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。

 代码如下 复制代码

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.spiegel.de/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
/**
*But as noted before if the server doesn't honor this header but sends the whole file curl will download all of it. E.g. http://www.111cn.net ignores the header. But you can (in addition) set a write function callback and abort the request when more data is received, e.g.
* php 5.3+ only
* use function writefn($ch, $chunk) { ... } for earlier versions
*/
$writefn = function($ch, $chunk) {
  static $data='';
  static $limit = 500; // 500 bytes, it's only a test
  $len = strlen($data) + strlen($chunk);
  if ($len >= $limit ) {
    $data .= substr($chunk, 0, $limit-strlen($data));
    echo strlen($data) , ' ', $data;
    return -1;
  }
  $data .= $chunk;
  return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.111cn.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$result = curl_exec($ch);
curl_close($ch);

一些常见的状态码为:

200 - 服务器成功返回网页
404 - 请求的网页不存在
503 - 服务器超时
301 - 页面重定向

[!--infotagslink--]

相关文章

  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • js检测用户输入密码强度

    一个用Javascript检测用户输入密码强度的效果代码,以下代码主要是从以下四个方面检测用户输入的密码的强度的,有兴趣的朋友可以自己添加或修改成自己想要的形式! 1. 如果输入的密码位数少于5位,那么就判定为弱。 2. 如果...2015-10-23
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
  • php导出csv格式数据并将数字转换成文本的思路以及代码分享

    php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07