Я создал PHP-скрипт для резервного копирования веб-проектов. Он состоит из создания архива .tar.gz и отправки его на персональный FTP-сервер (с помощью vsftpd).
На многих веб-серверах он работает нормально, но на одном конкретном веб-сервере скрипт работает неправильно.
Вот часть 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 (): не удалось установить соединение.
Вы явно используете FTP активный Режим. Я даже удивлен, что у вас работает на большинстве серверов. Не используйте активный режим, используйте пассивный Режим.
ftp_pasv($connessione, true);
Для работы в активном режиме ваш веб-сервер должен иметь брандмауэр и NAT, настроенные для разрешения входящих подключений к данным FTP. Подробнее см. мой статья о активные и пассивные режимы FTP-соединения.
Других решений пока нет …