php如何判断是否为json数据(格式)

 更新时间:2016年11月25日 17:24  点击:2050
下面我来给各位朋友总结了几篇关于php如何判断是否为json数据的文章,这里整理了一下也能让你知道如何利用php判断json了,希望例子对你带来帮助。

首先要记住json_encode返回的是字符串, 而json_decode返回的是对象.

判断数据不是JSON格式:

 代码如下 复制代码

function is_not_json($str){
    return is_null(json_decode($str));
}


判断数据是合法的json数据: (PHP版本大于5.3)

 代码如下 复制代码

function is_json($string) {
 json_decode($string);
 return (json_last_error() == JSON_ERROR_NONE);
}

json_last_error()函数返回数据编解码过程中发生的错误.

注意: json编解码所操作字符串必须是UTF8的.

例子

 

 代码如下 复制代码
/**
* 解析json串
* @param type $json_str
* @return type
*/
function analyJson($json_str) {
$json_str = str_replace('\\', '', $json_str);
$out_arr = array();
preg_match('/{.*}/', $json_str, $out_arr);
if (!empty($out_arr)) {
$result = json_decode($out_arr[0], TRUE);
} else {
return FALSE;
}
return $result;
}


如果不是json则返回false

留言板是学习php用来入门的一个常用的例子,下面我看一站长写了这个例子,从注册到登录都有比较的好逻辑于时拿来与大家分享了。
显示效果
如图:
wKiom1LOaN_ylQA2AABIuPmS5fQ575.jpg
wKiom1LOaN_AA_VnAAGjGc5OYew734.jpg
wKioL1LOaNPCSbOxAABUGpgitw4886.jpg
wKiom1LOaN_x9jSQAAAbiSstFWU938.jpg
1.导入MYSQL数据:
将如下SQL语句导入库,假定库名称为bbs,这里保证库与表字段的编码都为UTF-8模式
 代码如下 复制代码
