How to SFTP upload files from PHP

26,619

http://phpseclib.sourceforge.net/documentation/intro.html#intro_usage_correct

Per that, phpseclib's root directory needs to be in your include_path. From that page:

<?php
  set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

  include('Net/SFTP.php');
?>

You should really familiarize yourself with this kind of include technique - it's pretty standard for PEAR libraries and Zend ones.

Share:
26,619
Patr01
Author by

Patr01

We consult and build stuff out of Toronto!

Updated on July 21, 2022

Comments

  • Patr01
    Patr01 almost 2 years

    I'm having trouble using PHP to SFTP upload files to a remote server. When I use cURL, I'm getting the error described here:

    SFTP from PHP - undefined constant CURLOPT_PROTOCOLS and CURLPROTO_SFTP?

    I also tried phpseclib as suggested in:

    SFTP from within PHP

    But when i try phpseclib, i get these errors:

    Warning: require_once(Math/BigInteger.php) [function.require-once]: failed to open stream: No such file or directory in /home/john/public_html/test/Net/SSH2.php on line 53
    
    Fatal error: require_once() [function.require]: Failed opening required 'Math/BigInteger.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/john/public_html/test/Net/SSH2.php on line 53
    

    I then tried using system commands in php like so, but nothing happened:

    <?php
    echo system('sftp [email protected]');
    echo system('password');
    echo system('put file.csv');
    ?>
    

    I also tried

    <?php
    $connection = ssh2_connect('shell.example.com', 22);
    ssh2_auth_password($connection, 'username', 'password');
    
    ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
    ?>
    

    but my php server says ss2_connect is not defined.

    I tried to do the following from terminal

    scp file.csv [email protected]
    password
    

    But the server does not allow scp command. I do not have shell access to create ssh keys.

    All i can do right now is sftp from terminal and manually upload. But I really want to automate this so a PHP website can do all this.

    There aren't many tutorials on how to SFTP upload from PHP. Is it because it's a bad thing to do? If so, what should I be doing? The server I want to upload to only allows sftp connections.