来自PHP的SFTP-未定义的常量CURLOPT_协议和CURLPROTO_SFTP?

来自PHP的SFTP-未定义的常量CURLOPT_协议和CURLPROTO_SFTP?,php,curl,sftp,Php,Curl,Sftp,在我的php脚本中,我需要能够通过sftp将csv文件上传到远程服务器。我遵循了这个问题的公认答案: 下面是我的代码 <?php error_reporting(E_ALL); ini_set('display_errors', 1); $ch = curl_init(); $localfile = 'export-3.csv'; $fp = fopen($localfile, 'r'); curl_setopt($ch, CURLOP

在我的php脚本中,我需要能够通过sftp将csv文件上传到远程服务器。我遵循了这个问题的公认答案:

下面是我的代码

<?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;
?>
我使用的是curl libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10。当我进行sudo apt get安装php5 curl时,计算机说我有最新的版本


我做错了什么?如何从php将文件上传到远程服务器?

首先,您安装的libcurl版本似乎不够新,无法提供您尝试使用的选项


那么,也可能是因为无论是谁构建了libcurl,都没有编译它来支持SFTP。需要构建libcurl来使用libssh2进行SCP和SFTP传输才能工作。

如果不能使用CURL进行SFTP,您可能可以使用SFTP的纯PHP实现:


为什么不能直接使用
系统('sftp to_server…')
。检查
man-sftp
好的,我正在尝试。当don通过终端时,我必须输入3个单独的命令:sftp到服务器,输入密码,发出put命令。那么在PHP中,这是否意味着我也执行3个独立的系统命令?类似于system('sftpuser@ftp.domain.com'); 系统(“密码”);系统('cd public_html');系统('put file.csv');
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