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

新手上路,请多包涵

我正在尝试从 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;
}
}
?>

原文由 p.luck 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 912
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);

原文由 Tim Hysniu 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐的方法是使用 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 的秘密本机功能上传文件

原文由 Kalimah 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题