2013-08-16 56 views
1

我有腳本在/ home/PI/MYDIR我要執行我必須這樣做的第一件事就是phpseclib SSH - 更改目錄並運行腳本?

$ssh->exec('cd mydir'); 

然後

$ssh->exec('./script'); 

,但它不工作,所以任何人都可以幫助我?

+0

可能是你webserver沒有執行該腳本的權限。 – ciruvan

+0

我使用xampp,那麼我需要什麼樣的權利? – MordFustang

回答

1

這是exec()如何工作的一個基本限制。 exec()有點像......你打開PuTTY,輸入cd mydir,重新啓動PuTTY,然後輸入./script。如果你做了這些,你不會期望「./script」在「mydir」中運行。然而,這幾乎是exec()所做的。

在這種情況下,它不是一個phpseclib問題 - 它更像是一個SSH問題。由SSH規範定義的exec()並不支持這一點。

更多信息:

http://phpseclib.sourceforge.net/ssh/examples.html#chdir

我的建議:要麼使用絕對路徑的或使用的read()/ write()方法。

祝你好運!

+0

好吧,我嘗試使用讀寫,它工作正常,但有一個問題,當我嘗試運行程序/腳本(./video樣本/測試)腳本工作了1秒,然後熄滅。任何soloution? – MordFustang

+0

這些日誌可能會提供一些見解。您可以通過在文件頂部執行define('NET_SSH2_LOGGING',2);'然後在最後調用echo'

' . $ssh->getLog() . '
'來獲得它們。一旦你得到日誌,發佈他們,我們可以看到我們看到的。 – neubert

+1

好吧我解決了我的問題,不殺死進程,所以它不是phpseclib問題。無論如何感謝您的幫助。 – MordFustang

2
cd /path/to/directory && your command 

我的臨時解決方案!

2

可使用\ n:

$ssh->exec("cd mydir\n./script"); 

或者創建一個文件script.sh(例如),並將其保存在UNIX格式:

cd mydir 
./script 

和exec這個腳本:

$script = file_get_contents("script.sh"); 
$ssh->exec($script);