我正在尝试通过ftp_put将文件上传到Windows服务器。
我的代码如下:
$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);
如果我使用filezilla手动上传文件,它可以很好地工作。如果我使用上面的代码,它会创建一个空文件。
尝试在启用被动模式的情况下传输文件:
尝试使用FTP_BINARY而不是像这样的FTP_ASCII。
$upload = ftp_put($conn_id, $file_name, $file_location, FTP_BINARY);
PHP ftp可能有问题,但我发现它几乎可以在二进制传输模式下工作。
事实证明,UKFast阻止了连接和转移。 (它们还要求它仅为活动模式)。
现在他们已经解锁了它,它运作得很好。 (在它出现之前)
打开被动模式
ftp_pasv($conn_id, true);
感谢“Khan Muhammad”的回答,当我添加这个部分时:
ftp_pasv($ conn_id,true);
该文件已完美上传。