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

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

我想将文件从用户的机器上传到我的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.";
  }
php ftp upload
2个回答
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

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);
© www.soinside.com 2019 - 2024. All rights reserved.