我正在尝试将文件从本地计算机驱动器上传到服务器。
我使用以下代码上传文件,但它上传的文件大小为 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);
?>
$_FILES['file']['name']
是客户端计算机上的文件名称,而不是服务器上的文件名称。上传到服务器上的$_FILES['file']['tmp_name']
,所以这是您应该通过FTP发送的文件。
您可以在设置
$_FILES['file']['name']
时使用$ftp_path
,这样目标文件将与用户的原始文件同名。 $_POST['file']
不存在——文件上传只放在$_FILES
,而不是$_POST
。
您需要添加被动模式
ftp_pasv($conn_id, true);
ftp_put($conn_id, $ftp_path, $local_file , FTP_ASCII , 0);