2015-09-30 4 views
-1

Я пытаюсь перенести файл PDF с нашего сервера на другой через SFTP. Я проверил файлы, и они не являются коррумпированными. Я могу scp их в командной строке на свой компьютер, и они открываются просто отлично. Примечание: Я могу успешно перенести файл pdf, он просто поврежден, как только он попадает на другой сервер.php sftp using ssh2 corruptting pdf files

Я попытался с помощью двух методов:

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-графике после того, как он находится на своем сервере.

Теперь я знаю о другом расширении php, которое это делает. Я попробую, если я не смогу заставить это работать, но я потратил на это достаточно времени, и СЛЕДУЕТ работать. Есть предположения?

+0

убедитесь, что передача двоичная. –

+0

@ Дагон, который я проверил, и, например, file_put_contents PHP говорит, что в документах двоично-безопасный. Есть ли что-то, что я должен сделать, чтобы включить двоичный файл, который я не вижу? –

+0

fopen должен быть r не w? и добавьте b так «rb» * «Если вы не укажете флаг« b »при работе с бинарными файлами, у вас могут возникнуть странные проблемы с вашими данными, включая файлы с поврежденными изображениями и странные проблемы с символами \ r \ n. * * –

ответ

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); 
+0

Для этого требуется расширение PSTL ssh2, в последней строке вопроса первоначальный запросчик спросил, как это сделать без расширения PHP. – mjsa

+0

@mjsa ok, не видно, спасибо. В любом случае, стоит попробовать –

0

Найдено ответ. У меня было $ localFilePath написано как так:

$localFilePath = "/path/to/my/file.pdf"; 

file_put_contents() и FWRITE() относились к переменной как строки. Таким образом, он создаст новый pdf-файл с его содержимым, являющимся файловой дорожкой. Я обнаружил это только после попытки переноса небольшого TXT-файла. SO, добавляя, что это устранило проблему:

$localFilePath = fopen("/path/to/my/file.pdf", "r"); 

Я чувствую, что это странно, что я не видел этого, используемый в примерах, которые я видел, что SFTP, используя этот подход, но там вы идете.

Смежные вопросы