首頁  >  文章  >  後端開發  >  PHP 反初始化

PHP 反初始化

WBOY
WBOY原創
2024-08-29 12:51:25942瀏覽

PHP反序列化是可用於將序列化資料轉換為實際使用者輸入資料的函數之一;它是序列化函數的相反過程,主要關注數組、映射集合,它將計算每個元素的數組索引、大尺寸或其他一些複雜的數據結構,我們使用一些預設方法來操作數據,還有unserialize()如果用戶輸入不可反序列化,方法將返回布爾值,因此在輸出控制台上返回false,該對象是為反序列化函數單獨建立的。

廣告 該類別中的熱門課程 PHP 開發人員 - 專業化 | 8 門課程系列 | 3次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

文法:

PHP 有自己的變數、關鍵字和函數語法,用於建立更複雜的基於 Web 的應用程式。一般來說,PHP 序列化格式沒有像serialize() 函數那樣有很好的文件記錄;它支援序列化整數、浮點數、布林值、字串、陣列。物件及其包括在反序列化實作中支援的其他參考。

<?php
$input= array('','');
$var = serialize($input);
$var1 = unserialize($var);
---some php codes based on the user needs---
?>

以上程式碼是在PHP中使用serialize()和unserialize()函數的基本語法。它支援所有資料類型和其他預設功能。

PHP 中函數反序列化如何運作?

反序列化函數依賴序列化函數;無論該函數呼叫和使用什麼數據,它都將透過鍵完全序列化。如果我們想要存取數據,我們需要在程式碼中反序列化資料或反序列化資料。然後只有我們存取了數據;它也用於文件概念。使用這些serialize和unserialize()函數總是傳回布林條件,這將是對反序列化物件的安全性和更多保護,或者我們可以稱之為不受信任的資料。這樣就可以避免來自機器外部的一些其他惡意軟體、病毒。它還透過程式碼注入進行保護,甚至資料庫端都可以避免一些針對不受信任的惡意軟體網站的 SQL 注入攻擊。

一般來說,unserialize()函數有兩個參數,str和options; str 是它包含等待反序列化的序列化字串的參數之一,而options 是它包含的陣列之一,用於控制它只接受有效使用者的某些函數行為,特別是像allowed_classes 這樣的內建類別。它只接受指定的類別名,特別是一些方法,如_wakeup() 和_destruct();這些方法是透過使用序列化物件來實現的;當我們使用此方法時,它會在特定物件上調用unserialize() 函數時會自動執行。

PHP 反序列化範例

下面給出的是 PHP 反序列化的範例:

範例#1

代碼:

<?php
$inputs = serialize(array('Siva', 'Raman', 'Sivaraman', 'wdigb', 'dwiugv', '87dhg', 'wdhgv', 'edhgfv', 'hfe', 'wgieufv', 'ehoije', 'iwuoegf', 'wuieguv','jdgv', 'wqgdjf', 'khwdjgh','jdhfdkswi', 'uqiwuke', 'iqweyf', 'oiuqiwleyugu' ));
echo  $inputs . '<br>';
$vars = unserialize($inputs);
var_dump ($vars);
echo $vars;
?>

輸出:

PHP 反初始化

在上面的範例中,我們在相同的程式碼中使用了serialize和unserialize()函數。每當使用者向應用程式提供輸入時,它都會將其儲存在一個單獨的變數中,並且它是序列化的變量,並且也會使用 echo 語句在控制台上列印。我們希望使用 unserialize() 函數反序列化數據,並將其儲存在單獨的變數中,並且將使用相同的 echo 語句列印它。如果我們想在控制台上列印結果,我們將使用其他預設方法,例如 print、echo 等。這些是 PHP 腳本上使用的一些方法。

範例#2

代碼:

<?php
class demo {
public $vars;
}
class demo1 {
public $vars1;
}
class demo2 extends demo {
public $vars2, $vars3;
}
class demo3 extends demo2{
public $vars4;
}
class demo4 extends demo3 {
public $vars5;
}
class demo5 extends demo4 {
public $vars6;
}
class demo6 extends demo5{
public $vars7;
}
class demo7 extends demo6 {
public $vars8,$vars9, $vars10;
}
$c1 = new demo();
$c1->vars = 1234;
$c3 = new demo2();
$c3->vars2 = "Siva";
$c2 = new demo1();
$c2->vars1 = 2756876;
$d1 = serialize($c1);
$d2 = serialize($c2);
$d5 = serialize($c3);
$d3 = unserialize($d1, ["allowed_classes" => true]);
$d6 = unserialize($d5, ["allowed_classes" => true]);
$d4 = unserialize($d2, ["allowed_classes" => ["demo", "demo1"]]);
$d7 = unserialize($d5, ["allowed_classes" => ["demo", "demo1", "demo2"]]);
echo "Welcome To My Domain is: " . $d3->vars, $d6 ->vars2;
echo "<br />";
echo "Result of demo1 d3 memeber is: " . $d4->vars1;
echo "<br/>";
echo "Result of demo2 d7 memeber is: " . $d7->vars2;
?>

輸出:

PHP 反初始化

在第二個範例中,我們使用了相同的序列化和反序列化概念。不過,這裡我們還是使用了一些類別。此外,每個類別的父子關係都有自己單獨的變量,這些變數帶有公​​共存取修飾符,以便在類別外部使用相同的變數;透過使用這樣的對象,我們可以初始化單獨變數的值。他們將序列化並將其儲存在一個單獨的變數中;之後,我們可以反序列化變數值並將它們單獨儲存。我們可以新增 n 個具有單獨值的變數來序列化和反序列化資料。我們使用 allowed_classes 來驗證程式碼中的序列化資料。

範例#3

代碼:

<?php
class demo
{
public $vars;
}
$vars1= new demo();
$vars1->vars= "siva";
$vars2= serialize($vars1);
echo "Welcome To My Domain<br> '$vars2'";
echo "<br><br>";
$vars3= unserialize($vars2);
echo "Have a Nice Day <br>";
echo  var_dump($vars3);
echo "<br> <br>";
echo "Thank you users your net result is shown" . $vars3->vars;
?>

輸出:

PHP 反初始化

在最後一個範例中,我們使用了序列化和反序列化函數,因為我們使用鍵值對來反序列化 PHP 中的陣列和物件。我們使用了一個值為“Siva”的變量,它將是一個純文字字串,然後轉換回序列化和反序列化值的物件。

結論

在 PHP 中,我們使用預設函數、變數和關鍵字來建立使用者友善的 Web 應用程式。就像它可以使用一些預設的類別和方法在基於 Web 的應用程式中創建一些高級技術一樣,這樣我們就可以使用一些技術,如 serialize() 和 unserialize() 來更安全地儲存和檢索資料。

以上是PHP 反初始化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:PHP 序列化下一篇:PHP 序列化