是否可以从一台服务器(sftp)下载一个文件并使用php将其上载到我的服务器?

是否可以从一台服务器(sftp)下载一个文件并使用php将其上载到我的服务器?,php,sftp,Php,Sftp,我被告知这是不可能的,但我想在这里得到一些其他的意见。在这类事情上,我是个新手 我的网站:ExampleSiteA.com 要下载的文件:ExampleSiteB.com 基本上,我是从ExampleSiteB.com下载一个csv文件来更新我的网站ExampleSiteA.com。为此,我通过CoreFTP手动下载csv文件,然后手动将其上载到ExampleSiteA.com。文件每天都在变化,我想跳过这一步,这样我就可以自动化这个过程 请记住,我需要通过SFTP从ExampleSiteB.c

我被告知这是不可能的,但我想在这里得到一些其他的意见。在这类事情上,我是个新手

我的网站:ExampleSiteA.com

要下载的文件:ExampleSiteB.com

基本上,我是从ExampleSiteB.com下载一个csv文件来更新我的网站ExampleSiteA.com。为此,我通过CoreFTP手动下载csv文件,然后手动将其上载到ExampleSiteA.com。文件每天都在变化,我想跳过这一步,这样我就可以自动化这个过程

请记住,我需要通过SFTP从ExampleSiteB.com下载csv文件

如果一台服务器是SFTP,我不确定是否可以从一台服务器直接下载/上传文件到另一台服务器。文件大小也相当大,平均约为25000KB/25MB

另一个我还没有探讨的选项是需要或包含来自另一台服务器的文件。。。这是一种选择还是一种可能性?该文件位于我的网站专用文件夹中,下载SFTP需要登录


如有任何见解,将不胜感激。提前谢谢

有一个include,只要你在你获取文件的网站上有读/写权限,应该可以工作,但是这只是猜测工作,因为我没有任何方法来检查它。祝你好运

有一个include,只要你在你获取文件的网站上有读/写权限,应该可以工作,但是这只是猜测工作,因为我没有任何方法来检查它。祝你好运

是的,你应该能够做到这一点

告诉您不能这样做的人可能会与JavaScript和跨站点脚本浏览器限制混淆,这些限制阻止从一个域下载的JavaScript访问另一个域中的内容


也就是说,如果您使用的是PHP,我认为这意味着您正在谈论的是在web服务器上运行的PHP,那么您应该能够使用PHP或任何其他脚本或编程语言从SiteB.com下载文件,然后更新文件,最后将文件FTP到另一个web服务器SiteA.com。

是,你应该能够做到这一点

告诉您不能这样做的人可能会与JavaScript和跨站点脚本浏览器限制混淆,这些限制阻止从一个域下载的JavaScript访问另一个域中的内容


也就是说,如果您使用的是PHP,我认为这意味着您正在谈论的是在web服务器上运行的PHP,那么您应该能够使用PHP或任何其他脚本或编程语言从SiteB.com下载文件,然后更新文件,最后将文件FTP到另一个web服务器SiteA.com。

是,使用ssh2_sftp是可能的


是的,使用ssh2_sftp是可能的


我过去在卷发方面运气不错。如果您使用的是Linux机器,那么设置一个服务器来为您执行此更新过程就很简单了。在cURL中可以找到一个很好的CLI HTTP脚本参考,但是您可能需要文件传输的-T标志来完成上传部分。说到上传,如果您可以从要更新的服务器上运行script/process/crontab,我建议您从web服务器下载,以避免一次访问和第三方访问。或者,如果您需要按需更新,您可以编写一个使用内置函数的PHP脚本。如果采用Linux+CLI路径,还可以使用

