php5后都要自己设置时区,要么修改php.ini的设置,要么在代码里修改。
在PHP.INI中设置时区
代码如下 | 复制代码 |
date.timezone = PRC |
在代码中设置时区
代码如下 | 复制代码 |
date_default_timezone_set('PRC');//其中PRC为“中华人民共和国” |
上面可以满足我们需求。
系统初始化时,加上
代码如下 | 复制代码 |
ini_set('date.timezone','Asia/Shanghai'); 或 date_default_timezone_set("PRC"); |
也可以在php中来这样写
代码如下 | 复制代码 |
<?php date_default_timezone_set('Asia/Chongqing'); echo date('Y-m-d H:i:s'); ?> |
如果你是第一种办法记得重启动你的apahce服务器,如果是第二种方法就没关系的,好了现在就解决时区相差8
PHP页面转UTF-8编码问题
1.在代码开始出加入一行:
代码如下 | 复制代码 |
header("Content-Type: text/html;charset=utf-8"); |
2.PHP文件编码问题
点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,
如果是ANSI,需要将编码改成:UTF-8。
3.PHP文件头BOM问题:
PHP文件一定不可以有BOM标签
否则,会出现session不能使用的情况,并有类似的提示:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent
这是因为,在执行session_start() 的时候,整个页面不能有输出,但是当由于前PHP页面存在BOM标签,
PHP把这个BOM标签当成是输出了,所以就出错了!
所以PHP页面一定要删除BOM标签
删除这个BOM标签的方法:
1.可以用Dreamweaver打开文件,并重新保存,即可以去除BOM标签!
2.可以用EditPlus打开文件,并在菜单“首选项”->“文件”->"UTF-8标识",设置为:“总是删除签名”,
然后保存文件,即可以去除BOM标签!
4.PHP以附件形式保存文件的时候,UTF-8编码问题:
PHP以附件形式保存文件,文件名必须是GB2312编码,
否则,如果文件名中有中文的话,将是显示乱码:
如果你的PHP本身是UTF-8编码格式的文件,
需要将文件名变量由UTF-8转成GB2312:
iconv("UTF-8", "GB2312", "$filename");
利用程序来实例字符截取方法
代码如下 | 复制代码 |
function utf8_substr($str,$len) { for($i=0;$i<$len;$i++) { $temp_str=substr($str,0,1); if(ord($temp_str) > 127){ $i++; if($i<$len){ $new_str[]=substr($str,0,3); $str=substr($str,3); } }else { $new_str[]=substr($str,0,1); $str=substr($str,1); } } return join($new_str); } |
MYSQL数据库使用UTF-8编码的问题
1.用phpmyadmin创建数据库和数据表
创建数据库的时候,请将“整理”设置为:“utf8_general_ci”
或执行语句:
代码如下 | 复制代码 |
CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; |
创建数据表的时候:如果是该字段是存放中文的话,则需要将“整理”设置为:“utf8_general_ci”,
如果该字段是存放英文或数字的话,默认就可以了。
相应的SQL语句,例如:
代码如下 | 复制代码 |
CREATE TABLE `test` ( `id` INT NOT NULL , `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ; |
2.用PHP读写数据库
在连接数据库之后:
代码如下 | 复制代码 |
[hide]$connection = mysql_connect($host_name, $host_user, $host_pass); |
加入两行:
代码如下 | 复制代码 |
mysql_query("set character set 'utf8'");//读库 mysql_query("set names 'utf8'");//写库 |
就可以正常的读写MYSQL数据库了。
用的appserv-win32-2.5.10做的环境,装这个包的时候用默认的utf8编码。
在写数据库连接文件时,写成:
代码如下 | 复制代码 |
$conn = mysql_connect("$host","$user","$password"); mysql_query("SET NAMES 'UTF8'"); mysql_select_db("$database",$conn); |
然后在做页面时,注意这句:
代码如下 | 复制代码 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
这样不管输入数据库的中文,还是页面显示,就都正常了。
在DW CS4版里,默认生成的也是utf8页面。
同样的,如果一开始写数据库连接文件时写成:
代码如下 | 复制代码 |
mysql_query("SET NAMES 'GBK'"); |
那页面也要相应变成:
代码如下 | 复制代码 |
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> |
总结,最后主要是页面编码要统一就可以很方便的解决乱码问题,特别是在mysql_query()这个set names的设置必须和页面及数据库编码统计一就可以了。
本文章介绍关于Fatal error: Call to undefined method Mage_Adminhtml_Block_Abstract::getexceptions() 的解决办法,有碰到此类问题的朋友可以参考一下。Magento在产品导入的时候出现错误:
“Fatal error : Call to undefined method Mage_Adminhtml_Block_Abstract::getexceptions() in appcodecoreMageAdminhtmlBlockSystemConvertProfileRun.php on line 167 ”
当前用的Magento版本Magento1.5.1。
解决办法:
找到文件“appcodecoreMageAdminhtmlBlockSystemConvertProfileRun.php ”
注释掉#167 - #168行 ,像
// if (!is_null(parent::getExceptions()))
// return parent::getExceptions();
注释掉#197行 ,
// parent::setExceptions($exceptions);
保存后重新导入Magento产品即可,报错消失。
解决办法
函数 set_magic_quotes_runtime() 在php5.3以后的版本可用
代码如下 | 复制代码 |
ini_set(“magic_quotes_runtime”, 0) |
来替换了,方法简单吧。
PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。1. 错误提示
引用
代码如下 | 复制代码 |
Warning: Cannot send session cookie - headers already sent |
分析及解决办法
这一类问题,的原因是你在程序中使用session_start()时,之前已经有实际的html内容输出了。或许你说,我没有啊,我只不过是echo或 print一条消息了。很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的 session_start()调到程序的第一行。
2. 错误提示
引用
代码如下 | 复制代码 |
Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed |
分析及解决方法
出现这样的错误语句一般是因为你的php.ini中关于session.save_path一项没有设置好,解决的方法是将session.save_path和session.cookie_path 设置置为
引用
代码如下 | 复制代码 |
session_save_path = c:\temp |
然后在c:\目录下建立一个temp目录,即可
3. 错误提示
引用
代码如下 | 复制代码 |
Warning: Trying to destroy uninitialized session in |
分析及解决方法
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的。很多的朋友认为session_destroy()函数可以独立的运行,其实不然。解决的方法是在你调session_destroy()函数之前,要用session_start()开启session的功能。
4.问题:怎么获得当前session的id值呢?
最简单的方法是:
echo SID;
你会发现的。
5. 问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了session_start()的缘故呢?
答: 或许你确实认真的检查了你的php程序,在引用header()之前确实也没有任何的输出,并且在你的include文件中也没有任何的输出!但是你是否用光标键在? >这个PHP代码结束语句后移动检查呢?那么你会发现在? >这个后面,有一个空行或几个空格,你删除了这几个空行或空格,那么问题就解决了。
注:此问题,会出PHP4.1.2中,更高版本,没有测试过。
6.问:用session做登录主页面后,其它页面怎么用session限制登录
答:最简单的方法是
代码如下 | 复制代码 |
session_start(); if(!session_registered('login') ││ $login != true) { echo "你没有登陆"; exit; } session_start(); if(!session_registered('login') ││ $login != true) { echo "你没有登陆"; exit; } |
7.问题:我用session_register()注册了session变量,可是当我用header或用javs script的重定向语句,那么在一下页面中,我却访问不到session所注册的变量值。请问如何解决?
问题的程序片段:
代码如下 | 复制代码 |
<?php session_start(); $ok = 'love you'; session_register('ok'); header("location : next.php"); ? > <?php session_start(); $ok = 'love you'; session_register('ok'); header("location : next.php"); ? > |
next.php
代码如下 | 复制代码 |
<?php |
解决的方法:
当你用header函数或window.location这样的功能后,你上一个页面所注册的session变量,就会容易的丢失,关于这个问题的原因,至今仍没有一个详细的回答。
不过有解决的方法。如下所示
代码如下 | 复制代码 |
|
在跳转到下一页面的时候,将session的当前id做为一个参数,传到后一个页面。
8.session如何传数组
代码如下 | 复制代码 |
session_register('data');
|
方法是先注册后赋值
9.问题:我是不是可以用像$HTTP_GET_VARS['**']方式来访问session值呢?
回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性
$HTTP_SESSION_VARS
$_SESSION
例程:
代码如下 | 复制代码 |
<?php echo $HTTP_SESSION_VARS['username']; |
请参照此例程修改符合您自己的程序。
问题10: session_unregister() 和 session_destroy() 有何区别?
session_unregister ()函数主要作用是注消当前的一个session变量。不过要注意的是,如果你用$HTTP_SESSION_VARS或$_SESSION在当前页面中引用过session变量,那么你可能需要和unset()配合 来注消session变量。
而session_destroy()是清除当前的session环境。意思就是说,当你用session_destroy()函数后,那么你就不可能再用session_is_registered ()来检测session的变量了。但是需要注意的是他不能清除global中的session或使用了session cookie的中的session.所以在用session_destroy之前,最好不要用$HTTP_SESSION_VARS $_SESSION来访问session.
例程:
代码如下 | 复制代码 |
if(isset($_COOKIE[session_name()])) { session_start(); session_destroy(); unset($_COOKIE[session_name()]); } |