那里有很多類似的問題,但我發現沒有一個可以解決我的具體問題。我很確定這是我本地 IIS 服務器中的配置,但我自己無法解決。僅供參考,我的本地開發機器是 Windows 11,我正在運行 IIS 10。
我的 Laravelroutes/web.php檔案中有以下簡單代碼:
Route::get('/info', function() { return '<!DOCTYPE html>
<html><head><title>Testing</title></head>
<body>
<p>Hello from simple route</p>
<p><?php
echo phpinfo();
?></p>
</body></html>'; });
Route::get('/info2', function() { return view('info'); });
然后我有resources/views/info.blade.php看起來像這樣的檔案
<!DOCTYPE html>
<html>
<head>
<title>Info Test 2</title>
</head>
<body>
<p>Hello from Blade Template</p>
<p><?php
echo phpinfo();
?></p>
</body>
</html>
當我http://myserver/info2在瀏覽器中訪問時,我得到了一個格式良好的 PHP 資訊頁面,正如人們所期望的那樣。這證明 PHP 在我的 IIS 設定上正確運行。
但是當我訪問時http://myserver/info,我只從 HTML 檔案的第 1 段中獲取文本,說“Hello from simple route”。PHP-info 沒有被渲染,查看 dev-tools 輸出我們可以看到<?php標簽被注釋掉了:

我知道這是因為 IIS 沒有認識到它在處理*.php檔案,因此沒有意識到它應該通過其 PHP 決議器傳遞回應。但我不明白的是,與 Blade 模板相比,為什么它不僅僅適用于“簡單”的 Laravel 路由。(如果我明白為什么,我可能能夠找出要更改哪個 IIS 配置來修復它)。
在 IIS 服務器“處理程式映射”下,我有以下設定:

我已經嘗試為上述配置設定一個*.html和一個*路徑,這樣它就不會總是尋找一個 PHP 檔案來呼叫 FastCGI/PHP 處理器,但是這些都沒有奏效。誰能幫我指出正確的方向?
uj5u.com熱心網友回復:
當您在/info中回傳一個字串時,它不會被決議為像resources/views/info.blade.php這樣的檔案。它只會作為字串回傳。所以<?php ?>不會被PHP決議。
這將起作用:
Route::get('/info', function() {
ob_start();
phpinfo();
$phpinfo = ob_get_clean();
return '<!DOCTYPE html>
<html><head><title>Testing</title></head>
<body>
<p>Hello from simple route</p>
<p>'.$phpinfo.'</p>
</body></html>';
});
Route::get('/info2', function() { return view('info'); });
為什么我使用ob_start()/ob_get_clean()?看這里https://www.php.net/manual/de/function.phpinfo.php
phpinfo()回傳一個布林值,而不是內容本身。內容會直接輸出。因此,如果您想捕獲它并將其寫入變數,您可以使用它ob_start()/ob_get_clean()來執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532639.html
標籤:php拉拉维尔iis
