2

如果从带有变量的 php 运行,命令将不起作用。但是,如果我从终端或不带变量的 php(exec 或 shell_exec)运行它,它就可以工作。这不起作用:

$command = 'lftp -c "open -u'.$user.','.$password.' -p xxx sftp://xx.xx.xx.xx; put -O /folder1 folder2/'.$fileName.';"';
exec($command);

var_dump(shell_exec($command)) -> 打印:NULL

这有效:

$command = 'lftp -c "open -u user,password -p 6710 sftp://xx.xx.xx.xx; put -O /folder1 folder2/file.txt;"';
exec($command);

谢谢

4

1 回答 1

-1

在 php.net 上找到

http://php.net/manual/fr/ftp.examples-basic.php

使用 ftp_ssl_connect 连接 ssl ftp 服务器和 cd/ls/put 等而不是尝试 exec / shell_exec 命令行

// set up basic connection 
$ftp_server = "example.com"; 
$conn_id = ftp_ssl_connect($ftp_server); 

// login with username and password 
$ftp_user_name = "myuser"; 
$ftp_user_pass = "mypass"; 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
ftp_pasv($conn_id, true); 
// check connection 
if ((!$conn_id) || (!$login_result)) { 
        echo "FTP connection has failed!"; 
        echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
        exit; 
    } else { 
        echo "Connected to $ftp_server, for user $ftp_user_name"; 
    } 

$buff = ftp_rawlist($conn_id, '.'); 
var_dump($buff); 
ftp_close($conn_id);

感谢 gmail dot com 的 kane dot prajakta 编写了这个示例。

于 2016-09-22T09:41:43.580 回答