首页 > 编程技术 > php

php 中fgetcsv函数将csv文件导入mysql数据库

发布时间:2016-11-25 17:28

本文章来给各位同学详细介绍fgetcsv函数将csv文件导入mysql数据库具体函数,同时在中文乱码的解决办法,各位朋友可参考。


在处理大批量excel数据到mysql数据库时,用php自带的fgetcsv函数先从csv文件中逐行获取数据,再配合sql语句导入数据库,如果遇到了乱码问题,可以使用iconv函数进行转码。


代码示例:

 代码如下 复制代码

<?php
$row = 1;
$handle = fopen("test.csv","r");
while ($data = fgetcsv($handle, 1000, ",")) {//1000为csv文件总行数,逗号是数据分隔符,这两个参数均可以忽略不写
$num = count($data);
echo "<p> 第 $row行有$num个字段。 <br>n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br>n";
}
}
fclose($handle);
?>

导入mysql时中文乱码

用网上通用的方法读取并上传csv文件内容进入mysql数据库中时,中文显示乱码,即使对数据用iconv函数转码后仍然乱码,这时可以用setlocale()函数:

这个函数经查阅是配置地域信息用的,在读取和写入csv数据前先用此函数进行定义,比如我的csv文件是无BOM的UTF-8格式,就先用如下函数进行定义:

 代码如下 复制代码

setlocale(LC_ALL, 'zh_CN.UTF8′);

然后再用iconv函数对数据内容进行转码入库等后续操作。

本文章来给大家详细介绍关于在php curl 分离header和body信息测试实例,以前可能大家没注意,后来分析了一下,下面给大家介绍。

php中可以通过curl来模拟http请求,同时可以获取http response header和body,当然也设置参数可以只获取其中的某一个。当设置同时获取response header和body时候,它们会一同作为结果返回。这时需要我们自己来分离它们。

下面代码是模拟向google一个http GET请求

 代码如下 复制代码

function httpGet() {
    $url = 'http://www.google.com.hk';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);    //表示需要response header
    curl_setopt($ch, CURLOPT_NOBODY, FALSE); //表示需要response body
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);

    $result = curl_exec($ch);

    if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
        return $result;
    }

    return NULL;
}

调用上述方法后看到如下类似输出:

HTTP/1.1 200 OK
Date: Tue, 09 Jul 2013 14:21:08 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=75e996a7ad21f47b:FF=0:NW=1:TM=1373379668:LM=1373379668:S=TTLQQN-jwGDYnkkY; expires=Thu, 09-Jul-2015 14:21:08 GMT; path=/; domain=.google.com.hk
Set-Cookie: NID=67=PPu7FfFeuZqwfsrUifgzjidX4JZxxCPLe9xFHjdXhfHpzs3gaykFSH5uGXy2esWTlp_rdqIYkjFDMollzI_sA-8owxD3mDh6KCRwdMa9-g5VChj0E5XAGNjo9d-sZfLN; expires=Wed, 08-Jan-2014 14:21:08 GMT; path=/; domain=.google.com.hk; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

<!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"><head><meta itemprop="image" content="/images/google_favicon_128.png"><title>Google</title><script>(function(){
window.google={kEI:"VBzcUdWuHOmtiQf64IHoCw",getEI:function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute("eid")));
……
这里可以看到结果中header和body信息是在一起的,那么如何分离它们呢。方法有二种,一是通过curl自带的curl_getinfo()方法获取头的长度,然后使用substr来分割字符串。示例代码如下:

 代码如下 复制代码

$response = curl_exec($ch);

if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $headerSize);
    $body = substr($response, $headerSize);
}

第二种方法基于header和body是通过两个回车换行来分割的,所以可以通过如下代码实现:

 代码如下 复制代码

$response = curl_exec($ch);

if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
    list($header, $body) = explode("rnrn", response, 2);
}

获取浏览器版本在php中直接使用HTTP_USER_AGENT就可以了,但是要具体判断是那个浏览器,什么版本我们需要一个个去判断了,

例1

 代码如下 复制代码

function get_user_browser() {
 if (empty($_SERVER['HTTP_USER_AGENT'])) {
  return '';
 }

 $agent = $_SERVER['HTTP_USER_AGENT'];
 $browser = '';
 $browser_ver = '';

 if (preg_match('/MSIEs([^s|;]+)/i', $agent, $regs)) {
  $browser = 'Internet Explorer';
  $browser_ver = $regs[1];
 } elseif (preg_match('/FireFox/([^s]+)/i', $agent, $regs)) {
  $browser = 'FireFox';
  $browser_ver = $regs[1];
 } elseif (preg_match('/Maxthon/i', $agent, $regs)) {
  $browser = '(Internet Explorer ' .$browser_ver. ') Maxthon';
  $browser_ver = '';
 } elseif (preg_match('/Opera[s|/]([^s]+)/i', $agent, $regs)) {
  $browser = 'Opera';
  $browser_ver = $regs[1];
 } elseif (preg_match('/OmniWeb/(v*)([^s|;]+)/i', $agent, $regs)) {
  $browser = 'OmniWeb';
  $browser_ver = $regs[2];
 } elseif (preg_match('/Netscape([d]*)/([^s]+)/i', $agent, $regs)) {
  $browser = 'Netscape';
  $browser_ver = $regs[2];
 } elseif (preg_match('/safari/([^s]+)/i', $agent, $regs)) {
  $browser = 'Safari';
  $browser_ver = $regs[1];
 } elseif (preg_match('/NetCaptors([^s|;]+)/i', $agent, $regs)) {
  $browser = '(Internet Explorer ' .$browser_ver. ') NetCaptor';
  $browser_ver = $regs[1];
 } elseif (preg_match('/Lynx/([^s]+)/i', $agent, $regs)) {
  $browser = 'Lynx';
  $browser_ver = $regs[1];
 }

 if (!empty($browser)) {
    return addslashes($browser . ' ' . $browser_ver);
 } else {
  return 'Unknow browser';
 }
}

实例

 代码如下 复制代码

function get_user_browser()
{
    if (empty($_SERVER['HTTP_USER_AGENT']))
    {    //当浏览器没有发送访问者的信息的时候
        return '';
    }

    $agent       = $_SERVER['HTTP_USER_AGENT'];   
    $browser     = '';
    $browser_ver = '';

    if (preg_match('/MSIEs([^s|;]+)/i', $agent, $regs))
    {
        $browser     = 'Internet Explorer';    //当匹配到了MSIE 的时候,取得数字的那一部分房在数组$regs里
        $browser_ver = $regs[1];
    }
    elseif (preg_match('/FireFox/([^s]+)/i', $agent, $regs))
    {                           
        $browser     = 'FireFox';                //当匹配到了firefox/的时候,取得后面紧跟的数字部分
        $browser_ver = $regs[1];
    }
    elseif (preg_match('/Maxthon/i', $agent, $regs))
    {
        $browser     = '(Internet Explorer ' .$browser_ver. ') Maxthon';
        $browser_ver = '';
    }
    elseif (preg_match('/Opera[s|/]([^s]+)/i', $agent, $regs))
    {
        $browser     = 'Opera';
        $browser_ver = $regs[1];
    }
    elseif (preg_match('/OmniWeb/(v*)([^s|;]+)/i', $agent, $regs))
    {
        $browser     = 'OmniWeb';
        $browser_ver = $regs[2];
    }
    elseif (preg_match('/Netscape([d]*)/([^s]+)/i', $agent, $regs))
    {
        $browser     = 'Netscape';
        $browser_ver = $regs[2];
    }
    elseif (preg_match('/safari/([^s]+)/i', $agent, $regs))
    {
        $browser     = 'Safari';
        $browser_ver = $regs[1];
    }
    elseif (preg_match('/NetCaptors([^s|;]+)/i', $agent, $regs))
    {
        $browser     = '(Internet Explorer ' .$browser_ver. ') NetCaptor';
        $browser_ver = $regs[1];
    }
    elseif (preg_match('/Lynx/([^s]+)/i', $agent, $regs))
    {
        $browser     = 'Lynx';
        $browser_ver = $regs[1];
    }

    if (!empty($browser))
    {
       return addslashes($browser . ' ' . $browser_ver);//转义引号
    }
    else
    {
        return 'Unknow browser';
    }
}


判断是否为蜘蛛

