首页 > 编程技术 > php

php中时间相差8小时的多种解决办法

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

解决时区相关8小时的方法有二种,一种是在php.ini里面把date.timezone = PRC这样写,一种是在php代码中date_default_timezone_set(\'Asia/Chongqing\'); 这样就可以了。

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开发者几乎都会有碰到过,我们下面主要是介绍了php文件乱码和页面乱码以及php mysql数据库连接时乱码解决方法。

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产品即可,报错消失。

今天在做一程序时提示Deprecated: Function set_magic_quotes_runtime() is deprecated,后来网上搜索了一下才知道,原因是PHP 5.3以后的版本都不支持这个函数了。

解决办法

函数 set_magic_quotes_runtime() 在php5.3以后的版本可用

 代码如下 复制代码
ini_set(“magic_quotes_runtime”, 0)

来替换了,方法简单吧。

PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。

1. 错误提示


引用

 代码如下 复制代码

Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - 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
session.cookie_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  
session_start();  
echo $ok;  
? >  
<?php
session_start();
echo $ok;
? >


解决的方法:
当你用header函数或window.location这样的功能后,你上一个页面所注册的session变量,就会容易的丢失,关于这个问题的原因,至今仍没有一个详细的回答。
不过有解决的方法。如下所示

 代码如下 复制代码


header("Location: next.php" ."?" . SID);  
header("Location: next.php" ."?" . SID);


在跳转到下一页面的时候,将session的当前id做为一个参数,传到后一个页面。

8.session如何传数组

 

 代码如下 复制代码

session_register('data');  
$data=array(1,2,3,4);  
session_register('data');
$data=array(1,2,3,4);


 

方法是先注册后赋值

9.问题:我是不是可以用像$HTTP_GET_VARS['**']方式来访问session值呢?

回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性
$HTTP_SESSION_VARS
$_SESSION
例程:

 

 代码如下 复制代码

<?php  
session_start();  
$username = 'stangly.wrong';  
session_register('username');  
 
echo $HTTP_SESSION_VARS['username'];  
echo '<br>';  
echo $_SESSION['username'];  
? >  
<?php
session_start();
$username = 'stangly.wrong';
session_register('username');

echo $HTTP_SESSION_VARS['username'];
echo '<br>';
echo $_SESSION['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()]);  
}   
标签:[!--infotagslink--]

您可能感兴趣的文章: