6

我一直在尝试制作一些脚本来通过 FTP 从我在 CentOS 中的本地 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
4

3 回答 3

11

好的,我遇到了同样的问题,我找到了适合我的案例的解决方案。在这里发布以帮助他人。

我的 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设置策略,使其在重新启动后仍然存在

于 2015-04-24T15:26:34.397 回答
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()

于 2012-09-17T16:04:32.640 回答
2

尝试“127.0.0.1”而不是“localhost”

ftp_connect('127.0.0.1', 21);
于 2012-09-18T21:48:06.270 回答