日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 保护变量,保护PHP中的“包含污染”变量

發布時間:2025/3/15 php 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 保护变量,保护PHP中的“包含污染”变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tl; dr:有沒有辦法阻止在include()調用之前聲明/定義的變量(基本上是鎖定)被包含的文件?另外,有點相關

question.

我想知道可以采取什么措施,以避免包含文件的可變污染.例如,鑒于這個奇特的小功能:

/**

* Recursively loads values by include returns into

* arguments of a callback

*

* If $path is a file, only that file will be included.

* If $path is a directory, all files in that directory

* and all sub-directories will be included.

*

* When a file is included, $callback is invoked passing

* the returned value as an argument.

*

* @param string $path

* @param callable $callback

*/

function load_values_recursive($path, $callback){

$paths[] = path($path);

while(!empty($paths)){

$path = array_pop($paths);

if(is_file($path)){

if(true === $callback(include($path))){

break;

}

}

if(is_dir($path)){

foreach(glob($path . '*') as $path){

$paths[] = path($path);

}

}

}

}

我知道它缺少一些類型檢查和其他解釋,讓我們忽略它們.

無論如何,這個函數基本上篩選了一堆只返回值的“數據”文件(通常是配置數組,或路由表,但無論如何),然后調用傳遞的回調,以便可以以某種方式過濾,排序或使用該值.例如:

$values = array();

load_values_recursive('path/to/dir/', function($value) use(&$values){

$values[] = $value;

});

并且path / to / dir /可能有幾個遵循此模板的文件:

return array(

// yay, data!

);

當這些“配置”文件(或其他任何試圖保持這種可移植和跨功能的文件)開始包含甚至是基本的邏輯時,我的問題就出現了.始終存在污染函數本地變量的可能性.例如,一個配置文件,為了聰明起見:

return array(

'path_1' => $path = 'some/long/complicated/path/',

'path_2' => $path . 'foo/',

'path_3' => $path . 'bar/',

);

現在,鑒于$path碰巧是一個相對于當前的可見目錄,該函數將變得難以理解:

// ...

if(is_file($path)){

if(true === $callback(include($path))){ // path gets reset to

break; // some/long/complicated/path/

}

}

if(is_dir($path)){ // and gets added into the

foreach(glob($path . '*') as $path){ // search tree

$paths[] = path($path);

}

}

// ...

這可能會產生糟糕的結果.我能想到的唯一的700001解決方案是將include()調用包裝在另一個匿名函數中以改變范圍:

// ...

if(true === call_user_func(function() use($callback, $path){

return $callback($path);

})){

break;

}

// ...

因此,保護??$path(更重要的是,$callback)不會導致每次迭代產生副作用.

我想知道在這種情況下是否存在一種更簡單的方法來“鎖定”PHP中的變量.

>我只想在這里記錄;我知道我可以使用例如一個elseif來緩解這個函數特有的問題之一,但是我的問題是對環境無關的解決方案更感興趣,如果你愿意的話,這是一個全能的問題.

總結

以上是生活随笔為你收集整理的php 保护变量,保护PHP中的“包含污染”变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。