无法使用来自localhost的PHP ftp_connect连接到FTP

时间:2012-09-17 15:54:39

标签: php apache ftp centos

我一直在尝试制作一些脚本,通过FTP从我在CentOS的localhost Apache下载文件,我无法让它工作!

我使用的代码是任何基本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限制。

更新

以下是错误日志:

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

3 个答案:

答案 0 :(得分: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 :(得分: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()

答案 2 :(得分:1)

尝试&#39; 127.0.0.1&#39;而不是&#39; localhost&#39;

ftp_connect('127.0.0.1', 21);