php sftp使用ssh2破坏pdf文件

时间:2015-09-30 20:44:38

标签: php libssh2

我试图通过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扩展程序了。如果我不能让它发挥作用,我会试一试,但我已经把足够的时间用于此,它应该可以工作。有什么想法吗?

2 个答案:

答案 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的例子中使用过的,但是你去了。