ftp_put uploads an empty file

2019-05-07 20:28发布

I'm trying to upload a file via ftp_put to a windows server.

my code is as follows:

    $date           = date('ymd');
    $file_name      = $date.'.csv';
    $file_location  = 'D:/inetpub/wwwroot/website.com/html/assets/'.$file_name;

//set up basic connection
$conn_id = ftp_connect(FTP_HOST, FTP_PORT);

// login with username and password
$login_result = ftp_login($conn_id, FTP_USER, FTP_PASS);

// check connection
if ((!$conn_id) || (!$login_result)) { 
    echo "FTP connection has failed!"; 
    exit;
}  else { 
    echo "Connected to FTP Server";
}

$upload = ftp_put($conn_id, $file_name, $file_location, FTP_ASCII);

// check upload status
if (!$upload) { 
    echo "FTP upload has failed!"; 
} else { 
    echo "File Uploaded";
}

// close the FTP stream 
ftp_close($conn_id); 

If I upload the file manually using filezilla, it works perfectly. If I use the code above, it creates an empty file.

标签: php ftp
5条回答
【Aperson】
2楼-- · 2019-05-07 20:38

thanks "Khan Muhammad" for your answer, when I added this part :

ftp_pasv($conn_id, true);

the file was uploaded perfectly.

查看更多
\"骚年 ilove
3楼-- · 2019-05-07 20:47

It turns out that UKFast was blocking the connection and transfer. (They also require it to be Active Mode only).

Now they've unblocked it, it's working perfectly. (Before it seemed to just time out)

查看更多
孤傲高冷的网名
4楼-- · 2019-05-07 20:55

turn passive mode on

  ftp_pasv($conn_id, true);
查看更多
贼婆χ
5楼-- · 2019-05-07 20:58

try using FTP_BINARY instead of FTP_ASCII like this.

$upload = ftp_put($conn_id, $file_name, $file_location, FTP_BINARY);

PHP ftp can be buggy but I have found that it pretty much works in binary transfer mode.

查看更多
趁早两清
6楼-- · 2019-05-07 21:01

Try transferring the file with passive mode enabled:

Passive Mode

查看更多
登录 后发表回答