-------------------------------------------
CREATE TABLE `message` (
 `id` tinyint(1) NOT NULL auto_increment,
 `user` varchar(25) NOT NULL,
 `title` varchar(50) NOT NULL,
 `content` tinytext NOT NULL,
 `lastdate` date NOT NULL,
 PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--------------------------------------------
2.部分PHP代码
add.php
------------------------------------------------
<?
//加载conn.php文件
include("conn.php");
//加载head.php文件
include("head.php");
//提交表单到数据库
if($_POST['submit']){
  $sql = "insert into message(id,user,title,content,lastdate) " .
         "values('','$_POST[user]','$_POST[title]','$_POST[content]',now())";
  mysql_query($sql);
  echo "<script language="javascript">alert('添加成功');history.go(-1)</script>";
}  www.111Cn.neT
?>
<!--利用JS对表单输入进行字符限制-->
<SCRIPT language=javascript>
   function CheckPost() {
       if (myform.user.value==""){
           alert("请填写用户名");
           myform.user.focus();
           return false;
       }
       if (myform.title.value.length<5){
           alert("标题不能少于5个字符");
           myform.title.focus();
           return false;
       }
       if (myform.content.value==""){
           alert("必须要填写留言内容");
           myform.content.focus();
           return false;
       }
}
</SCRIPT>
<!--HTML表单结构-->
<form action="add.php" method="post" name="myform" onsubmit="return CheckPost();">
用户: <input type="text" size="10" name="user"/><br>    
标题: <input type="text" name="title" value="value" size="40" maxlength="40"/><br>
内容: <textarea name="content"></textarea><br/>
<input type='submit' name='submit' value="发布留言"/>
</form>
------------------------------------------------
head.php
-------------------------------------------------
<!--HTML头导航链接-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<link href='#'" /css.css" rel="stylesheet" type="text/css">
<b><a href='#'" /a> | <a href="list.php">浏览留言</a> | <a href="login.php">登陆</a></b>
<hr size="1">
-------------------------------------------------
list.php
-------------------------------------------------
<?
//加载conn.php文件
include("conn.php");
//加载head.php文件
include("head.php");
//设置分页值为5
$pagesize=5;
//取得除域名外后面完整的地址路径
$url=$_SERVER["REQUEST_URI"];
//取得该固定键值[path][query]的url数组
$url=parse_url($url);
//print_r($url);
//取得url的[path]路径值
$url=$url[path];
//取得test表信息
$numq =  mysql_query("select * from message");
//取得test表内容的行数
$num = mysql_num_rows($numq);
//判断是否能取到page参数值
if($_GET[page]){
   //将该值传给pageval
   $pageval=$_GET[page];
   //计算page值,供SQL语句使用
   $page=($pageval-1)*$pagesize;
   //等价于 $page = $page.',' 意思就是将page参数值与,连接起来
   $page.=",";
}
//判断数据库条目总数大于页数,显示分页
if($num > $pagesize){
   //判断上一页和下一页的值若小于0,则按照0处理
   if($pageval<=1)
       $pageval=1;
   //显示分页
   echo "共 $num 条".
   //.(...).用来连接变量名
   " <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
?>
<!--HTML留言列表结构-->
<table width=500 border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
 <?
 $sql = "select * from message order by id desc limit $page $pagesize";
 $query = mysql_query($sql);
 while($row=mysql_fetch_array($query)){
 ?>
 <tr bgcolor="#eff3ff">
 <td>标题:<?=$row[title]?> 用户:<?=$row[user]?></td>
 </tr>
 <tr bgColor="#ffffff">
     <td>内容:<? echo htmtocode($row[content]); ?></td>
 <tr bgColor="#ffffff">
 <td>时间:<?=$row[lastdate]?></td>
 </tr>
 <?
 }
 ?>
</table>
-------------------------------------------------
conn.php
--------------------------------------------------
<?
//登录MYSQL数据库
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
//进入BBS库
mysql_select_db("bbs", $conn);
//使用UTF-8中文编码传输数据流
mysql_query("set names 'UTF8'");
//修改空格和回车编码为HTML可识别编码
function htmtocode($content){
   $content = str_replace("n","<br>", str_replace(" ", "&nbsp;", $content));
   return $content;
}
?>
--------------------------------------------------
login.php
---------------------------------------------------
<?
//加载conn.php文件
include("conn.php");
//判断是否退出,并标记cookie为out,返回登录页
if($_GET[out]){
   setcookie("cookie","out");
   echo "<script language="javascript">location.href='login.php';</script>";
}
//提交表单判断登录ID是否为admin,密码是否匹配'PHP'的MD5值,并标记cookie为ok
if($_POST[id] =='admin'){
   $pw=md5($_POST[pw]);
   if ($pw=='e1bfd762321e409cee4ac0b6e841963c'){
       setcookie("cookie","ok");
       //刷新登录页面使cookie标记值生效.
       echo "<script language="javascript">location.href='login.php';</script>";
   }
}
//加载head.php文件
include("head.php");
//提交表单判断cookie标记值不为ok,则显示登录页,否则显示退出页
if($_COOKIE['cookie']!='ok'){
?>
<!--利用JS对登录字符进行限制-->
<SCRIPT language=javascript>
   function Checklogin(){
       if (myform.id.value ==""){
           alert("请填写登录名");
           myform.id.focus();
           return false;
       }
       if (myform.id.value !=="admin"){
           alert("用户名错误");
           myform.id.focus();
           return false;
       }
       if (myform.pw.value ==""){
           alert("密码不能为空");
           myform.pw.focus();
           return false;
       }
       }
   }
</SCRIPT>
<!--HTML登录页-->
<form action="" method="post" name="myform" onsubmit="return Checklogin();">
   用户名: <INPUT type="text" name="id" /><br>
   密&nbsp;&nbsp;码: <INPUT type="password" name="pw" />
   <input type="submit" name="submit" value="登陆">
</form> www.111cn.Net
<?
}else{
?>
<!--HTML退出页-->
   <a href='?out=login'>退出</a>
<?
}

?>

好了,这个是基于学习了,如果更好点的需要对数据进行安全过程操作,否则这样很容易被黑哦。

如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期:

例子,利用cooikes

 代码如下 复制代码
<?php 
    session_start(); 
    // 保存一天 
    $lifeTime = 24 * 3600; 
    setcookie(session_name(), session_id(), time() + $lifeTime, "/"); 
?>

PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用:

 代码如下 复制代码

<?php 
    // 保存一天  www.111cn.net
    $lifeTime = 24 * 3600; 
    session_set_cookie_params($lifeTime); 
    session_start(); 
?>

php中还有一个ini_set可以设置session.gc_maxlifetime来设定Session的生存周期。例如:

 代码如下 复制代码

<?php
ini_set('session.gc_maxlifetime', 3600); //设置时间
ini_get('session.gc_maxlifetime');//得到ini中设定值

?>

下面提供一个别人封装好的函数,但是我没有测试过,仅供参考:

 代码如下 复制代码

    <?php
    function start_session($expire = 0)
    {
    if ($expire == 0) {
    $expire = ini_get('session.gc_maxlifetime');
    } else {
    ini_set('session.gc_maxlifetime', $expire);
    }
    
    if (empty($_COOKIE['PHPSESSID'])) {
    session_set_cookie_params($expire);
    session_start();
    } else {
    session_start();
    setcookie('PHPSESSID', session_id(), time() + $expire);
    }
    }
    ?>

使用方法:

加入start_session(600);//600秒以后过期。

 

tipask这款系统中虽然功能比较强大但是对于我来讲少了一个热门问题模块了,下面我就整理了一个站长的开发例子与各位分享。

有个网站是用tipask来搭建的问答系统,今天客户要求添加热门问题模块,之前都是用tipask的原生模块,比如说推荐问答、未解决问答等,看来只能自己二次开发了,上网找了下关于tipask的二次开发还真是少……于是简单翻了下tipask的代码,用我的方式增加了热门问题模块。

tipask的主要函数都在model文件夹下,找到系统核心文件base.class.php,里面有这样一个函数fromcache,用于生成函数下各种模块,例如悬赏问题、精彩推荐等,我们要做的就是在这里按照前后代码加上一条我们需要的热门问题模块。

例如在代码

 代码如下 复制代码

case 'notelist'://首页右侧公告列表

前加上我们的模块代码:

 代码如下 复制代码

case 'hotlist'://热门问题

$this->load('hot');//www.111cn.net

$cachedata = $_ENV['hot']->get_list();

break;

这里我是仿照recommend推荐模块,又新建的一个hot.class.php用于上面代码的调用,其实完全可以仿照上面的调用question.class.php文件里的list_by_condition函数,但是通过到question.class.php文件下查看list_by_condition函数只能够加入sql的where判断,而我需要的热门模块只需要改动一下order by,所以我只能新建一个hot.class.php文件自己写数据库调用了。

hot.class.php文件如下:

 代码如下 复制代码

base = $base;

$this->db = $base->db;

}

