2012-09-17 83 views
6

我一直在尝试使一些脚本通过FTP从CentOS的本地主机Apache下载文件,我无法让它工作!无法连接到FTP与本地主机的PHP ftp_connect

我使用的代码是非常一按任何基本的FTP请求中使用:

<?php 
$ip= FTP_IP_HERE; 
$port='21'; 
$timeout='90'; 
$un='username'; 
$pw='password'; 

// Connect to ftp 
$conn_id = ftp_connect($ip,$port,$timeout); 

// Open a session to an external ftp site 
$login_result = ftp_login ($conn_id, $un, $pw); 

// Check open 
if ((!$conn_id) || (!$login_result)) { 
    print "FTP connection failed!"; 
    exit(); 
} 

// turn on passive mode transfers 
if (ftp_pasv($conn_id, true) == FALSE) { 
    print "Passive FTP connection failed!"; 
    exit(); 
} 

我试图在远程服务器上相同的脚本和它的工作! 我不确定它是否是要完成的任何apache配置,或者本身是PHP限制。

UPDATE

以下是错误日志:

Warning: ftp_login() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 16 

Warning: ftp_get() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 22 
Falha ao enviar o arquivo test.pdf<br />Array 
(
    [type] => 2 
    [message] => ftp_get() expects parameter 1 to be resource, boolean given 
    [file] => /var/www/html/ftp/FTP.php 
    [line] => 22 
) 

Warning: ftp_close() expects parameter 1 to be resource, boolean given in /var/www/html/ftp/FTP.php on line 30 

回答

4

首先要确保它不是你的本地防火墙什么的问题。尝试使用任何其他工具的FTP,例如

wget --user=username --password='password' ftp://FTP_IP_HERE/file_to_download 

如果wget无法连接,那么这是您网络设置的问题。

如果wget的通过了测试,你还可以通过在你的代码的顶部放置此尝试启用详细的错误报告,看看有什么错你的PHP学尝试:

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

最后,这可能是也有关你的情况:Cannot connect with FTP server with PHP , ftp_connect()

+0

我测试下载使用wget的文件并下载 –

+0

我看到你的错误日志,所以FTP_CONNECT返回你的情况FALSE。 – Yuriy

+0

尝试用ftp.mozilla.org或任何其他公共ftp服务器替换您的服务器主机/ ip代码,并查看它是否打开。那你在服务器IP前面使用'ftp://'吗?不记得是否需要,可以尝试使用和不使用前缀。 – Yuriy

1

尝试,而不是“本地主机”“127.0.0.1”

ftp_connect('127.0.0.1', 21); 
9

好吧,我有同样的问题,我发现我的情况的解决方案。在此发布以帮助他人。

我的PHP脚本会失败,但我可以通过命令行轻松FTP。我验证了我的防火墙没有阻止脚本,并且我没有在我的日志中发现任何PHP错误...

经过搜索后,它出现我的问题是SELinux。我不想关闭它,所以我检查了httpd_can_network_connect的状态。

运行检查状态:

getsebool httpd_can_network_connect 

如果你得到:

httpd_can_network_connect --> off 

这可能是你的问题。

注:

如果你已经有这个on

httpd_can_network_connect --> on 

SELinux is disabled 

那么这是不会解决您的问题...祝你好运找到你解。

的修复

通过运行启用httpd_can_network_connect

setsebool httpd_can_network_connect=1 

再次测试脚本,看看它是否工作。这对我有用,所以我确保设置一个策略来保持启用。

setsebool -P httpd_can_network_connect=1 

注:-P制定政策,因此持续超过重新启动

+1

这个。谢谢杰里米,这很好地解决了我的问题。 – Scorchio

+1

谢谢。几个小时的工作得不到任何地方,它再次是该死的selinux! – user1017063

+1

甜蜜的jebus!这固定我的问题,以及我不觉得厚... – Sam