如何从PHP上传文件
我在使用PHP将文件上传到远程服务器时遇到问题。当我使用cURL时,我得到下面描述的错误: 我还按照以下建议尝试了phpseclib: 但当我尝试phpseclib时,会出现以下错误:如何从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
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会话容易
要使用
系统
命令,您必须:
man scp
。您可以使用sftp
执行相同的操作,但也可以使用其他一些选项<?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");
?>