簡體   English   中英

PHP中的“ exec('sh foo.sh')”不起作用

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM