㈠ 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
}