更新:使用sftp curl测试curl-u uname:pwordsftp://domain.tld 我得到以下错误:Kubuntu 12.04上的libcurl中不支持或禁用curl:1协议sftp。所以卷曲可能不是个好主意。我还测试了CLI sftp sftpuname@domain.tld:/dir/file.ext,但除了使用ssh密钥发送身份验证之外,找不到其他方法。因此,这必然是一个手动过程,除非您在服务器之间设置了ssh密钥。由于听起来您没有访问ExampleSiteB.com的权限,这可能是不可接受的

更新2:由于我最初的答案没有什么用处,我想我会在上面的答案中再进一步。我试图找到一个不涉及PECL扩展的解决方案,但我在这方面运气不好。我建议您尝试一下,您可能会有更好的运气,可以放弃PECL延长路线

唉,进一步阅读,ftp_ssh_connect似乎与sftp协议不兼容,这是可以理解的。然而,我发现了一篇很好的关于使用ssh2_connect和ssh2_sftp的博文,正如前面的回答中提到的,我想我会发布这篇博文来为您提供一些额外的帮助。对于大多数PHP发行版,它并不像调用函数那样简单。这些步骤中的一些可能不是必需的,或者您可能需要执行我在另一篇博文中列出的其他一些操作

在我的系统中,一个
我所要做的就是运行apt get install libssh2-1-dev libssh2 php,并且我能够在php-m输出中找到ssh2。

我过去在cURL方面运气不错。如果您使用的是Linux机器,那么设置一个服务器来为您执行此更新过程就很简单了。在cURL中可以找到一个很好的CLI HTTP脚本参考,但是您可能需要文件传输的-T标志来完成上传部分。说到上传,如果您可以从要更新的服务器上运行script/process/crontab,我建议您从web服务器下载,以避免一次访问和第三方访问。或者,如果您需要按需更新,您可以编写一个使用内置函数的PHP脚本。如果采用Linux+CLI路径,还可以使用

更新:使用sftp curl测试curl-u uname:pwordsftp://domain.tld 我得到以下错误:Kubuntu 12.04上的libcurl中不支持或禁用curl:1协议sftp。所以卷曲可能不是个好主意。我还测试了CLI sftp sftpuname@domain.tld:/dir/file.ext,但除了使用ssh密钥发送身份验证之外,找不到其他方法。因此,这必然是一个手动过程,除非您在服务器之间设置了ssh密钥。由于听起来您没有访问ExampleSiteB.com的权限,这可能是不可接受的

更新2:由于我最初的答案没有什么用处,我想我会在上面的答案中再进一步。我试图找到一个不涉及PECL扩展的解决方案,但我在这方面运气不好。我建议您尝试一下,您可能会有更好的运气,可以放弃PECL延长路线

唉,进一步阅读,ftp_ssh_connect似乎与sftp协议不兼容,这是可以理解的。然而,我发现了一篇很好的关于使用ssh2_connect和ssh2_sftp的博文,正如前面的回答中提到的,我想我会发布这篇博文来为您提供一些额外的帮助。对于大多数PHP发行版,它并不像调用函数那样简单。这些步骤中的一些可能不是必需的,或者您可能需要执行我在另一篇博文中列出的其他一些操作


在我的系统上,我所要做的就是运行apt get install libssh2-1-dev libssh2 php,我能够在我的php-m输出中找到ssh2。

到这里下载您需要的:

更新

对于SFTP 然后在脚本中:

<?php
include('Net/SFTP.php');

$url = 'http://www.downloadsite.com';
$fileToDownload = "yourCSV.csv";
$cmd = "wget -q \"$url\" -O $fileToDownload";
exec($cmd);

$sftp = new Net_SFTP('www.uploadsite.com');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd() . "\r\n";
$sftp->put('remote.file.csv', 'yourCSV.csv', NET_SFTP_LOCAL_FILE);
print_r($sftp->nlist());
?>
阅读文档以获取更多帮助和示例:

要记录连接失败时正在执行的操作,请使用以下命令:

include('Net/SSH2.php');
define('NET_SSH2_LOGGING', true);
$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username','password');
echo $ssh->getLog();
对于FTP上传-SO已经疯了,不想格式化我的代码,但无论如何,它在这里:
点击此处下载所需内容:

