解决中文插入数据库乱码的方法:
直接把中文转变成utf-8格式,大多是这个问题导致的。
代码如下 | 复制代码 |
$str = iconv('gbk','utf-8',$str); |
如果还不行检查网页编码是否正确:
代码如下 | 复制代码 |
<?php |
例子
举例(由于我懒得写,网上的这个例子感觉还挺清楚的):
建表:
代码如下 | 复制代码 |
Create TABLE `net_city` ( $result=mysql_query($exec,$conn); |
后来我试了试全部都用成gbk的,也是可以的~
在查询数据时我们直接使用mysql_query()来设置
mysql_query("SET NAMES GBK"); //GBK处为编码设置
例子
下面是 "insert.php" 页面的代码:
代码如下 | 复制代码 |
<?php$con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("my_db", $con); mysql_query("SET NAMES GBK"); //GBK处为编码设置 $sql="INSERT INTO person (FirstName, LastName, Age)VALUES('$_POST[firstname]','$_POST[lastname]','$_POST[age]')"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "1 record added"; mysql_close($con) ?> |
先们来看例子
例子
代码如下 | 复制代码 |
function geturl( $url,$userinfo,$header) |
执行一会发现
Fatal error: Maximum execution time of 30 seconds exceeded in D:phpAppServwww360dtest.php on line 3
后面我在页面顶部加上
代码如下 | 复制代码 |
set_time_limit(0);//设置超时时间 |
这样就没有问题了,下面我再简单介绍一下set_time_limit详解
set_time_limit — 限制最大的执行时间set_time_limit(PH3 , PHP4)set_time_limit — 限制最大的执行时间语法 : void set_time_limit (int seconds)说明 : 设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误。
它预设的限制时间是30秒,max_execution_time的值定义在结构档案中(在PHP3中叫做php3.ini,在PHP4、PHP5则叫做php.ini),如果将秒数设为0,表示无时间上的限制。
当呼叫此函式时,set_time_limit()会从零重新开始计算最长执行的时间,也就是说,如果最长执行时间为预设的30秒,而在呼叫此函式set_time_limit(20)之前已花了25秒来执行程式,则程式最长执行的时间将会是45秒。
有些朋友说可以修改apache%C5%E4%D6%C3/" target="_blank">apache配置,但我没测试大家自动设置吧。
1、 修改是APACHE设置,在PHP.INI中找到一个参数:
max_execution_time
将后面的值调大,然后重新启动APACHE服务(centos: service httpd restart),就OK了。
如
max_execution_time = 600
file_get_contents函数本来就是一个非常优秀的php自带本地与远程文件操作函数,它可以让我们不花吹挥之力把远程数据直接下载,但我在使用它读取网页时会碰到有些页面是乱码了,下面我就来给各位总结具体的解决办法。根据网上有朋友介绍说原因可能是服务器开了GZIP压缩。
下面是用firebug查看我的博客的头信息,Gzip是开了的。
请求头信息原始头信息
代码如下 | 复制代码 |
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
可以从header信息中找到 Content-Encoding 项是 Gzip 。
解决办法比较简单。
就是用 curl 代替 file_get_contents 去获取,然后在 curl 配置参数中加一条
代码如下 | 复制代码 |
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); |
今天用 file_get_contents 抓图片的时候,开始没发现这个问题,废了老大劲才找出来
1. 使用自带的zlib库
如果服务器已经装了zlib库,用下面的代码可以轻易解决乱码问题。
代码如下 | 复制代码 |
$data = file_get_contents("compress.zlib://".$url); |
当然也可以使用curl模块来解决人我的问题这里我给各位推荐一文章,如下你感兴趣的文章
SESSION丢失意思是讲在当前页面的session是有值了,但到了另一个页面session就没有值了,这有违背了session的正常逻辑了,正常情况session是服务器全局变量是可以在当前域的任何页面使用的,那现在这种问题是什么问题呢,下面我来给大家讲一下。问题分析研究
1、客户端禁用了cookie
2、浏览器出现问题,暂时无法存取cookie
3、php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-trans-sid选项
实例分析
session_start()声明后在另外一个页面无法获得刚才申明的session值。
打开phpinfo()查看了一下SESSION条发现这两条估计是和我的情况符合要求。
找到/etc/php.ini文件把 www.111cn.net
session.use_trans_sid = 0 修改成了1
重启服务 service httpd restart还是不行,于是仔细看了
session.save_path 它有两个项 Local Value和Master Value
Local Value /var/lib/php/session
Master Value /tmp
我把这两个目录都设置权限chmod a+rwx /var/lib/php/session
chmod a+rwx /tmp
搞定,能传递了。
另外说一下,如果服务器不是自己的,那肯定无法修改权限了。
不过我的是自己的PC机,作为一个调试环境,还是希望大众一些,所以就没有考虑用session_id()来解决这个问题了
总结
1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项,
让PHP自动跨页传递session id。
2、手动通过URL传值、隐藏表单传递session id。
3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。
是在mysql中用utf8表示utf-8而已,就是指代一种编码。
在php中mysql_query(“set names utf-8″);因为mysql中定义的是utf8而不是utf-8,所以这条语句是执行不成功的,效果和mysql_query(“set names test”)一样,所以你存储和获得的mysql编码并没有改变。改为
代码如下 | 复制代码 |
mysql_query(“set names utf8″);就行了。 |
各们注意了前面是uft-8而后面是uft8这是有区别的哦,但这个对于gbk或gbk2312和网页设置又可以一样,这里估计是mysql有原因吧。