PHP将文件从浏览器上传到FTP

时间:2018-10-13 16:12:39

标签: php ftp upload

我想将文件从用户的计算机上载到FTP中的文件夹uploads,但它不起作用。你能帮我吗?

$ftp_server = "some ip";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, "some name", "some password");

$target_dir = "uploads/";
$target_file = basename($_FILES["filename"]["name"]);

if (ftp_fput($ftp_conn, $target_dir.$target_file, FTP_ASCII))
  {
  echo "Successfully uploaded $target_file.";
  }
else
  {
  echo "Error uploading $target_file.";
  }

2 个答案:

答案 0 :(得分:1)

您需要指定要上传到FTP服务器的本地文件(从Web服务器开始)。

您可以使用$_FILES["filename"]["tmp_name"]检索包含通过HTTP POST从用户的计算机上传到Web服务器的文件的临时文件的名称。阅读PHP中的POST method uploads

然后您可以将其传递给ftp_put(不需要ftp_fput):

ftp_put($ftp_conn, $target_dir.$target_file, $_FILES["filename"]["tmp_name"], FTP_IMAGE)

代码中的其他两个问题(不是您遇到的直接问题,但是您将在解决后立即面对它们):

  • 如果要上载二进制文件(例如FTP_ASCII),则绝对不要使用.mp3。使用FTP_IMAGE

  • need to use ftp_pasv

答案 1 :(得分:0)

使用php-ftp-client库:

$ftp = new \FtpClient\FtpClient();
$ftp->connect($host, true, 990);
$ftp->login($login, $password);
// upload with the BINARY mode
$ftp->putAll($source_directory, $target_directory);

// Is equal to
$ftp->putAll($source_directory, $target_directory, FTP_BINARY);

// or upload with the ASCII mode
$ftp->putAll($source_directory, $target_directory, FTP_ASCII);