在Wordpress中使用PHP进行文件上传

问题描述 投票:0回答:3

我正在尝试从 WordPress 页面的前端上传文件以发送到 wp-content 中的后端 WordPress 目录。我不明白为什么文件没有出现在后端文件夹“uploads”中,这就是 $target_dir 设置的内容。这是我在一页上的 HTML 表单。

<form action="http://www.aeroex.co.uk/php-upload/" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>

上述表单的表单操作页面 www.aeroex.co.uk/php-upload/ 包含以下 PHP 代码:

<?php
$target_dir = "http://www.aeroex.co.uk/home3/dy/public_html/wp-content/uploads";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
} else {
    echo "File is not an image.";
    $uploadOk = 0;
}
}
?>
php html wordpress forms file-upload
3个回答
14
投票

推荐的方法是使用 wp_handle_upload() 函数。如果您想将文件添加到媒体库,可以将其与 wp_insert_attachment() 一起使用。

第一个函数 wp_handle_upload() 的作用是:

在 WordPress 中处理 PHP 上传、清理文件名、检查 mime 类型的扩展名,以及 将文件移动到适当的位置 上传目录中的目录.

来自 WordPress 网站的示例,进行了一些更改

if ( ! function_exists( 'wp_handle_upload' ) ) {
    require_once ABSPATH . 'wp-admin/includes/file.php';
}

$uploadedfile = $_FILES['file'];

/* You can use wp_check_filetype() function to check the
 file type and go on wit the upload or stop it.*/

$movefile = wp_handle_upload( $uploadedfile);

if ( $movefile && !isset( $movefile['error'] ) ) {
    echo "File is valid, and was successfully uploaded.\n";
    var_dump( $movefile);
} else {
    /**
     * Error generated by _wp_handle_upload()
     * @see _wp_handle_upload() in wp-admin/includes/file.php
     */
    echo $movefile['error'];
}

或者,您可以使用 wp_upload_dir() 仅获取上传目录。

有关使用 WordPress 原生功能进行上传的更多信息,请查看这篇文章: 如何使用 WordPress 的秘密本机功能上传文件


4
投票

如果您想将文件上传到库并将其附加到帖子中,您可以使用 Wordpress 函数 media_handle_upload()

$attachment_id = media_handle_upload( 'your_file_field_name', $post_id);

参见示例


3
投票

pathinfo() 需要的是路径而不是 URL。

$target_dir 应该是一个路径,例如:/home3/dy/public_html/wp-content/uploads。如果您不确定,请检查 $_SERVER['DOCUMENT_ROOT']。

$target_file = $target_dir . '/' . basename($_FILES["fileToUpload"]["name"]);

然后,您就有了要将文件上传到的路径。 现在你需要运行:

move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
© www.soinside.com 2019 - 2024. All rights reserved.