来自PHP的SFTP - 未定义的常量CURLOPT_PROTOCOLS和CURLPROTO_SFTP?

时间:2009-11-19 21:51:13

标签: php curl sftp

从我的php脚本中,我需要能够通过sftp将csv文件上传到远程服务器。我按照这个问题的接受答案:

SFTP from within 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时,电脑说我有最新的版本。

我做错了什么?我怎样sftp从php上传我的文件到远程服务器?

2 个答案:

答案 0 :(得分:2)

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

然后,也可能是这样,当构建它时,你的libcurl没有被编译为支持SFTP。需要构建libcurl以使用libssh2进行SCP和SFTP传输。

答案 1 :(得分:0)

如果您不能使用CURL来执行SFTP,您可以使用SFTP的这个纯PHP实现:

http://phpseclib.sourceforge.net/