更新

对于SFTP 然后在脚本中:

<?php
include('Net/SFTP.php');

$url = 'http://www.downloadsite.com';
$fileToDownload = "yourCSV.csv";
$cmd = "wget -q \"$url\" -O $fileToDownload";
exec($cmd);

$sftp = new Net_SFTP('www.uploadsite.com');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd() . "\r\n";
$sftp->put('remote.file.csv', 'yourCSV.csv', NET_SFTP_LOCAL_FILE);
print_r($sftp->nlist());
?>
阅读文档以获取更多帮助和示例:

要记录连接失败时正在执行的操作,请使用以下命令:

include('Net/SSH2.php');
define('NET_SSH2_LOGGING', true);
$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username','password');
echo $ssh->getLog();
对于FTP上传-SO已经疯了,不想格式化我的代码,但无论如何,它在这里:

包含不是一个选项,您是否尝试过包含一个25MB大的文件?很好。只是好奇,如果其他人不工作,这是否是一个好的备份选项。谢谢包含不是一个选项,您是否尝试过包含一个25MB大的文件?很好。只是好奇,如果其他人不工作,这是否是一个好的备份选项。谢谢cURL可能有用:cURL可能有用:然后使用file\u put\u内容将流保存到目标服务器上的文件中。这看起来不错。。。迫不及待地想试试。我必须让你知道它是如何工作的!谢谢你们两个!:-调用未定义的函数ssh2\u connect我做错了什么?删除;在php.ini中的extension=php\u ssh2.dll之前,重新启动服务器。然后使用文件\u put\u内容将流保存到目标服务器上的文件中。这看起来不错。。。迫不及待地想试试。我必须让你知道它是如何工作的!谢谢你们两个!:-调用未定义的函数ssh2\u connect我做错了什么?删除;在php.ini中的extension=php\u ssh2.dll之前,重新启动服务器。我希望我现在可以处理这个问题。。。我迫不及待地想做这件事。每天手动操作都很痛苦。谢谢你的帮助,我会让你知道我的进展!谢谢你的更新和信息。我非常感谢你的帮助。再次感谢你的工作。。。我自己也尝试过很多事情,但还没有成功。我希望我现在能在这方面努力。。。我迫不及待地想做这件事。每天手动操作都很痛苦。谢谢你的帮助,我会让你知道我的进展!谢谢你的更新和信息。我非常感谢你的帮助。再次感谢你的工作。。。我已经尝试了很多事情,但还没有成功。登录失败。。。第3761行的../../../Net/SFTP.php中需要SSH_FXP_版本。尝试下载SSH2.php和SFTP.php的最新版本,并告诉我他们是否解决了问题。2.检查你的密码和登录是否有效。这是从sftp和uploa下载的代码吗
d到普通ftp或反之亦然?这两个代码都是用于sftp的,而第一个代码是从公开可用的HTTP资源下载文件…我更新了第一篇文章,并包含了记录连接时发生的情况的代码,等等…我不是从公开可用的HTTP资源下载的。。。原始文件位于sftp上。。。然后我需要把它上传到我的服务器上。我是这方面的新手,很抱歉有任何困惑。登录失败。。。第3761行的../../../Net/SFTP.php中需要SSH_FXP_版本。尝试下载SSH2.php和SFTP.php的最新版本,并告诉我他们是否解决了问题。2.检查你的密码和登录是否有效。这段代码是从sftp下载并上传到普通ftp还是从普通ftp上传?这两段代码都是针对sftp的,而第一段代码是从公开可用的HTTP资源下载文件…我更新了第一篇文章,并包含了记录连接时发生的情况的代码,等等…我不是从公开的http下载。。。原始文件位于sftp上。。。然后我需要把它上传到我的服务器上。我是这方面的新手,抱歉搞混了。