我试图通过SFTP将pdf文件从我们的服务器传输到另一台服务器。我检查了文件,但它们本身并没有腐败。我可以在命令行上将它们scp到我的电脑上,它们打开就好了。 注意:我可以成功传输pdf文件,一旦到达其他服务器就会损坏。
我尝试过使用两种方法:
conn = ssh2_connect($url, 22);
$auth = ssh2_auth_password($conn, $userName, $password);
$sftp = ssh2_sftp($conn);
file_put_contents("ssh2.sftp://".$sftp.$remoteFilePath, $localFilePath);
在看了这个问题后,我发现了下面的问题并尝试了给出的答案:
ssh2_scp_send() using php corrupts pdf
conn = ssh2_connect($url, 22);
$auth = ssh2_auth_password($conn, $userName, $password);
$sftp = ssh2_sftp($conn);
$fp = fopen("ssh2.sftp://".$sftp.$remoteFilePath, "w");
fwrite($fp, $localFilePath);
fclose($fp);
这也会传输文件,但也会损坏,因此一旦进入服务器,我就无法在FTP GUI中打开它。
我现在知道另一个执行此操作的php扩展程序了。如果我不能让它发挥作用,我会试一试,但我已经把足够的时间用于此,它应该可以工作。有什么想法吗?
答案 0 :(得分:0)
查看http://php.net/manual/en/function.ssh2-scp-send.php
并尝试:
$conn = ssh2_connect($url, 22);
$auth = ssh2_auth_password($conn, $userName, $password);
ssh2_scp_send($conn, $localFilePath, $remoteFilePath, 0644);
答案 1 :(得分:0)
找到答案。我将$ localFilePath编写为:
$localFilePath = "/path/to/my/file.pdf";
file_put_contents()和fwrite()将变量视为字符串。所以它会创建一个新的pdf文件,其内容是字符串filepath。我尝试传输一个小的.txt文件后才发现这个。所以,添加这个解决了问题:
$localFilePath = fopen("/path/to/my/file.pdf", "r");
我觉得很奇怪,我没有看到在我看过使用这种方法的sftp的例子中使用过的,但是你去了。