Can';从本地主机使用PHP FTP\u connect连接到FTP

Can';从本地主机使用PHP FTP\u connect连接到FTP,php,apache,ftp,centos,Php,Apache,Ftp,Centos,我一直在尝试制作一些脚本,通过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

我一直在尝试制作一些脚本,通过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();
}

首先确保这不是本地防火墙或其他问题。尝试从任何其他工具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);

尝试“127.0.0.1”而不是“localhost”

ftp_connect('127.0.0.1', 21);

好吧,我也遇到了同样的问题,我找到了解决我的问题的办法。把它贴在这里帮助别人

我的PHP脚本将失败,但我可以通过命令行轻松地使用FTP。我验证了我的防火墙没有阻止脚本,我的日志中没有收到任何PHP错误

在四处搜索之后,我的问题似乎是
SELinux
。我不想关闭它,所以我检查了
httpd\u can\u network\u connect
的状态

通过运行以下命令检查您的状态:

getsebool httpd_can_network_connect 
setsebool httpd_can_network_connect=1
如果您得到:

httpd_can_network_connect --> off
这可能是你的问题

注意:

如果您已将此
打开

httpd_can_network_connect --> on

那么这并不能解决你的问题。。。祝你好运找到你的解决方案

修复程序

通过运行以下命令来启用
httpd\u can\u network\u connect

getsebool httpd_can_network_connect 
setsebool httpd_can_network_connect=1
再次测试脚本,看看它是否有效。这对我很有效,所以我确保设置一个策略来保持启用状态

setsebool -P httpd_can_network_connect=1

注意:
-p
设置策略,使其在重新启动时保持不变

我使用wget测试了下载文件并将其下载。我查看了您的错误日志,因此ftp\u connect在您的情况下返回FALSE。尝试将代码中的服务器主机/ip替换为ftp.mozilla.org或任何其他公共ftp服务器,然后查看它是否打开。那么,您是否在服务器IP前面使用“ftp://”?不记得是否需要,请尝试使用和不使用前缀。有趣。尝试从命令行运行脚本,而不是从浏览器调用脚本。如果这次有效,请阅读此讨论以解决您的问题:谢谢。几个小时的工作没有进展,又是该死的塞利努克斯!似乎连接创建失败,所有PHP ftp扩展函数都将resource类型的参数作为第一个参数,该参数随ftp_connect函数一起返回,但是“期望参数1为资源”错误表示资源为“false”。