2016-09-16 67 views
0

複製遠程文件,我想用PHP執行命令(rsync的)從遠程服務器複製文件夾和文件到本地文件夾。使用rsync在PHP

這是我在PHP寫的代碼。在SSH(本地終端和遠程putty.exe)中執行WORKS命令,正確複製文件夾和文件。

但它不能在PHP工作。我能做什麼?你知道更好的(安全/最佳)方法嗎?

exec("echo superuserpassword | sudo -S sshpass -p 'sshremoteserverpassword' rsync -rvogp --chmod=ugo=rwX --chown=ftpuser:ftpuser -e ssh [email protected]:/path/files/folder /opt/lampp/htdocs/dowloadedfiles/", $output, $exit_code); 

編輯: 我讀了這個guide創建我的服務器和我的本地機器之間的聯繫。現在

我可以在遠程機器上使用ssh登錄不需要密碼。

我改變了我的命令:

rsync -crahvP --chmod=ugo=rwX --chown=ftpuser:ftpuser remote.com:/path/to/remote/files /path/to/local/files/ 

該命令也工作在終端,但是當我EXEC命令PHP發送,再次失敗,但我得到了另一種不同的錯誤:127

正如MarcoS在他的回答中所說的,我檢查了error_log。

的消息是這樣的:

ssh: relocation error: ssh: symbol EVP_des_cbc, version OPENSSL_1.0.0 not defined in file libcrypto.so.1.0.0 with link time reference 
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] 
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.1] 
+2

什麼「不起作用」?你有錯誤嗎? – WillardSolutions

+0

該命令不會複製文件和文件夾。該2個變量進行這樣的: $輸出= 1個 $ exit_code = 1 –

回答

1

嗯,多多嘗試/錯誤後,我完成切根的問題:

我readed這個guide(像最後一個,但更好的解釋),我改變了執行rsync命令到遠程服務器(文件所在位置)的php文件並運行rsync.php fil在那裏,它完美地工作。

要在機器中的文件執行(要複製的文件和rsync.php)

1.- SSH-密鑰生成生成密鑰

ssh-keygen 

輸入一個空密碼和重複再次使用空密碼。

2。 - SSH-複製身份證複印件公鑰遠程主機

ssh-copy-id -i ~/.ssh/id_rsa.pub remoteserveraddressip(xxx.xxx.xxx.xxx) 

的rsync.php文件:

exec("rsync -crahvP /path/in/local/files/foldertocopy [email protected]:/path/in/remote/destinationfolder/", $output, $exit_code); 

了這一切之後,導航到rsync.php文件和所有必須工作。至少爲我工作...

1

我想你遇到身份問題 ... :-)

在一個CLI,你運行的命令,作爲登錄用戶。
在PHP,你是爲你的web服務器運行時(例如,Apache的經常運行作爲www-data,或apache用戶...)的用戶身份運行命令。

一個可能的解決方案,我看到(如果上述問題真正的原因),就是你的用戶添加到Web服務器組...

我也建議你檢查Web服務器錯誤日誌,以確定問題的真正原因...... :-)

+0

我同時檢查錯誤日誌得到這個錯誤: 'SSH:搬遷錯誤:SSH:符號EVP_des_cbc,版本OPENSSL_1.0.0不是在文件libcrypto定義。 so.1.0.0 with link time reference' rsync:連接意外關閉(目前收到0字節)[接收方] rsync錯誤:在io.c(226)找不到遠程命令(代碼127) [接收機= 3.1.1]' –