我有麻烦使用PHP蔽文件上传到远程服务器。当我使用的卷曲,我得到了错误描述了这里:

蔽从PHP-未定义的不断CURLOPT_PROTOCOLS和CURLPROTO_SFTP?

我也试过phpseclib作为建议:

蔽从内PHP

但是,当我试着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');
?>

我也试过

<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>

但我php server说ss2_connect没有定义。

我试图做到以下的从终端

scp file.csv user@ftp.remote.com
password

但是服务器不允许scp命令。我没有壳访问创建ssh键。

我所能做的就是蔽从终端和手动上传。但是我真的想自动化,这使PHP网站可以做到这一切。

没有许多教程如何蔽的上传自PHP.它是因为它是一个糟糕的事情吗?如果是这样,我应该怎么做?服务器我想上传到仅允许蔽的连接。

有帮助吗?

解决方案

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

每说,phpseclib的根目录必须在你的include_path。从该网页:

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

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

您真的应该熟悉这种技巧包括 - 它是PEAR库和Zend那些漂亮的标准

其他提示

  

但我的PHP服务器说ss2_connect没有定义。

有关这个错误,你应该在你的服务器的PHP安装SSH2扩展。

使用内置的SSH文库。使用SCP功能会比太发起SFTP会话更容易。

http://www.php.net/manual /en/function.ssh2-scp-send.php

使用 system 命令你必须:

  1. 配置密码ssh
  2. 运行这样的命令 scp filename1 userid@hostname:filename2, 检查 man scp.你可以做同样的 sftp 但有一些其他的选择

您可以使用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');
?>

<?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");
?>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top