【发布时间】:2015-09-30 20:44:37
【问题描述】:
我正在尝试通过 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 扩展可以做到这一点。如果我不能让它工作,我会尝试一下,但我已经投入了足够的时间,它应该可以工作。有什么想法吗?
【问题讨论】:
-
确保传输是二进制的
-
@Dagon 我检查了,例如,file_put_contents PHP 在文档中说是二进制安全的。我必须做些什么来启用我没有看到的二进制文件吗?
-
fopen 应该是 r 而不是 w? and add b so 'rb' "如果你在处理二进制文件时没有指定'b'标志,你的数据可能会遇到奇怪的问题,包括损坏的图像文件和\r\n字符的奇怪问题。 "
-
真的吗?这会产生一大堆错误。我的理解是我正在打开一个不存在的文件进行写入(这会创建一个空白文件),然后我使用 fwrite() 写入新创建的文件。我尝试了 'r' 和 'rb',这引发了一堆错误。我也尝试了“wb”,但没有任何区别。
-
对不起,我弄错了转移方向;(但 b 仍然适用