2011-05-19 71 views
0

我有一個多線程的cli下載程序的ubuntu名爲Aria2c。無法獲取shell_exec來下載文件

我一直在試圖讓php腳本運行aria2c並使用shell_exec下載文件,但我似乎無法讓它工作。最終,我打算在頁面上有一個輸入框,我可以輸入鏈接,詠歎調將下載它。

下面的代碼,我想出了(現在即時通訊手動輸入鏈接):
<?php $dl = shell_exec('aria2c -d /home/user/ www.downloadlink.com'); ?>

注意,aria2c命令我指定以及在shell工作;並且我試圖下載的目錄被設置爲'777'。

我很困惑,爲什麼它不工作,有什麼想法? PS:我更喜歡使用aria而不是替代品,因爲它是多線程的並且它支持cookie。

+2

了www/apache用戶有權限運行詠歎調?什麼是$ dl? – 2011-05-19 10:53:08

+0

爲什麼不是multi_curl? shell命令的輸出是什麼? – Nemoden 2011-05-19 10:53:45

+0

執行任何其他shell_exec命令實際上是否成功? – Nanne 2011-05-19 10:53:50

回答

1

檢查PHP是否在safe_mode中運行。如果safe_mode打開,shell_exec將不起作用。

編輯:aria2c沒有引用完整的路徑。引用它是這樣的:shell_exec('/path/to/aria2c -d /home/user/ www.downloadlink.com')的作品。

+0

我已經成功完成了一些使用shell_exec的其他命令,所以不應該是問題 – lelouch 2011-05-19 11:01:48

+0

嗯..然後是你的路徑中的aria2c二進制/腳本?如果不是,請嘗試引用完全合格的路徑,即:'shell_exec('/ path/to/aria2c -d/home/user/www.downloadlink.com');' – 2011-05-19 11:05:21

+0

哦!真棒,這是做了伎倆。現在我已經看到它在工作,我可以進入下一個階段;謝謝! – lelouch 2011-05-19 11:11:21

0

我將假設您正在通過Web服務器運行PHP。在這種情況下,Web服務器不太可能擁有寫入用戶主目錄的權限:Apache作爲守護程序與有限用戶的憑證一起運行。此外,Apache中的env變量不一定與用戶的PATH相同。最後但並非最不重要的是,您不檢查返回值或腳本輸出。

嘗試是這樣的:

<?php 

exec('/path/to/aria2c -d /tmp www.downloadlink.com', $output, $return_var); 

var_dump($output, $return_var); 

?> 

你可以得到完整的路徑與aria2c:

which aria2c 
+0

權限不是問題,因爲我將目錄設置爲777.原來問題是我沒有輸入aria2c的路徑 – lelouch 2011-05-19 11:22:09

+0

您是否已將主目錄設置爲可由任何人寫入?即使出於測試目的,這聽起來也很可怕.. :-P – 2011-05-19 11:28:01

+0

哈哈。只有某個目錄。無論如何它是在VPS上,所以不是那麼可怕:) – lelouch 2011-05-19 11:36:18