【问题标题】:Using PHP for file-upload in Wordpress在 Wordpress 中使用 PHP 进行文件上传
【发布时间】:2016-06-03 05:31:12
【问题描述】:

我正在尝试从 wordpress 页面的前端上传文件以发送到 wp-content 中的后端 wordpress 目录。我无法弄清楚为什么文件没有出现在 $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


    【解决方案1】:

    推荐的方法是使用 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 功能进行上传的更多信息,请查看这篇文章: How to Upload a File With WordPress’ Secret Native Functions

    【讨论】:

    • 只有当我按照推荐的 here 将行更改为 $movefile = wp_handle_upload( $uploadedfile, array( 'test_form' =&gt; false )); 时才对我有用
    • 另外我不认为我将如何在 $_FILES 上运行 wp_check_filetype()。我发现工作的另一种选择是if (in_array(finfo_file(finfo_open(FILEINFO_MIME_TYPE), $uploadedfile['tmp_name']), array('image/jpeg', 'image/png','image/gif'))){ /*do the rest*/ }
    【解决方案2】:

    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);
    

    【讨论】:

    • 我在哪里运行那行代码?我把它放在 $target_file 之后吗?
    • move_uploaded_file() 是你在 $uploadOk == 1 时运行的东西。但在此之前,请确保你知道 $target_dir 实际上是什么。如果我理解正确,这应该是它的路径: $target_dir = $_SERVER['DOCUMENT_ROOT'] 。 '/wp-content/uploads';
    • 虽然这工作正常并且正在将我的文件上传到目录,但我不断收到以下消息:警告:getimagesize(/tmp/phpD8fHDn):无法打开流:/中没有这样的文件或目录第 26 行的 home3/ddy/public_html/wp-content/themes/vantage/templates/template-upload.php 文件不是图像。
    • 如果您已使用 move_uploaded_file(),则该文件将不再位于此位置:$_FILES["fileToUpload"]["tmp_name"]。您想在移动它之前使用 getimagesize() 。最后,我建议也考虑 Kalimah 的回答。它可能并不总是适用,但它是推荐的 Wordpress 处理上传的方式。
    • 通过更改 $check = getimagesize($target_file); 进行排序.该消息不再出现,因此一切正常。
    【解决方案3】:

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

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

    See example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2016-12-11
      • 2023-03-18
      • 2019-01-25
      • 1970-01-01
      相关资源
      最近更新 更多