我想将文件从用户的机器上传到我的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.";
}
您需要指定要上载到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
。ftp_pasv
。使用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);