背景:我有一個(gè) PHP 腳本調(diào)用shell_exec. 目前我只想測試它是否有效并通過它運(yùn)行一個(gè)基本命令。同一腳本的不同副本存在于同一服務(wù)器上的兩個(gè)不同的 Web 應(yīng)用程序中。兩個(gè)應(yīng)用程序的匿名身份驗(yàn)證都設(shè)置為 IUSR。這是示例代碼:$output = shell_exec('dir 2>&1');print_r($output);在 IIS 中的一個(gè)網(wǎng)站上嘗試它會(huì)提供所需的輸出。但是,在另一個(gè)上,它不捕獲任何輸出,而是給出以下錯(cuò)誤:PHP Warning: shell_exec(): Unable to execute 'dir 2>&1' in C:\inetpub\webapp\script.php on line 4我能找到的關(guān)于這個(gè)錯(cuò)誤的唯一信息來自這里:對于 Windows 上的 PHP,如果出現(xiàn)“警告:shell_exec() [function.shell-exec]:無法執(zhí)行”錯(cuò)誤,則需要檢查文件“C:\WINDOWS\system32\cmd.exe”的權(quán)限. 您需要對此文件的讀取/執(zhí)行權(quán)限。我建議使用 sysinternals Process Monitor“procmon.exe”來確認(rèn)正在嘗試運(yùn)行“cmd.exe”的用戶?!斑M(jìn)程名稱”的過濾器是“php-cgi.exe”,“路徑”以“cmd.exe”結(jié)尾。查看具有拒絕訪問錯(cuò)誤的任務(wù)的事件屬性,它會(huì)顯示“模擬”用戶名。這通常是“Internet 來賓帳戶”,通常是“NT AUTHORITY\IUSR”。然而,這似乎不是權(quán)限問題。我不明白為什么它在網(wǎng)站上而不是另一個(gè)網(wǎng)站上工作。兩個(gè)網(wǎng)站的匿名身份驗(yàn)證都設(shè)置為 IUSR。此外,safe_mode在 php.ini 中設(shè)置為off.還有什么我需要在這里檢查的嗎?cmd.exe 是否需要 IUSR 的顯式讀取/執(zhí)行權(quán)限?
PHP 警告:shell_exec():無法執(zhí)行“[command]”
函數(shù)式編程
2023-04-28 13:52:39