从表单上传 PHP ftp 文件


PHP ftp file upload from form

$host = 'XXXXXXXXXXX'
$usr = 'XXXXXXXXXXX';
$pwd = 'XXXXXXXXXXX';
$destDir = $_POST['filetype'];
$conn_id=ftp_connect($host);
$success = ftp_login($conn_id,$usr,$pwd);
$rightName = basename($_FILES['uploadfile']['name']);
ftp_pasv($conn_id, true);
if($success)
{ 
    ftp_put($conn_id,$destDir.'/'.$rightName,$_FILES['uploadfile']['tmp_name'],FTP_BINARY) or die('Cannot ftp');
    ftp_close($conn_id);
    echo ' Upload Successful';
} 

表格在这里

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input name="filetype" id="filetype1" /><br />
    <input name="uploadfile" type="file" /><br />
<input type="submit" value="Upload File" />

我尝试了多种选择。"ftp_put"从 PHP 的 tmp 上传位置到工作目录,然后到目标目录,直接从 PHP 的临时上传目录"ftp_put"到所需的目录,但由于某种原因 FTP 似乎根本不起作用。它只是简单地死了。使用"move_uploaded_files(("的正常上传效果很好。在一些论坛中提到,要使ftp工作,我不能使用"文件"输入类型,而只能使用纯文本框。我不明白为什么需要这样,甚至不是真的。为什么上面的代码不起作用?我已经检查了目标文件夹的权限,这应该不是问题。

更新

抱歉,问题是由于文档问题造成的。文档中提到的FTP根不正确,代码中使用的FTP根与记录的FTP根不同,因此存在麻烦。

在 PHP ia 中移动文件是一件棘手的事情,因为有几个东西一起玩。

  1. 目标目录必须可由服务器进程写入。
  2. PHP 具有安全功能。其中之一称为safe_mode。安全模式检查(除其他事项外(文件的 UID 和 GID(用户 ID 和组 ID(,并限制例如允许包含的文件。以及避免在脚本 UID/GID 不拥有的目录中创建它们。通常,您上传的用户不是运行网络服务器的用户。因此,例如,当您创建一个目录时,它是使用 Web 服务器 UID/GID 创建的,并且无法从具有不同 UID/GID 的 PHP 脚本中创建文件。