Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP上传文件_Php_Sftp_Phpseclib - Fatal编程技术网

如何从PHP上传文件

如何从PHP上传文件,php,sftp,phpseclib,Php,Sftp,Phpseclib,我在使用PHP将文件上传到远程服务器时遇到问题。当我使用cURL时,我得到下面描述的错误: 我还按照以下建议尝试了phpseclib: 但当我尝试phpseclib时,会出现以下错误: 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/SSH

我在使用PHP将文件上传到远程服务器时遇到问题。当我使用cURL时,我得到下面描述的错误:

我还按照以下建议尝试了phpseclib:

但当我尝试phpseclib时,会出现以下错误:

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
然后,我尝试在php中使用系统命令,但什么也没有发生:

<?php
echo system('sftp user@ftp.domain.com');
echo system('password');
echo system('put file.csv');
?>
但服务器不允许使用scp命令。我没有创建ssh密钥的shell访问权限

我现在能做的就是从终端下载sftp并手动上传。但我真的想让它自动化,这样PHP网站就可以完成所有这些


关于如何从PHP上传SFTP的教程并不多。是因为这是件坏事吗?如果是这样,我应该怎么做?我要上载到的服务器只允许sftp连接。

使用内置的SSH库。使用scp功能也比启动sftp会话容易


要使用
系统
命令,您必须:

  • 配置无密码ssh
  • 运行类似于scp filename1的命令userid@hostname:filename2,选中
    man scp
    。您可以使用
    sftp
    执行相同的操作,但也可以使用其他一些选项
  • 因此,phpseclib的根目录需要位于include_路径中。从该页:

    <?php
      set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    
      include('Net/SFTP.php');
    ?>
    
    
    
    您应该真正熟悉这种include技术——这是PEAR库和Zend库的标准

    但是我的php服务器说没有定义ss2_connect


    对于此错误,您应该在服务器的php上安装ssh2扩展。

    您可以使用SSHv2库的纯php实现

    以下是一些如何使用此库的示例:

    <?php
    include 'vendor/autoload.php';
    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }
    echo $ssh->exec('pwd');
    echo $ssh->exec('ls -la');
    ?>
    
    
    
    以及:

    
    
    我正在使用的服务器表示未定义ssh2\u connect()。另外,我连接的远程主机不允许我访问scp file.csvuser@remote.server.comThis默认情况下可能不可用。您需要具有libssh2的PECL ssh2扩展。
    <?php
      set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    
      include('Net/SFTP.php');
    ?>
    
    <?php
    include 'vendor/autoload.php';
    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }
    echo $ssh->exec('pwd');
    echo $ssh->exec('ls -la');
    ?>
    
    <?php
    include 'vendor/autoload.php';
    $key = new \phpseclib\Crypt\RSA();
    //$key->setPassword('whatever');
    $key->loadKey(file_get_contents('privatekey'));
    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
    if (!$ssh->login('username', $key)) {
        exit('Login Failed');
    }
    echo $ssh->read('username@username:~$');
    $ssh->write("ls -la\n");
    ?>