2013-08-06 56 views
0

我在PHP中使用shell_exec,如果我在同一個文件夾中使用可執行文件,但如果我在子文件夾中指向可執行文件,則不起作用。PHP的shell_exec目錄

我有這個(工作):

shell_exec ("makescreen.exe /url=".$link.""); 

我想有這個(不工作 - 它只是跳過執行):

shell_exec ("/screens/makescreen.exe /url=".$link.""); 

哦,路徑在Windows模式下。

感謝您的幫助球員。

回答

1

要小心絕對路徑的差異。相對路徑。執行路徑。例如,你的目錄結構爲:

/home/my/php/script/test.php 
        /makescreen.exe 

在你的PHP腳本調用shell_exec(makescreen.exe ***)

在這種情況下,如果你執行你的腳本一樣cd /home/my/php/script && php test.php,那麼執行路徑是/home/my/php/script/和scirpt會發現在執行路徑makescreen.exe,這裏是/home/my/php/script/

然而,如果你目前留在/home/my和使用方法php /home/my/php/script/test.php然後執行路徑是您當前的路徑,這裏是/home/my,並且腳本將找到makescreen.exe/home/my,肯定失敗。

如果您在腳本中使用/home/my/php/script/makescreen.exe,這是絕對路徑無論你在哪裏,它會在/home/my/php/script/

找到makescreen.exe如果你想要把可執行文件中的子文件夾。您可以在腳本中使用相對路徑subfolder/makescreen.exe,並確保腳本可以正確訪問它。

3

嘗試使用EXEC()的完整路徑,而不是相對路徑

$oldcwd = getcwd(); 
chdir($oldcwd+"/screens"); 
exec("makescreen.exe /url=".$link.""); 
    chdir($oldcwd); 
+0

謝謝,但仍然是同樣的事情。這是從服務器根目前已經兩層,現在我想要另一個子文件夾 - 這是必須做任何事情嗎?我應該使用從服務器根目錄的絕對路徑嗎? –