function is_spider($record = true)    //判断是否为蜘蛛
{
    static $spider = NULL;

    if ($spider !== NULL)
    {
        return $spider;        //
    }

    if (empty($_SERVER['HTTP_USER_AGENT']))
    {
        $spider = '';

        return '';
    }

    $searchengine_bot = array(
        'googlebot',
        'mediapartners-google',
        'baiduspider+',
        'msnbot',
        'yodaobot',
        'yahoo! slurp;',
        'yahoo! slurp china;',
        'iaskspider',
        'sogou web spider',
        'sogou push spider'
    );

    $searchengine_name = array(
        'GOOGLE',
        'GOOGLE ADSENSE',
        'BAIDU',
        'MSN',
        'YODAO',
        'YAHOO',
        'Yahoo China',
        'IASK',
        'SOGOU',
        'SOGOU'
    );

    $spider = strtolower($_SERVER['HTTP_USER_AGENT']);    //将用户浏览器信息转成小写

    foreach ($searchengine_bot AS $key => $value)
    {
        if (strpos($spider, $value) !== false)                    //绝对不等于,避免字符串出现为止为0的这种情况
        {
            $spider = $searchengine_name[$key];            //返回对应的seo/seo.html" target="_blank">搜索引擎名

            return $spider;
        }
    }

    $spider = '';

    return '';
}

本文章从我一个ajax实例中提供了段关于通过图片地地址把图片保存到本址,这里我们直接通过readfile读取然后通过fopen保存即可

实例

 代码如下 复制代码

<?php
/**
 * 通过图片的远程url,下载到本地
 * @param: $url为图片远程链接
 * @param: $filename为下载图片后保存的文件名
 */
function GrabImage($url,$filename) {
 if($url==""):return false;endif;
 
 ob_start();
 readfile($url);
 $img = ob_get_contents();
 ob_end_clean();
 $size = strlen($img);
 
 //"../../images/books/"为存储目录,$filename为文件名
 $fp2=@fopen("../../images/books/".$filename, "a");
 fwrite($fp2,$img);
 fclose($fp2);
 
 return $filename;
 }
?>

函数返回图片下载完后保存的名字,那么只需在数据库中存储 图片目录+图片名即可。

Bootstrap中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮、功能完备的网站。 但是有时候我们网站前台并不需要Bootstrap,只要管理后台使用Bootstrap,那么该如何单独为一个module加载Bootstrap呢

这里有4中方法来实现这个:
1.在应用的配置文件中添加如下内容 (protected/config/main.php):

PHP

 代码如下 复制代码
    'modules'=>array(
        'admin'=>array(
            'preload'=>array('<span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/bootstrap" title="查看 bootstrap 中的全部文章" target="_blank">bootstrap</a></span>'),
            'components'=>array(
                '<span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/bootstrap" title="查看 bootstrap 中的全部文章" target="_blank">bootstrap</a></span>'=>array(
                    'class'=>'ext.bootstrap.components.Bootstrap'
            )
        ),
    // ...其他模块...
    )   

   

2.在模块初始化时加载:

 代码如下 复制代码
    public function init()
    {
        // import the module-level models and components
        $this->setImport(array(
            'admin.models.*',
            'admin.components.*',
            // 'ext.bootstrap.components.Bootstrap', // this will go to app config for components
        ));
        Yii::app()->getComponent('bootstrap');// this does the loading
    }


3.模块初始化加载的另一种方法:

 代码如下 复制代码

PHP
    public function init()
    {
        // import the module-level models and components
        $this->setImport(array(
            'admin.models.*',
            'admin.components.*',
        ));

        $this->configure(array(
                'components'=>array(
                    'bootstrap'=>array(
                        'class'=>'ext.bootstrap.components.Bootstrap'
                    )
                )
        ));
        $this->getComponent('bootstrap');
    }


4.模块加载时的另一种方法:

 代码如下 复制代码

PHP
    public function init()
    {
        // import the module-level models and components
        $this->setImport(array(
            'admin.models.*',
            'admin.components.*',
        ));

        $this->configure(array(
                'preload'=>array('bootstrap'),
                'components'=>array(
                    'bootstrap'=>array(
                        'class'=>'ext.bootstrap.components.Bootstrap'
                    )
                )
        ));
        $this->preloadComponents();
    }

标签:[!--infotagslink--]

您可能感兴趣的文章: