Из моего php-скрипта мне нужно загрузить CSV-файл на удаленный сервер через sftp. Я последовал принятому ответу на этот вопрос:
SFTP из PHP
Вот как выглядит мой код
<?php error_reporting(E_ALL); ini_set('display_errors', 1); $ch = curl_init(); $localfile = 'export-3.csv'; $fp = fopen($localfile, 'r'); curl_setopt($ch, CURLOPT_URL, 'sftp://user:pass@ftp.remote.com/'.$localfile); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile)); curl_exec ($ch); $error_no = curl_errno($ch); curl_close ($ch); if ($error_no == 0) { $error = 'File uploaded succesfully.'; } else { $error = 'File upload error.'; } echo $error.' '.$error_no; ?>
Выход был
Notice: Use of undefined constant CURLOPT_PROTOCOLS - assumed 'CURLOPT_PROTOCOLS' in /home/john/public_html/test/test.php on line 9 Notice: Use of undefined constant CURLPROTO_SFTP - assumed 'CURLPROTO_SFTP' in /home/john/public_html/test/test.php on line 9 File upload error.1
Я использую curl libcurl / 7.18.2 OpenSSL / 0.9.8g zlib / 1.2.3.3 libidn / 1.10. Когда я сделал sudo apt-get install php5-curl, компьютер сказал, что у меня была самая последняя версия.
Что я делаю не так? Как я могу загрузить мои файлы на удаленный сервер из php?
Во-первых, ваша установленная версия libcurl не кажется достаточно новой, чтобы использовать параметры, которые вы пытаетесь использовать.
Тогда также может быть так, что ваш libcurl не был скомпилирован для поддержки SFTP, когда тот, кто его построил. libcurl необходимо создать, чтобы использовать libssh2 для передачи SCP и SFTP для работы.
Если вы не можете использовать CURL для выполнения SFTP, вы можете использовать эту чистую PHP-реализацию SFTP: