[英]“exec('sh foo.sh')” in PHP not working
我最近在Linux機器上設置了Apache2服務器。 現在,我想執行一個PHP腳本(index.php),該腳本運行一個shell腳本(foo.sh),該腳本在主目錄中創建一個文件夾,但未創建目錄。
這些是原始的兩個文件:
foo.sh:
#!bin/bash
mkdir /home/lorenzo/testDir
index.php文件:
<?php
exec('sh test.sh');
?>
因此,我認為問題可能是由於特權或某些原因而發生的,確實在我將文件更改為以下內容之后:
foo.sh:
#!bin/bash
echo "Hello world"
index.php文件:
<?php
$temp=exec('sh test.sh');
echo $temp;
?>
我在網站上看到了輸出Hello World
。
這樣就執行了PHP腳本並運行了shell腳本。 但是,為什么shell腳本不能執行mkdir命令?
這確實很可能是權限問題。
您首先必須確定運行哪個用戶apache。 這通常是www-data
(在Debian-ish Linux,例如Ubuntu)上或apache
(在RedHat-ish Linuxes上)或類似的東西。 ps -eF | grep apache
ps -eF | grep apache
將向用戶展示。
在弄清楚之后,請確保apache用戶在您的主目錄中具有適當的權限。 您可以將其添加到用戶組(使用usermod -a -G ...
然后使用chmod g+w ~
),也可以允許所有用戶寫入( chmod o+w ~
)。
但是 ,這都是一個壞主意。 您的php腳本(或以apache用戶身份運行的任何其他腳本)可以被破解,從而使您的主目錄打開,惡意攻擊者可以對其進行修改和rm -rf
。
另外,如果您運行的是RedHat-ish Linux, 則將運行SELinux,默認情況下,這將阻止apache訪問用戶目錄。 在這種情況下,還必須在上設置setsebool -P httpd_enable_homedirs on
。
相反 ,我建議您使用其他目錄,並為您的用戶提供對該目錄的完全訪問權限。 在/var/www/testDir
,以apache作為所有者和組,並將您自己添加到apache用戶組可能是一個明智的想法。
它看起來像是權限問題。 確保Apache具有對該目錄的寫權限
您可能在服務器上有權限問題。 嘗試在ssh命令行中使用chmod -R 775 <dirname>(or 777)
。 您也可以使用chmod()
在php代碼中執行此操作,但我不建議您這樣做,因為它會在每次php代碼運行時都運行它,並且更改它多次都沒有意義。 它可以輸出到屏幕,但是我敢打賭,腳本要使文件具有目錄755的權限。請嘗試對其進行檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.