ftp\u连接PHP问题

ftp\u连接PHP问题,php,ftp,Php,Ftp,我有一个PHP脚本,它连接到外部FTP服务器,并将4个txt文件传输到本地服务器。一个文件比其他文件大,但通常最多只有几百KB。当它运行时,它有时会失败,有时会传输部分文件,有时传输一个但不传输其他文件。它永远无法成功地转移所有信息 权限已经过检查,手动测试FTP帐户表明它很好,连接和传输平稳、快速。我尝试过切换到ASCII,但没有成功 我使用此脚本连接的帐户不是SFTP,但是我传输到的本地服务器仅是SFTP(1&1)。我不确定这是否相关,也无法解释间歇性的本质。谢谢 <?php ini

我有一个PHP脚本,它连接到外部FTP服务器,并将4个txt文件传输到本地服务器。一个文件比其他文件大,但通常最多只有几百KB。当它运行时,它有时会失败,有时会传输部分文件,有时传输一个但不传输其他文件。它永远无法成功地转移所有信息

权限已经过检查,手动测试FTP帐户表明它很好,连接和传输平稳、快速。我尝试过切换到ASCII,但没有成功

我使用此脚本连接的帐户不是SFTP,但是我传输到的本地服务器仅是SFTP(1&1)。我不确定这是否相关,也无法解释间歇性的本质。谢谢

<?php

ini_set('display_errors', 1);

$ftp_server = "*";
$ftp_user_name = "*";
$ftp_user_pass = "*";

// define some variables
$local_file[0] = 'updates/vebraproperties.txt';
$local_file[1] = 'updates/files.txt';
$local_file[2] = 'updates/rooms.txt';
$local_file[3] = 'updates/vebraclients.txt';

$server_file[0] = 'vebraproperties.txt';
$server_file[1] = 'files.txt';
$server_file[2] = 'rooms.txt';
$server_file[3] = 'vebraclients.txt';

// set up basic connection
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
echo $login_result . '<br/>'; 
for($i = 0; $i <= 3; $i++) {

    // try to download $server_file and save to $local_file
    if (ftp_get($conn_id, $local_file[$i], $server_file[$i], FTP_BINARY)) {
        echo "Successfully written to " . $local_file[$i] . "\n<br/>";
    } else {
        echo "There was a problem \n";
    }
}

// close the connection
ftp_close($conn_id);

?>

您可以尝试使用

您可以在登录后设置:

...
// Login
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Set passive mode
ftp_pasv($conn_id, true); 
...

FTP很烂。非常糟糕。您应该非常努力地找到一种方法来移动您的文件而不依赖它

但是,我要传输到的本地服务器仅为SFTP(1和1)

嗯??那没有任何意义。SFTP与FTP完全不同。ftp_uu功能不适用于“仅限SFTP”服务器。如果它确实是一个SFTP服务器,那么使用ssh2_SFTP_命令

如果在不更改代码的情况下,它有时工作,有时不工作,那么原因不是代码(这确实使问题偏离主题),而是其他地方(网络、服务器)

话虽如此,您确实有责任使代码变得合理健壮,例如

$login_result=false;
for ($x=0; $x<4 && !$login_result; $x++) {
   usleep($x*300);
   $conn_id = is_resource($conn_id) ? $conn_id : ftp_connect($ftp_server);
   $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
}
$login\u result=false;

对于($x=0;$x)有任何错误吗?请尝试添加
error\u reporting(E\u ALL);
。没有,打开报告时没有错误。您尝试过使用被动模式吗?登录后,您可以添加以下内容:
ftp\u pasv($conn\u id,true);
谢谢!是的,修复了它。