php短路
A. php中以下哪些情況會產生短路情況
伺服器通過php的特性(函數)去包含任意文件時,由於要包含的這個文件來源過濾不嚴,從而可以去包含一個惡意文件,而我們可以構造這個惡意文件來達到邪惡的目的。
涉及到的危險函數:include(),require()和include_once(),require_once()
Include:包含並運行指定文件,當包含外部文件發生錯誤時,系統給出警告,但整個php文件繼續執行。
Require:跟include唯一不同的是,當產生錯誤時候,include下面繼續運行而require停止運行了。
Include_once:這個函數跟include函數作用幾乎相同,只是他在導入函數之前先檢測下該文件是否被導入。如果已經執行一遍那麼就不重復執行了。
Require_once:這個函數跟require的區別 跟上面我所講的include和include_once是一樣的。所以我就不重復了。
php.ini配置文件:allow_url_fopen=off 即不可以包含遠程文件。Php4存在遠程&本地,php5僅存在本地包含。
你可以去後盾人平台看看,裡面的東西不錯
B. PHP中 $y =& $x; 是什麼意思
學過C語言的 都知道指針 其實這種用法就相當與指針了
&是地址符號 $y的值 不是$x的值 而是$x的內存地址
這就是PHP中的一種引用傳遞 而非值傳遞
換句話說 不論$x的值怎麼變化 $y的值都與其保持一致
這一點 樓主可以寫程序測試一下 就一目瞭然了。
C. php怎麼判斷短路呢
php中=是賦值, 在if中要判斷條件是要用==的
第一種: if($a && $b = 'cccccccc'), 首先判斷$a是不是true?返回true, 並且 $b = 'cccccccc'(這其實是賦值,不是判斷),也返回true, 所以整個if返回是true, $b = 'cccccccc'
第二種 if($a || $b = 'cccccccc') 2個條是或的關系, 那麼首先判斷$a是不是true?返回true, 那麼直接if返回的就是true, $b = 'cccccccc'這個根本就沒有執行, $b=0
第三種 if($a && $b) 首先判斷$a是不是true?結果是true; 然後判斷$b是不是true?結果是false, 那麼if的結果就是false, if的語句不執行. $b=0
在php運行的結果就是:
$a = 1; $b=0;
if($a && $b = 'cccccccc') echo $b; //返回cccccccc
$a = 1; $b=0;
if($a || $b = 'cccccccc') echo $b; //返回0
$a = 1;$b=0;
if($a && $b){ $b = 'cccccccc';}
echo $b; //返回0
D. php中 $f = false or true 結果居然為假。一頭霧水。求高手逐字逐句的解釋它是怎
這里涉及到優先順序的問題
// 常量 false 被賦給 $f,true 被忽略
// 等同於:(($f = false) or true)
$f = false or true;
邏輯運算符or 的優內先級要低於容負值運算符=
E. PHP短路運算理解不了,求指導
忍不住出來回答一個;
$a=4;
$b=15;
if($a=5||$b=5){ //關鍵是這里;主要要理解一個短路運算的問題;執行步驟為:
//1,因為優先順序的問題先運算5||$b結果為true;
//2,再算$a=true;注意後面不會運算,因為短路了;
//3,返回true給if;
//這里$b=5不會進入運算;
//給你個好點的例子吧;如果這里變成if($a=5||new pdo){ 這里的結果並不會改變,步驟是:1,先運算new pdo;因為new優先順序最高;2,運算5||null,這里也是判斷5為真後面也不最執行了;3,$a=true;
$a++; //true ++最後還是true
$b++; //因為$b沒進入運算,所以15 ++ 最後是15;
}
echo $a,',',$b; //1,16
var_mp($a); //true
F. php中|| 不是真假為真么
這個主要是考察「來||「也就是邏自輯判斷當中的「或「用法:
if($a=3 || $b=6)
$a=3 時為把3賦值給$a,$a=3返回為真,按照程序自左至右的執行方式,當左位為真時,「或「判斷直接返回真,不再進行後續的判斷。
所以$b = 8,後續執行 $b+=1 = 9
G. PHP 中關於&& 和|| 短路問題求技術大牛回答!!!第一次遇到這沒奇葩的問題
|| 邏輯或, = 賦值運算
|| 是左聯運算符,運算順序是從左向右
= 是右聯運算符,運算順序是從右到左
|| 的運算級比 = 高
所以if語句可以寫成
if($a= (5 || $b=5))
|| 有一個短路現象,當左邊的運算能轉化為true時,不執行右邊的運算,5能轉化為true
所以if語句進一步寫成if($a = (true || $b=5)), (true || $b=5)這里會有一個bool(true)返回值
由於||的短路現象,if再進一步寫成if($a = true) 注意$b=5被短路,並沒有被執行
echo $a, true會輸出1;
$a++, true++ == true;
所以最後輸出1,4
H. php中&&與&有什麼區別
PHP中&&與&的區別:
1、運算符性質的區別
&&在PHP中是一個邏輯操作符,也叫條件操作符。
&是邏輯語內言,邏輯上表容示兩者屬於缺一不可的關系,還可以表示一個人和另外一個人之意,與and同義。如A&B,表示A與B,A和B,A×B。
2、作用上的區別
&&就是判斷兩個表達式的真假性,只有兩個表達式同時為真才為真,有一個為假則為假,具有短路性質。
&是將兩個二進制的數逐位相與,結果是相與之後的結果。
3、用途上的區別
&&:x&&y——功能描述: 「條件與」:x和y均為true,取值是true,否則取值是false。&&需要兩個操作數的值都是true時,才取值true,但是兩個操作符還是有區別的:使用方法是int&& rx=x。
&:是一個位運算符。參加運算的兩個數的二進制形式,每一個二進制位進行」與「運算,最後的結果二進製作為結果,例如:3 & 5=1,因為3和5的二進制分別是0011、0101,兩個進行與運算的結果是0001。