㈠ php json_encode与var_export是否有长度限制
理论上来说是不限制长度的,但是你的json_encode会消耗内存,你把内存调高点试一下,如果是表单传递过来,还要调一下upload max跟post max
㈡ 到底什么是PHP序列化
在PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。本文讲述PHP序列化的四种方案,感兴趣的可以了解一下
序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。
1、什么是PHP序列化——serialize和unserialize函数
这两个是序列化和反序列化PHP中数据的常用函数。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化数组$s = serialize($a);echo $s;//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo ''
;
//反序列化$o = unserialize($s);
print_r($o);
当数组值包含如双引号、单引号或冒号等字符时,它们被反序列化后,可能会出现问题。为了克服这个问题,一个巧妙的技巧是使用base64_encode和base64_decode。
$obj = array();//序列化$s = base64_encode(serialize($obj)); //反序列化$original = unserialize(base64_decode($s));
但是base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用。
//定义一个用来序列化对象的函数
function my_serialize( $obj ) { return base64_encode(gzcompress(serialize($obj))); }
//反序列化function my_unserialize($txt) { return unserialize(gzuncompress(base64_decode($txt))); }
2、什么是PHP序列化——json_encode 和 json_decode
使用JSON格式序列化和反序列化是一个不错的选择:
使用json_encode和json_decode格式输出要serialize和unserialize格式快得多。
JSON格式是可读的。
JSON格式比serialize返回数据结果小。
JSON格式是开放的、可移植的。其他语言也可以使用它。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化数组$s = json_encode($a);echo $s;//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}
echo '
;
//反序列化$o = json_decode($s);
在上面的例子中,json_encode输出长度比上个例子中serialize输出长度显然要短。[page]
3、什么是PHP序列化——var_export 和 eval
var_export 函数把变量作为一个字符串输出;eval把字符串当成PHP代码来执行,反序列化得到最初变量的内容。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化数组$s = var_export($a , true);echo $s;//输出结果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '
';
//反序列化eval('$my_var=' . $s . ';');
print_r($my_var);
4、什么是PHP序列化——wddx_serialize_value 和 wddx deserialize
wddx_serialize_value函数可以序列化数组变量,并以XML字符串形式输出。
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//序列化数组$s = wddx_serialize_value($a);echo $s;
//输出结果(查看输出字符串的源码): ApplebananaCoconut
echo '
';
//反序列化$o = wddx_deserialize($s);
print_r($o);//输出结果:Array ( [a] => Apple [b] => banana 1 => Coconut )
可以看出,XML标签字符较多,导致这种格式的序列化还是占了很多空间。
结论
上述所有的函数在序列化数组变量时都能正常执行,但运用到对象就不同了。例如json_encode序列化对象就会失败。反序列化对象时,unserialize和eval将有不同的效果。
本篇《什么是PHP序列化?这个知识点才是你应该了解到的用》到这里就已经结束了,小编一直认为,某一个编程软件受欢迎是有一定原因的,首先吸引人的一定是其功能,环球网校的小编祝您PHP学习之路顺利,如果你还想知道更多php知识,也可以点击本站的其他文章进行学习。
㈢ php 数组写入txt文件
需要使用PHP的var_export()
具体语法为:var_export($times,true);后面不加true不能写入文件
实例:
<?
$fp=fopen('aa.txt','w+');
fwrite($fp,var_export($times,true));
fclose($fp);
?>
㈣ PHP中var_mp是什么意思
PHP中var_mp的意思是判断一个变量的类型与长度,并输出变量的数值。
一、如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
二、用var_mp里面的变量必须是存在的,如果变量存在但值是空的就会返回false;没有变量则返回NULL.他自己就有输出的功能。不必加其他的输出函数。
三、var_export必须返回合法的php代码, 也就是说,var_export返回的代码,可以直接当作php代码赋值个一个变量。 而这个变量就会取得和被var_export一样的类型的值。
四、PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。
五、PHP 可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
㈤ php怎样把一个数组写入一个文件
方法一:
//将一个测试的数组写入一个PHP文件:
<?php //要写入PHP文件的数组 $write_array = array( '1' => 'oneone', '2'
=> 'two', '3' => 'three', '4' => 'four','5' => 'five' );
//字符串处理 $string_start = "<?php\n"; $string_process =
var_export($write_array, TRUE);$string_end = "\n?>"; $string =
$string_start.$string_process.$string_end; //开始写入文件
echofile_put_contents('test_array.php', $string); ?>
这里用到了两个函数:
1,var_export():
·var_export — 用来输出或返回一个变量的字符串表示,它和 var_mp() 的区别是,var_export()
可以用来返回关于传递给该函数的变量的结构信息,并且其返回的表示是合法的 PHP 代码如果 “echo
$string_process;”,则可以看到输出结果:
array ( 1 => 'oneone', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', )
而它就是我们要写入 test_array.php 文件的内容(除去 php 标签);
·var_mp() 函数用来打印变量的相关信息,它只用来“打印”,而不会返回值,它的原型是 void var_mp(……),我们来 “var_mp($string_process);”,则可以看到输出结果:
string(86) "array ( 1 => 'oneone', 2 => 'two', 3 => 'three', 4 => 'four', 5 => 'five', )"
可以看到输出的string(86) “…”,再一次说明了 var_export() 返回的是一个字符串。
2,file_put_contents():
file_put_contents — 将一个字符串写入文件,原型是 int file_put_contents ( string
filename, string data [, int flags [, resource context]]
),这里我们只用到了两个参数,”string filename”:要写入的文件名;”string data”:字符串数据;
此函数返回写入到文件内数据的字节数,如果我们 “echo file_put_contents(’test_array.php’, $string);”,则会输出一个整数 :95。
因为输出的 array() 占了 86 个字节,还有的 $string_start 和 $string_end 又占了 9 个字节,转义字符 换行符 在这里只占 1 个字节。(不知道这样解释恰当不恰当,还有望大家多多指正)
方法二:json_encode()
我们常见一些网站在做ajax时返回JSON格式的数据:
返回的是json格式的数据返回的是json格式的数据
这有什么好处那?很显然前端在接到返回的数据时可以直接使用,而不用再用eval_r('(+ returnString +)')或者 $.parseJSON(returnString ) (jQuery的函数)来转化为js对象,这样显然为用户省电了。。。
在网上搜索了一下,这个问题在搜索中文信息的时候比较少,一些说是返回json的都是在前端进行的转化处理,根本不是返回JSON格式,其实返回json相当的简单。
原来的数据就是JSON格式
下例来自《锋利的jQuery》:
$(function(){
$('#send').click(function() {
$.getJSON('http://blog.meituo.net/wp-content/uploads/php_return_json/test.js', function(data) {
$('#resText').empty();
var html = '';
$.each( data , function(commentIndex, comment) {
html += '<div class="comment"><h6>' +
comment['username'] + ':</h6><p class="para">' +
comment['content'] + '</p></div>';
})
$('#resText').html(html);
})
})
})
你需要做的就是将数据存储为格式正确的 .json或者.js 文件。以下为示例所传送的json格式的数据
[
{
"username": "张三",
"content": "沙发."
},
{
"username": "李四",
"content": "板凳."
},
{
"username": "王五",
"content": "地板."
}
]
php输出JSON格式
那么php如何输出json格式?php 使用json_encode函数,然后jQuery使用datatype:json 就可以了嘛? 它的输出如下:
php 使用json_encode函数,jQuery使用datatype:json的返回类型php 使用json_encode函数,jQuery使用datatype:json的返回类型
显然并非所愿。还是字符串,到底怎么实现?其实很简单,只要在php文件头部加入以下代码:
header('Content-type: text/json');
这个头就是告知此文件输出类型为 json,这种形式我们见的最多的是验证码——php输出验证图片,有时php可以输出css文件,js文件等做一些有趣的事情。好的,我们测试一下吧。查看示例
示例代码:
< ?php
header('Content-type: text/json');
$fruits = array (
"fruits" => array("a" => "orange", "b" => "banana", "c" => "apple"),
"numbers" => array(1, 2, 3, 4, 5, 6),
"holes" => array("first", 5 => "second", "third")
);
echo json_encode($fruits);
?>
㈥ PHP调试中有哪些输出方法
PHP开发中,经常会查看变量的值,因此经常会将变量的值输出到页面以便于查看。
常用的输出方式有:echo、print、print_r、var_mp、var_exprot等;echo和print常用来输出字符串;
查看数组常用print_r、var_mp、var_exprot;
若使用echo和print输出数组时则,结果只能显示"Array",不会显示数组的结构。
一下举一例说明几种用法
配合print "<pre"和print "</pre",以数组$a为例说明各种输出的区别。
$a = array ('a' = 'apple', 'b' = 'banana', 'c' = array ('x', 'y', 'z'));
print_r($a);输出结果:Array ( [a] = apple [b] = banana [c] = Array ( [0] = x [1] = y [2] = z ) )
print "<pre"; print_r($a); print "</pre";输出结果:Array([a] = apple
[b] = banana
[c] = Array([0] = x[1] = y[2] = z))var_mp($a);输出结果:array(3) { ["a"]= string(5) "apple" ["b"]= string(6) "banana" ["c"]= array(3) { [0]= string(1) "x" [1]= string(1) "y" [2]= string(1) "z" } }
print "<pre"; var_mp($a); print "</pre";输出结果:array(3) {["a"]=string(5) "apple"["b"]=string(6) "banana"["c"]=array(3) {[0]=string(1) "x"[1]=string(1) "y"[2]=string(1) "z"}}var_export($a);输出结果:array ( 'a' = 'apple', 'b' = 'banana', 'c' = array ( 0 = 'x', 1 = 'y', 2 = 'z', ), )
print "<pre"; var_export($a); print "</pre";输出结果:array ('a' = 'apple',
'b' = 'banana',
'c' =array (0 = 'x',
1 = 'y',
2 = 'z',),)调试的时候可以根据不同的需要选用不同的输出方式。
㈦ php,数组的内容怎么输到指定格式的txt文件
PHP中,使用var_export函数即可将数组格式写入到文件;示例如下:
<?php
$file="chinawinxp.txt";
$content=array(
"name"=>"网络知道",
"company"=>"网络在线",
"city"=>"北京",
"other"=>array(
"e"=>"网络教育",
"jingyan"=>"网络经验",
)
);
file_put_contents($file,var_export($content,true)." ",FILE_APPEND);
//写入结果
/**
array(
'name'=>'网络知道',
'company'=>'网络在线',
'city'=>'北京',
'other'=>
array(
'e'=>'网络教育',
'jingyan'=>'网络经验',
),
)
*/
?>
㈧ php的var_export如何将数组输出成一个字符串
<?php
$a = array (1, 2, array ("a"州余, "b", "c"));
$str = var_export ($a, 1); // 将 var_export 的结果作为凳迹散函数返回值,枣氏而不是直接输出
echo str_replace("\n", "", $str); // 替换换行,然后输出~
㈨ PHP 数组下标负数的问题
这是因为win下是32bit的环境,Linux用的是64位环境。
-2在32bit下的数据为0xFFFF FFFE
-2在64bit下的数据为0xFFFF FFFF FFFF FFFE
而你那未经考虑就直接在64bit下可会导致
得到0x0000 0000 FFFF FFFE得值4294967294
解决办法:根据-2的“产生算法”或“数据来源”作出修改或应对
比如加入
if(PHP_INT_SIZE===4){
//在32bit系统下怎么处理-2
}else{
//在64bit系统下怎么处理-2
}