FTP put 上传大小为零的文件

问题描述 投票:0回答:2

我正在尝试将文件从本地计算机驱动器上传到服务器。

我使用以下代码上传文件,但它上传的文件大小为 0 字节或空白文件。

另外,我没有获取本地文件的所有文件路径。它显示服务器路径。例如,如果我的本地文件位于 D:/abc/abc.txt,则显示 /public_html/abc.txt

请帮忙。

<?php
echo "hi";
echo "\n";

$host = '000.000.00.000';
$usr = 'userName';
$pwd = 'password';

$temp =  $_FILES["file"];
$local_file = realpath($_FILES["file"]["name"]["r"]);

$ftp_path = "/public_html/Download/".$_POST['file'];

echo "This is file to Upload :";
echo "\n";

print($local_file);

// connect to FTP server (port 21)
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host");

// send access parameters
ftp_login($conn_id, $usr, $pwd) or die("Cannot login");

// perform file upload
print ("This is ftp path : ");
print($ftp_path);
print("New line : ");

$upload = ftp_put($conn_id,  $ftp_path, $local_file , FTP_ASCII , 0);

print (!$upload) ? 'Cannot upload' : 'Upload complete';
print ("\n") ;

ftp_close($conn_id);
?>
php ftp
2个回答
2
投票

$_FILES['file']['name']
是客户端计算机上的文件名称,而不是服务器上的文件名称。上传到服务器上的
$_FILES['file']['tmp_name']
,所以这是您应该通过FTP发送的文件。

您可以在设置

$_FILES['file']['name']
时使用
$ftp_path
,这样目标文件将与用户的原始文件同名。
$_POST['file']
不存在——文件上传只放在
$_FILES
,而不是
$_POST


0
投票

您需要添加被动模式

ftp_pasv($conn_id, true);
ftp_put($conn_id,  $ftp_path, $local_file , FTP_ASCII , 0);
© www.soinside.com 2019 - 2024. All rights reserved.