我正在使用 phpseclib 将文件上传到远程服务器。以前,我的脚本运行良好,但几周前它似乎已停止工作。我得到一个
NET_SFTP_STATUS_NO_SUCH_FILE:从 $sftp->put 中找不到文件。
问题是要上传到服务器的文件确实存在。另外,该代码以前可以正常工作。
由于该脚本之前可以运行,似乎目标服务器的某些设置可能已更改。
有没有人有解决此问题的任何想法或建议?
无论如何使用phpseclib或任何其他方法将sftp与私钥和ftp密码连接起来.
我希望允许用户直接从 sftp 服务器下载文件,但在浏览器中。
我找到了读取文件并回显字符串的方法(使用 ssh2.sftp 或 phpseclib 连接),但我需要下载,而不是读取。
另外,我看到的解决方案建议从 sftp 服务器下载到 Web 服务器,然后使用 readfile() 从 Web 服务器到用户的本地磁盘。但这意味着两次文件传输,如果文件很大,我想这会很慢。
可以直接从sftp下载到用户磁盘吗?
为任何回应干杯!
我目前正将我的项目从Laravel 4迁移到Laravel 5,我仍然是Laravel和OOP的新手用户,但到目前为止一切顺利.
但是,在我的L4项目中,我使用phpseclib生成SSH密钥,我通过以下方式导入:
MyController.php
...
include('../app/libs/phpseclib0.3.10/Crypt/RSA.php');
$rsa = new Crypt_RSA();
...
Run Code Online (Sandbox Code Playgroud)
这似乎不再起作用了:
syntax error, unexpected 'if' (T_IF), expecting identifier (T_STRING)
Run Code Online (Sandbox Code Playgroud)
... /应用/库/ phpseclib0.3.10 /地穴/ RSA.php
/**
* Include Crypt_Random
*/
// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
// will trigger a call to __autoload() if you're wanting to auto-load classes
// call function_exists() a second time to stop the include_once from being called outside
// of the auto loader
if (!function_exists('crypt_random_string')) …Run Code Online (Sandbox Code Playgroud) 我正在使用phpseclib将文件上传到远程服务器.以前,我的脚本工作正常,但我所期望的是它可以检查远程服务器是否已收到该文件.如文件存在则返回1/true或文件不存在则返回0/false.
我的代码:
include('Net/SFTP.php');
$path = "upload/";
$path_dir .= $ref .".xml";
$directory = '/home/XML/';
$directory .= $ref .".xml";
$sftp = new Net_SFTP('xxx.com',22);
if (!$sftp->login('username', 'password'))
{
exit('SFTP Login Failed');
}
echo $sftp->pwd();
$sftp->put($directory, $path_dir, NET_SFTP_LOCAL_FILE);
if (!$sftp->get($directory))
{
echo "0";
}
Run Code Online (Sandbox Code Playgroud)
文件上传成功,但不知道如何检查文件是否存在.
有没有人对此进行故障排除有任何想法或建议?
我试图使用这个,但它只是给我这个错误,我不知道如何解决这个问题..
警告:include_once(Math/BigInteger.php):无法打开流:891行/home/www/sfs_web/statistics/_public/_functions/Server/Net/SSH2.php中没有此类文件或目录
警告:include_once():在/ home/www/sfs_web/statistics/_public /中打开'Math/BigInteger.php'以包含(include_path ='.:/ usr/share/php:/ usr/share/pear')失败第891行的_functions/Server/Net/SSH2.php
警告:include_once(Crypt/Random.php):无法打开流:第895行/home/www/sfs_web/statistics/_public/_functions/Server/Net/SSH2.php中没有此类文件或目录
警告:include_once():在/ home/www/sfs_web/statistics/_public /中打开'Crypt/Random.php'以包含(include_path ='.:/ usr/share/php:/ usr/share/pear')失败第895行的_functions/Server/Net/SSH2.php
警告:include_once(Crypt/Hash.php):无法打开流:899行/home/www/sfs_web/statistics/_public/_functions/Server/Net/SSH2.php中没有此类文件或目录
警告:include_once():在/ home/www/sfs_web/statistics/_public /中打开'Crypt/Hash.php'以包含(include_path ='.:/ usr/share/php:/ usr/share/pear')失败第899行的_functions/Server/Net/SSH2.php
警告:include_once(Crypt/Base.php):无法打开流:第904行/home/www/sfs_web/statistics/_public/_functions/Server/Net/SSH2.php中没有此类文件或目录
警告:include_once():在/ home/www/sfs_web/statistics/_public /中打开'Crypt/Base.php'以包含(include_path ='.:/ usr/share/php:/ usr/share/pear')失败第904行的_functions/Server/Net/SSH2.php
致命错误:在第1226行的/home/www/sfs_web/statistics/_public/_functions/Server/Net/SSH2.php中调用未定义的函数phpseclib_resolve_include_path()
include('Net/SSH2.php');
$ssh = new Net_SSH2('host');
if (!$ssh->login('user', 'pass')) {
echo('Login Failed');
}
$ssh->exec('the cmd line...");
$ssh->disconnect();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PHPSecLib通过PHP中的SFTP连接到SSH2服务器.但我的问题是,服务器需要一个受密码保护的密钥文件,但也需要用户名和密码.似乎只能提供用户名+密码或用户名+密钥文件(可选择密码保护).
如何使用所有这些东西登录?
http://phpseclib.sourceforge.net/
我的代码看起来像
$key = new Crypt_RSA();
$key->setPassword('keypwd');
$key->loadKey(file_get_contents('ssh_file.ppk'));
$sftp = new Net_SFTP('hostname', 22);
if (!$sftp->login('username', $key))
echo 'Failed';
else
echo 'Success';
Run Code Online (Sandbox Code Playgroud)
但是我应该把密码放在哪里?
- 编辑:服务器只需要RSA密钥,但不知何故密钥未正确加载
我必须使用PHP连接到SFTP服务器.我正在使用phpseclib.我在Internet上找到了一些示例,但我无法连接到SFTP.我正在使用自定义端口(2222)连接到SFTP.请告诉我在哪里可以定义自定义端口以连接到SFTP.
<?php
include('Net/SFTP.php');
$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
exit('Login Failed');
}
?>
Run Code Online (Sandbox Code Playgroud)
它显示"登录失败".
我试图从SFTP服务器下载文件.我已设法连接到它并下载文件.问题是服务器中的文件将每天更新,文件名的一部分是生成它的确切时间,这是不可预测的.
我如何实现我的PHP脚本,以便下载任何名称以某种模式开头的XML文件,但我不知道确切的全名?