我有一個簡單的while循環,我正在使用PHP來生成動態菜單。PHP代碼不讀取URL
僞代碼示例工作得很好:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>linkpuller.php</title>
</head>
<body>
<?php
$allMenus = array("alpha", "bravo", "charlie", "delta", "echo", "foxtrot");
$i = 0;
while ((strpos(basename($_SERVER['REQUEST_URI']), $allMenus[$i]) == false)) {
$i++;
}
$pathResult = $allMenus[$i];
?>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores deserunt cum blanditiis saepe, pariatur aliquam maiores eos obcaecati ratione sit provident quisquam, ipsa autem tempore quod animi, cupiditate numquam minus.</p>
<?php
echo "<h1>$pathResult $i</h1>";
?>
</body>
</html>
這是我通過調用linkpuller.php?v=fooalphabar
測試,它工作正常,但如果我將文件命名爲alpha.php
運行30秒,超時。我假設這是因爲PHP對待不同於參數的路徑,但有沒有辦法讓這個工作? 「回聲」表明它確實拉動while循環中的「alpha」。我也試過其他東西,如$_SERVER["PHP_SELF"]
或$_SERVER["SCRIPT_NAME"]
或設置一個變量爲$_SERVER['REQUEST_URI']
但沒有骰子。
如果這一點是循環遍歷'$ allMenus'數組,那麼爲什麼不這樣做而不是運行一個潛在的無限循環?至少你會將迭代次數限制在數組的大小 –
代碼的*目的是什麼?你想在比較strpos時使用'==='運算符,因爲它可以返回'false'或'0',這兩個等於false。如果它永遠不匹配,它也永遠不會結束。你最好使用'foreach'而不是'while'。 –
以錯字結束。正確的比較運算符是'===',如[docs](http://php.net/strpos)所示。 –