本文章来给各位同学详细介绍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--]