从PHP连接到安全的FTP服务器

前端之家收集整理的这篇文章主要介绍了从PHP连接到安全的FTP服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题是符合 this question的,我试图连接到安全的FTP服务器,它是不能连接,wierd部分是我可以做ssh和连接到服务器,但是当我尝试从PHP代码使用几种不同的方法,但它不工作

处理办法:

> FTP Wrappers
> ftp_connect& ftp_login
> ftp_ssl_connect
> ssh2_sftp
> ssh2-scp-send& ssh2-scp-receive – 还没有尝试这种方法,但建议在评论部分,所以将在此工作,并将在以后发布更新.

方法1代码

$ftp_server = "ftp://username:password@192.168.1.1:21/{$log_file_name}";
$opts = array('ftp' => array('overwrite' => TRUE));
$context = stream_context_create($opts);
$put_file = file_put_contents($ftp_server,$response,LOCK_EX,$context);

这里也无法连接到安全的FTP服务器,任何建议,为什么它不能连接?

方法2代码

ftp_server = 'www.server.com';
$conn_id = ftp_connect($ftp_server) or die ("Cannot connect to host");
//Program dies out here and give error message "Cannot connect to host",//but why ftp_login does not work here,Any Suggestions ?
$ftp_user_name = "login";
$ftp_user_pass = "password";
// login with username and password
$login_result = ftp_login($conn_id,$ftp_user_name,$ftp_user_pass);
// check connection and login result
if ((!$conn_id) || (!$login_result)) 
{ echo "FTP connection has encountered an error!";
  echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
 //exit;
} else 
{ 
 echo "Connected to $ftp_server,for user $ftp_user_name".".....";
}

方法3代码

这里使用与方法1相同的代码,而不是ftp_connect,我使用ftp_ssl_connect

方法4:

$connection = ssh2_connect('www.server.com',22);
ssh2_auth_password($connection,'login','password');
$sftp = ssh2_sftp($connection);
//exit();
$stream = fopen("ssh2.sftp://$sftp/path/to/file",'r');

任何人都可以建议为什么我无法使用上述方法连接到安全的FTP服务器,但仍然可以使用ssh?

有没有其他方法连接到安全FTP服务器使用PHP

更新:

Q1.我再次尝试使用ftp_connect,但它刚刚死了,为什么它会消失,ftp_connect死亡的情况是什么?

Q2.我们只有这种方法才能连接到服务器,还有其他可以实现的方法吗?

Q3.这个PHP语言是否涉及到不支持安全的FTP连接?或者有其他方式使用PHP,如果是,提供不同的方法,因为这将是非常有益的.

更新1:

我正在尝试google更多的问题,似乎如果ftp_connect不工作,防火墙可能是其原因之一.我不完全确定是否这样,但是我正在研究更多信息,并在这里发布更新,如果我发现有用的话.

可能的解决方案:

问题

如果我删除“或死”,那么你会得到错误

从网页运行时:
“警告:ftp_login()期望参数1为资源,布尔值在第28行中的/var/www/ftp_test.PHP中给出”

后续代码var_dump($conn_id);返回bool(false).

从命令行/usr/bin/PHP /var/www/ftp_test.PHP

后续代码var_dump($conn_id);返回类型为(FTP缓冲区)的资源(4).

脚本完成.

解决方案1

这可能是一个解决方案:

尝试关闭selinux,这里是waySearch : How to disable selinux暂时或永久关闭它.

解决方案2

如果您不想完全关闭selinux,只需使用setsebool命令设置httpd_can_network_connect即可获得所需的内容.

验证它以前设置为“关闭”:
getsebool httpd_can_network_connect

将其设置为“开”:
setsebool httpd_can_network_connect = 1

转回selinux:
setenforce 1

检查确保PHP ftp_connect在httpd下运行时仍然工作.

将策略(-P)设置为“on”,以使其持续重新启动:
setsebool -P httpd_can_network_connect = 1

解决方案3

公司防火墙也可能出现问题.确保它已正确配置,并且访问权限设置正确.

解决方案4

另一种方法是使用cURL : libcurl,因为它可以用于连接和通信到具有许多不同类型的协议的许多不同类型的服务器

解决方案5

有一个名为PHP Secure Communication Library (phpspeclib)的开源项目,也可以用来建立与FTP服务器的安全连接.

注释:

我已经尝试过google / bing,但没有任何成果,所以如果SO读者可以帮助,肯定会感激:-)

真的很期待答案.

猜你在找的PHP相关文章