function get_list($start = 0, $limit = 7) {

$hotlist = array();

$query = $this->db->query("SELECT * FROM " . DB_TABLEPRE . "question ORDER BY views DESC LIMIT $start,$limit");//WWw.111Cn.net

while ($hot = $this->db->fetch_array($query)) {

$hot['category_name'] = $this->base->category[$hot['cid']]['name'];

$hot['format_time'] = tdate($hot['time']);

$hot['category_name'] = $this->base->category[$hot['cid']]['name'];

$hot['url'] = url('question/view/' . $hot['qid'], $hot['url']);

$hot['image'] =$hot['image']?$hot['image']:'css/default/recomend.jpg' ;

$hotlist[] = $hot;

}

return $hotlist;

}

}

?>

好了,tipask关于新建模块的二次开发就结束了,只要仿照这来就行了

 

session是php中一个服务器端超级全局变量而memcache是缓存应用,下面我来把它们整合起来把session存放在memcache中,下面我们一起来看如何实现的吧。

1.首先安装memcached或者memcache软件
参考:wamp 安装 memcache/memcached详细说明
2.安装php_memcache.dll扩展
3.设置session保存在memcached

方法一:

修改php.ini文件

 代码如下 复制代码

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

方法二:

程序中动态设置

 代码如下 复制代码

ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");

测试程序

1.session.php

 代码如下 复制代码

