此代码
$user = 'user';
$pass = 'password';
$filename = 'text.txt';
error_reporting(E_ALL);
ini_set('display_errors', 1);
$ch = curl_init();
$localfile = 'text.txt';
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, 'sftp://$user:$pass@myserver.com/upload/$filename');
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);
if ($error_no == 0) {
$error = 'File uploaded succesfully.';
} else {
$error = 'File upload error.';
}
echo $error.' '.$error_no;
会显示以下错误:
文件上传错误。7(无法将文件写入磁盘)
我的要求很简单,我只需要使用curl在live服务器上上传text.txt
文件。
4条答案
按热度按时间lndjwyie1#
因此,对于诊断SSH / SFTP问题,我认为phpseclib, a pure PHP SFTP implementation是最好的方法。
特别是,phpseclib的有用之处在于它能够创建日志文件,这样您就可以看到正在发生的事情。
我认为它也更容易使用,哈哈,但这取决于你。
yh2wf1be2#
这个问题的答案今天帮助了我。
我只想指出,
'sftp://$user:$pass@myserver.com/upload/$filename'
中的变量永远不会被解释,因为你使用的是单引号。你应该使用双引号,或者将变量连接到单引号字符串中。evrscar23#
也许这个link能帮到你,
有一些使用CURL上传文件的不同方法的示例。
或者试试这个
fslejnso4#
我还遇到了一个问题,就是我使用的脚本不起作用。所以我设置了CURLOPT_VERBOSE,并在输出中添加了curl_error结果。这样,我意识到,在我的例子中curl没有启用ssh支持,这可以通过重新出现来解决。(=在其他系统上重新构建,我在gentoo上)。另外,代码中的单引号会妨碍正确的变量替换。解决这些问题后,和主机,我对您函数的结果现在看起来像这样:
已成功上载文件。0