SFTP from PHP - undefined constant CURLOPT_PROTOCOLS and CURLPROTO_SFTP?
Asked Answered
C

2

3

From my php script, i need to be able to upload a csv file to a remote server via sftp. I followed the accepted answer from this question:

SFTP from within PHP

Here's what my code looks like

<?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:[email protected]/'.$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;
?>

The output was

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

I am using curl libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10 . When I did a sudo apt-get install php5-curl, the computer said i had the most recent version.

What am I doing wrong? How do i sftp upload my files to a remote server from php?

Cassity answered 19/11, 2009 at 21:51 Comment(3)
Why can't you just use system('sftp to_server....'). Check man sftpMiltonmilty
ok, I'm trying that right now. When don through a terminal , i have to enter 3 separate commands: sftp to server, enter password, issue the put command. So in PHP, does that mean i execute 3 separate system commands as well?Cassity
something like system('sftp [email protected]'); system('password'); system('cd public_html'); system('put file.csv');Cassity
U
2

First, your installed libcurl version doesn't seem to be new enough to have the options you try to use.

Then, it might also be so that your libcurl wasn't compiled to support SFTP when whoever built it. libcurl need to be built to use libssh2 for SCP and SFTP transfers to work.

Umbelliferous answered 20/11, 2009 at 22:9 Comment(0)
H
0

If you can't use CURL to do SFTP, you might be able to use this pure-PHP implementation of SFTP:

http://phpseclib.sourceforge.net/

Hemipode answered 24/11, 2009 at 23:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.