我正在寫一個PHP腳本,我想禁止從Web訪問(我會要求用戶將其移出Web根並通過CLI執行,但您永遠不知道它們是否會會聽!)如何使PHP頁面在瀏覽器中被禁用
是否有一個簡單的功能,發生任何人使頁面死亡,如果它的瀏覽器請求?
感謝您的任何想法。
我正在寫一個PHP腳本,我想禁止從Web訪問(我會要求用戶將其移出Web根並通過CLI執行,但您永遠不知道它們是否會會聽!)如何使PHP頁面在瀏覽器中被禁用
是否有一個簡單的功能,發生任何人使頁面死亡,如果它的瀏覽器請求?
感謝您的任何想法。
您可以使用php_sapi_name()
來測試腳本是否正在通過CLI運行。
它可以在HTTP服務器上運行時返回大量不同的可能值 - 難以在那裏進行可靠區分 - 但CLI似乎只有一個可能的返回值:cli
。
如果您正在尋找一種通用解決方案,請確保閱讀下面的評論主題以獲取關於某些潛在問題的更詳細討論。
您可以使用php-sapi-name函數檢測腳本是否被Web服務器或CLI接口請求。
我不是PHP專家,但你可以檢查$ _SERVER變量?
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) != 'cli') {
die "You are not using CLI".PHP_EOL;
}
您可以使用PHP-SAPI名稱,或者您可以使用預定義常數是稍快(儘管你從來沒有注意到!)
<?php
if(PHP_SAPI != 'cli') exit;
// continue
這對我的回答有評論中討論的潛在問題。 – 2010-07-06 20:44:18
它有0個問題,因爲你注意到自己「但似乎只有一個可能的CLI返回值:cli';) – nathan 2010-07-06 20:45:25
nope,閱讀@ Mike的評論,它不是100%真實的,它可能是'cgi'或' fgci'在一些非常罕見的情況下。這可能是值得的選擇,因爲聽起來像OP想要一個通用的解決方案。但在正常情況下,我同意它會足夠好。 – 2010-07-06 20:47:49
'PHP_SELF' 的文件名 當前正在執行腳本,相對於文檔根目錄 。例如, $ _SERVER ['PHP_SELF']在 的腳本中的地址爲 http://example.com/test.php/foo.bar 將是/test.php/foo.bar。常量包含當前文件(即包含 )文件的完整路徑和文件名。如果PHP作爲 命令行處理器運行,則此變量 包含自PHP 4.3.0起的腳本名稱。以前它不可用。
嘿,很好!我喜歡這一點,它繞過了評論中提到的CLI/CGI問題。必須檢查它是路徑還是URL。無法看到任何陷阱 - 不同意見,任何人? +1 – 2010-07-06 20:40:38
只是檢查由*米哈爾警告在roszka點PL *上的[php_sapi_name()](http://php.net/manual/en/function.php-sapi-name。 PHP)頁面。我記得以前遇到過這個問題(雖然很久以前,所以我不能具體說明)。我最終使用[$ _SERVER](http://php.net/manual/en/reserved.variables.server.php),因爲它在作爲CLI運行時產生明顯不同的輸出。我認爲檢查$ _SERVER ['argv']'是否存在就足夠了。 – Mike 2010-07-06 20:33:03
@Mike好點和重要的陷阱!另一方面,我過去也遇到過'$ _SERVER []'檢查類似的問題 - 一次在測試服務器上運行的生產服務器上的CLI測試失敗。但是我不能確定哪一個數組鍵是我當時檢查過的,但我必須查看它。缺少'$ _SERVER [「REMOTE_ADDR」]'也可能是一個指示器 - 但我確信會有一些異國情調的服務器在http模式下不傳遞它。 Arrrghhh .... :) – 2010-07-06 20:37:38
感謝pekka,馬克,user257493和所有的意見。我要這樣做,假設它會在大多數情況下工作。我很欣賞討論和很好的解釋! – julio 2010-07-06 22:44:12