使用php的朋友会发现如果你刚安装好apache与php环境,会发现你系统的时间与我们中国时间是有区别的,一般情况是相隔8小时哦,下面我来介绍PHP设置时区设置方法总结。
方法一,在php页面设置时区
在页面最前面加上下面应用一种都是可以的
date_default_timezone_set用法如下
date_default_timezone_set
(PHP 5 >= 5.1.0RC1)
date_default_timezone_set -- 设定用于一个脚本中所有日期时间函数的默认时区
说明
bool date_default_timezone_set ( string timezone_identifier )
date_default_timezone_set() 设定用于所有日期时间函数的默认时区。
用法
代码如下 |
复制代码 |
1 date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海
2 date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆”
3 date_default_timezone_set('PRC');//其中PRC为“中华人民共和国”
4 ini_set('date.timezone','Etc/GMT-8');
5 ini_set('date.timezone','PRC');
6 ini_set('date.timezone','Asia/Shanghai');
7 ini_set('date.timezone','Asia/Chongqing');
|
Asia/Shanghai – 上海
Asia/Chongqing – 重庆
Asia/Urumqi – 乌鲁木齐
Asia/Hong_Kong – 香港
Asia/Macao – 澳门
Asia/Taipei – 台北
Asia/Singapore – 新加坡
如果你有服务器管理权限,我们可以在在PHP.INI中设置时区
代码如下 |
复制代码 |
date.timezone = PRC
|
去掉前面的分号 然后重启apache
可能碰到的一些问题
1.Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
2.Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
3.Notice: date_default_timezone_set(): Timezone ID 'Asia/Shanghai' is invalid
解决办法
代码如下 |
复制代码 |
date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海
date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆”
date_default_timezone_set('PRC');//其中PRC为“中华人民共和国”
|
数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存有需要的朋友可参考参考。
1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了;
2.对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了;
3.缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库,
文件缓存类:
代码如下 |
复制代码 |
<?php
class DataCache
{
/**
* 数组转换
*
* @param array $array
* @param string $arrayName
* @param array $level
*
* @return string
*/
private function arrayEval($array, $arrayName = '', $level = 0)
{
$space = str_repeat("t", $level);
if (empty($arrayName))
{
$evaluate = "arrayn$space(n";
}
else
{
$evaluate = "${$arrayName} = arrayn$space(n";
}
$space2 = str_repeat("t", $level + 1);
$comma = $space2;
if (!empty($array))
{
foreach ($array as $key => $val)
{
$key = is_string($key) ? ''' . addcslashes($key, ''\') . ''' : $key;
$val = !is_array($val) && (!preg_match('/^-?[1-9]d*$/', $val) || strlen($val) > 12) ? ''' . addcslashes($val, ''\') . ''' : $val;
if (is_array($val))
{
$evaluate .= "$comma$key => " . arrayEval($val, '', $level + 1);
}
else
{
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space2";
}
}
$evaluate .= "n$space)";
// 最后才需要一个“;”
if ($level == 0)
{
$evaluate .= ";";
}
return $evaluate;
}
/**
* 写入缓存
*
* @param string $path
* @param string $arrayName
* @param array $data
*
* @return boolean
*/
public static function writeCache($path, $arrayName, $data)
{
if ($handle = fopen($path, 'w+'))
{
$data = self::arrayEval($data, $arrayName);
$dataConvert = "<?phpn" . $data;
flock($handle, LOCK_EX);
$rs = fputs($handle, $dataConvert);
flock($handle, LOCK_UN);
fclose($handle);
if ($rs !== false)
{
return true;
}
}
return false;
}
}
|
调用方法
代码如下 |
复制代码 |
/**
* 生成文件缓存
*
* @param string $filePath 缓存文件的保存路径
* @param string $arrayName 存放在缓存文件中的数组名称
* @param array $data 数据
*
* @return boolean
*/
DataCache::writeCache($filePath, $arrayName, $data);
|
memcache来缓存数据
面提供这个文件缓存的类,希望大家可以看看。
代码如下 |
复制代码 |
<?php
/**
* 文件缓存类
* 提供文件缓存
* @author guoyubin(263421949@qq.com)
*/
class Cache_FileCache{
/**
* 设置缓存
* @param $key 缓存的关键字key
* @param $data 缓存的内容
* @param $cacheLife 缓存时间(单位为秒)如果为0 则表示无限时间
* @return Bool
*/
public static function setCache($key,$data,$cacheLife)
{
if(file_exists(__SITE_FILE_CACHE))
{
@$file = __SITE_FILE_CACHE . "/" . $key .".php";
$cache = array();
$time = __SYS_TIME;
$cache['content'] = $data;
$cache['expire'] = $cacheLife === 0 ? 0 : $time+$cacheLife;
$cache['mtime'] = $time;
$cache = serialize($cache);
$setReslut = @file_put_contents($file,$cache) or self::error(__line__,"文件写入出错");
$chmodReslut = @chmod($file,0777) or self::error(__line__,"设定文件权限失败");
if($setReslut && $chmodReslut)
{
return true;
}
else
{
return false;
}
}
}
/**
* 得到缓存数据
* @param $key 缓存的关键字key
* @return array
*/
public static function getCache($key)
{
@$file = __SITE_FILE_CACHE . "/" . $key .".php";
if(file_exists($file))
{
$data = @file_get_contents($file);
$data = unserialize($data);
if($data['expire']==0 || $data['expire'] > __SYS_TIME)
{
return $data['content'];
}
else
{
unlink($file);
return array();
}
}
}
/**
* 删除缓存文件
* @param $key 缓存$key
* @return Bool
*/
public static function delCache($key)
{
if (@unlink(__SITE_FILE_CACHE."/".$key.".php"))
{
return true;
}
else
{
return false;
}
}
/**
* 清除所有缓存文件
* @return Bool
*/
public static function clearAllCache()
{
$files = scandir(__SITE_FILE_CACHE);
foreach ($files as $val)
{
@unlink(__SITE_FILE_CACHE."/".$val);
}
}
/**
* 出错处理函数
* @param $line 行数
* @param $msg 信息
*/
public static function error($line,$msg)
{
die("出错文件:".__file__."/n出错行:$line/n错误信息:$msg");
}
}
?>
|
伪造IP来源这个东西在对很多朋友都有用,有的朋友喜欢利用php curl来伪造IP来源,让自己觉得很多IP了,下面我们以伪造IP来源实例来介绍php中curl的用法。
curl默认是未被启用的,启用方法。
启用 cURL 设置
如果你是在Windows平台下,那么非常简单,你需要改一改你的php.ini文件的设置,找到php_curl.dll,并取消前面的分号注释就行了。如下所示:
//取消下在的注释
代码如下 |
复制代码 |
extension=php_curl.dll
|
如果你是在Linux下面,那么,你需要重新编译你的PHP了,编辑时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数。
简单测试实例
代码如下 |
复制代码 |
<?php
// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://coolshell.cn');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
var_dump($data);
|
模仿post数据
代码如下 |
复制代码 |
<?php
$phoneNumber = '13912345678';
$message = 'This message was generated by curl and php';
$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/sendSMS.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec();
curl_close($ch);
?>
|
现在进入正题,CURL伪造IP和来源
1.php代码:
代码如下 |
复制代码 |
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));//IP
curl_setopt($ch, CURLOPT_REFERER, "http://www.111cn.net/ "); //来路
curl_setopt($ch, CURLOPT_HEADER, 1);
$out = curl_exec($ch);
curl_close($ch);
|
2.php代码:
代码如下 |
复制代码 |
function getClientIp() {
if (!empty($_SERVER["HTTP_CLIENT_IP"]))
$ip = $_SERVER["HTTP_CLIENT_IP"];
else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if (!empty($_SERVER["REMOTE_ADDR"]))
$ip = $_SERVER["REMOTE_ADDR"];
else
$ip = "err";
return $ip;
}
echo "IP: " . getClientIp() . "";
echo "referer: " . $_SERVER["HTTP_REFERER"]; |
用1.php 请求 2.php,输出结果:
关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。
关于Cookie,你需要了解下面三个参数:
CURLOPT_COOKIE,在当面的会话中设置一个cookie
CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
CURLOPT_COOKIEFILE,Cookie的文件。
在php程序开中发很多朋友把握isset与empty搞混或搞不清楚什么时候用isset,什么时候用empty函数,下面我来介绍两者的区别。
isset — 检测变量是否设置
PHP isset() 用于检测一个或多个变量是否设置,如果被检测的变量存在则返回 TRUE,否则返回 FALSE。
例子:
代码如下 |
复制代码 |
<?php
$var = 1;
if(isset($var)){
echo '变量 $var 已经被设置';
} else {
echo '变量 $var 还未被设置';
}
?>
|
运行该例子输出:
变量 $var 已经被设置
数组中的元素也同样有效:
代码如下 |
复制代码 |
<?php
$a = array ('test' => 1, 'hello' => NULL);
var_dump( isset ($a['test') ); // TRUE
var_dump( isset ($a['foo') ); // FALSE
var_dump( isset ($a['hello') ); // FALSE
// 'hello' 等于 NULL,所以被认为是未赋值的。
// 如果想检测 NULL 键值,可以试试下边的方法。
var_dump( array_key_exists('hello', $a) ); // TRUE
|
注意
•isset() 只能用于检测变量,传递任何其它参数都将造成解析错误。
•isset() 是一个语言结构而非函数,因此它无法被变量函数调用。
empty — 检查一个变量是否为空
如果 变量 是非空或非零的值,则 empty() 返回 false
如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词
代码如下 |
复制代码 |
<?php
$var = 0;
// 结果为 true,因为 $var 为空
if (empty($var)) {
echo '$var is either 0 or not set at all';
}
// 结果为 false,因为 $var 已设置
if (!isset($var)) {
echo '$var is not set at all';
}
?>
|
实例对比
代码如下 |
复制代码 |
$is_var = '';
if(isset($is_var)) {
echo "变量存在!<br />";
} else {
echo "变量不存在!<br />";
}
if(empty($is_var)) {
echo "变量为空!<br />";
} else {
echo "变量不为空!<br />";
}
?>
|
下面来总结一些常用的汉字转换成Unicode编码PHP程序实现代码,我们只要了解到Unicode编码与gbk编码之间的内置转换原理即可了。
汉字转换成unicode方法
代码如下 |
复制代码 |
<?php
//将utf8编码的汉字转换为unicode
function htou($c){
$n = (ord($c[0]) & 0x1f) << 12;
$n = (ord($c[1]) & 0x3f) << 6;
$n = ord($c[2]) & 0x3f;
return $n;
}
//在代码中隐藏utf8格式的字符串
function my_utf8_unicode($str) {
$encode='';
for($i=0;$i<strlen($str);$i ){
if(ord(substr($str,$i,1))> 0xa0){
$encode.='&#'.htou(substr($str,$i,3)).';';
$i =2;
}else{
$encode.='&#'.ord($str[$i]).';';
}
}
return $encode;
}
echo my_utf8_unicode("哈哈ABC");
?>
|
汉字转换成unicode方法二
代码如下 |
复制代码 |
function getUnicode($word)
{
// 转UTF8
$word0 = iconv('gbk', 'utf-8', $word);
$word1 = iconv('utf-8', 'gbk', $word0);
$word = ($word1 == $word) ? $word0 : $word;
// 拆分汉字
preg_match_all('#(?:[x00-x7F]|[xC0-xFF][x80-xBF]+)#s', $word, $array, PREG_PATTERN_ORDER);
$return = array();
// 转换
foreach ($array[0] as $cc)
{
$arr = str_split($cc);
$bin_str = '';
foreach ($arr as $value)
{
$bin_str .= decbin(ord($value));
}
$bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3', $bin_str);
$return[] = '&#' . bindec($bin_str) . ';';
}
return implode('', $return);
}
|
函数用法:
代码如下 |
复制代码 |
$word = '一个汉字转换成Unicode四字节编码的PHP函数。';
echo getUnicode($word);
|
上述将输出如下结果:
一个汉字转换成Un
icode四字节编
码的PHP函数。
这一组函数可以将汉字转成unicode编码,也可以将unicode解码成汉字。
将汉字转成Unicode的函数:
代码如下 |
复制代码 |
function uni_encode ($word)
{
$word0 = iconv('gbk', 'utf-8', $word);
$word1 = iconv('utf-8', 'gbk', $word0);
$word = ($word1 == $word) ? $word0 : $word;
$word = json_encode($word);
$word = preg_replace_callback('/\\u(w{4})/', create_function('$hex', 'return '&#'.hexdec($hex[1]).';';'), substr($word, 1, strlen($word)-2));
return $word;
}
|
对Unicode编码进行解码的函数:
代码如下 |
复制代码 |
function uni_decode ($uncode)
{
$word = json_decode(preg_replace_callback('/&#(d{5});/', create_function('$dec', 'return '\u'.dechex($dec[1]);'), '"'.$uncode.'"'));
return $word;
}
|
标签:[!--infotagslink--]