Я пытаюсь перенести PDF-файл с нашего сервера на другой через SFTP. Я проверил файлы, и они по сути не повреждены. Я могу просмотреть их в командной строке на моем компьютере, и они открываются просто отлично. Заметка: Я могу успешно передать 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 () используя php портит 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, которое делает это. Я попробую, если я не смогу заставить это работать, но я уделил этому достаточно времени, и это ДОЛЖНО сработать. Какие-нибудь мысли?
смотреть на 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);
Нашел ответ. У меня было $ localFilePath написано так:
$localFilePath = "/path/to/my/file.pdf";
file_put_contents () и fwrite () рассматривали переменную как строка. Таким образом, он создаст новый PDF-файл, содержимое которого будет представлять собой строку filepath. Я обнаружил это только после попытки передать небольшой файл .txt. ТАК, добавление это решило проблему:
$localFilePath = fopen("/path/to/my/file.pdf", "r");
Я чувствую, что странно, что я не видел, чтобы это использовалось в примерах, которые я видел, что sftp использует этот подход, но вы идете.