<?php
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");

session_start();
if (!isset($_SESSION['username'])) {
 $_SESSION['username'] = 'phpff.com';
}

print session_id();//5877fbfcaea379ada0cc0dbba80615a6

?>

2.test.php

 代码如下 复制代码

<?php
// memcache test code
$memcache = new Memcache; //创建一个memcache对象
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); //连接Memcached服务器 

print_r($memcache->get('5d3d79d7500f5836033e9019b3eefc6f'));//username|s:9:"phpff.com";

?>

[!--infotagslink--]

相关文章

  • JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • Json格式详解

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成...2021-11-05
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • 一个奇葩的最短的 IE 版本判断JS脚本

    使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31
  • c# 判断是否为空然后赋值的4种实现方法

    下面小编就为大家分享一篇c# 判断是否为空然后赋值的4种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • MySql存储过程之逻辑判断和条件控制

    具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
  • PHP中empty和isset对于参数结构的判断及empty()和isset()的区别

    废话不多说了,直接给大家贴代码了。<&#63;php class test{} $a1 = null; $a2 = ""; //$a3 = $a4 = 0; $a5 = '0'; $a6 = false; $a7 = array(); //var $a8; $a9 = new test(); for ($i=1; $i <=9 ; $i++) {...2015-11-24
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#获得程序的根目录以及判断文件是否存在的实例讲解

    今天小编大家分享一篇C#获得程序的根目录以及判断文件是否存在的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • php实例分享之html转为rtf格式

    核心代码: 复制代码 代码如下:<!--?php$html2RTFCom = new COM("HTML2RTF.Converter");$html2RTFCom--->PreserveImages = true;$html2RTFCom->PageNumbers = 1;$html2RTFCom->PageNumbersAlignH = 1;$html2RTFCom->Pa...2014-06-07
  • Pycharm 设置默认解释器路径和编码格式的操作

    这篇文章主要介绍了Pycharm 设置默认解释器路径和编码格式的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
  • 从PHP $_SERVER相关参数判断是否支持Rewrite模块

    如果是http://www.jb51.net/p1141.html形式的URL,可通过$_SERVER['REQUEST_URI']和$_SERVER['QUERY_STRING']值的区别来分析,最主要是如果页面是通过重定向会产生$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIREC...2013-10-04
  • JavaScript判断DIV内容是否为空的方法

    整体思路是这样的:判断div内部是否为空,如果为空,给出无数据提示;否则显示正常页面,下面给大家分享js判断div内容是否为空的方法,对判断div内容是否为空的相关知识感兴趣的朋友一起学习吧...2016-02-01
  • toString.call()通用的判断数据类型方法示例

    这篇文章主要给大家介绍了关于toString.call()通用的判断数据类型方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-29
  • JavaScript中判断的优雅写法示例

    判断语句这个我们不陌生,就是判断是否满足指定的条件,如果满足则执行一定的代码,否则跳过,下面这篇文章主要给大家介绍了关于JavaScript中判断的优雅写法,需要的朋友可以参考下...2021-10-17
  • nestjs返回给前端数据格式的封装实现

    这篇文章主要介绍了nestjs返回给前端数据格式的封装实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
  • js判断手机访问或者PC的几个例子(常用于手机跳转)

    js判断手机或者PC的例子我们在几乎所有网站都会有这段代码了,现在手机流量与pc差不多了,下面来看两段js判断手机或者PC例子吧...2015-12-17
  • js 检测判断fckeditor是否为空

    js 检测判断fckeditor是否为空 <!-- 用一般的js是不可能获取 fck 编辑器内容的是否有值的,我们得用 FCKeditorAPI接口来实例--> <!DOCTYPE html PUBLIC "-//W3C//DTD...2016-09-20
  • Lua判断变量是否为数字、字符串是否可以转换为数字等

    这篇文章主要介绍了Lua判断变量是否为数字、字符串是否可以转换为数字等,本文讲解了Lua 判断是字符还是数字的方法、Lua判断数字的方法、判断可否转换为数字的方法、判断并且准备一个初值的方法,需要的朋友可以参考下...2020-06-30