3

我创建了一个 PHP 脚本来备份 Web 项目。它包括制作一个 .tar.gz 存档,并将其发送到个人 FTP 服务器(使用 vsftpd)。

在许多 Web 服务器上它工作正常,但在一个特定的 Web 服务器上脚本不能正常工作。

这里是FTP连接的部分:

$connessione = ftp_ssl_connect($ftpServer, $ftpPort, 300);
if($connessione == false)
{
    echo("connection failed.\n");
    return false;
}
echo("Connection established.\n");
echo("Authenticating for "  .$username . " ...\n");
$resLogin = ftp_login($connessione, $username, $password);
if(!$resLogin)
{
    echo("authentication failed.\n");
    return false;
}
ftp_pasv($connessione, false);

$workingDir = ftp_pwd($connessione);
echo("entering on " . $workingDir . "\n");
echo("Uploading file ... \n");
$fullFilePath = __DIR__ . "/" . $filePath;
$result = ftp_put($connessione, $ftpPath . $file, $fullFilePath, FTP_BINARY);
if($result)
    echo("Upload completed.\n");
else
    echo("Some error occurred.\n");
ftp_close($connessione);

调用返回的错误ftp_put是:

PHP 警告:ftp_put():建立连接失败。

4

1 回答 1

3

您正在明确使用 FTP活动模式。我什至很惊讶它在大多数服务器上都适用于您。不要使用主动模式,使用被动模式。

ftp_pasv($connessione, true);

要使主动模式工作,您的网络服务器必须配置防火墙和 NAT 以允许传入的 FTP 数据连接。有关详细信息,请参阅关于主动和被动 FTP 连接模式的文章。

于 2018-01-03T10:17:15.910 回答