无法通过WordPress 4.0中的前端上传特定的.zip文件类型

时间:2014-09-07 作者:gurung

我允许从前端上载选定的几种类型的文件,例如。拉链mp4。jpeg和。pdf。到目前为止,所有这些文件类型在附加到上传到的帖子时都没有问题。然而,升级到WordPress 4.0后,我无法上传具体内容。zip文件类型,尽管它可以使用媒体上载界面从后端很好地上载。请注意,其他文件类型.mp4 and .pdf files still attach with no issues.

下面给出了执行附件功能的完整代码。

if ( isset( $_POST[\'upload_attachments\'] ) && $_SERVER[\'REQUEST_METHOD\'] === \'POST\' && wp_verify_nonce($_POST[\'secure_upload\'], \'upload_attachments_nonce\')) {

    //checking if upload is empty
    //checking if universal filesize is valid

    if ($_FILES) { //loop through multiple files.         
        $files = $_FILES[\'upload\'];
        foreach ($files[\'name\'] as $key => $value) {
            if ($files[\'name\'][$key]) {
                $file = array(
                    \'name\'     => $files[\'name\'][$key],
                    \'type\'     => $files[\'type\'][$key],
                    \'tmp_name\' => $files[\'tmp_name\'][$key],
                    \'error\'    => $files[\'error\'][$key],
                    \'size\'     => $files[\'size\'][$key]
                );

                $uploaded_file_type = $files[\'type\'][$key];
                $allowed_file_types = array(\'image/jpg\', \'image/jpeg\', \'image/png\', \'application/pdf\', \'application/zip\', \'video/mp4\');
                $uploaded_file_size = $files[\'size\'][$key];
                $size_in_kb = $uploaded_file_size / 1024;
                $file_size_limit = 10000; // Your Filesize in KB


                if(in_array($uploaded_file_type,  $allowed_file_types)) { 
                   if( $size_in_kb > $file_size_limit ) {
                   $upload_error .= \'Image files must be smaller than \'.$file_size_limit.\'KB\';
                   return;
                   } else {
                   $_FILES = array("upload" => $file);
                   foreach ($_FILES as $file => $array) {
                   $newupload = insert_attachment($file,$post_id);
                   //return; this loop neds to run multiple times so no return here
                 }      
                 }
                 } else { $upload_error .= \'Invalid File type\';
                         return;
                        }                                                              

                }
            }
        }                  

    header (\'Location: \' . $_SERVER[\'REQUEST_URI\']);//Post, redirect and get
    exit();
    }//end of nonce check 
<小时>Helper function insert_attachment 作者:goldenapples

function insert_attachment($file_handler,$post_id,$setthumb=\'false\') {

    // check to make sure its a successful upload
    if ($_FILES[$file_handler][\'error\'] !== UPLOAD_ERR_OK) __return_false();

    require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
    require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
    require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');

    $attach_id = media_handle_upload( $file_handler, $post_id );

    //if ($setthumb) update_post_meta($post_id,\'_thumbnail_id\',$attach_id);
    return $attach_id;
}
<小时>

Form Html

<form method="post" id="frontend-attachment-upload-form" action="" enctype="multipart/form-data" >
<input type="file" multiple="true" name="upload[]">   

<?php wp_nonce_field(\'upload_attachments_nonce\',\'secure_upload\'); ?>
<input type="submit" id="upload_attachments_button" name="upload_attachments" value="UPLOAD">
<form>

。zip文件根本并没有上传,否则我会在媒体库中找到它们,即使并没有附加。当我尝试上载时。在前端的zip文件中,它只返回错误“无效文件类型”。正如您所看到的,这一行清楚地定义了所有文件类型:

$allowed_file_types = array(\'image/jpg\', \'image/jpeg\', \'image/png\', \'application/pdf\', \'application/zip\', \'video/mp4\');

那么,为什么会出现。mp4。pdf。jpeg所有其他文件类型都可以很好地附加。zip没有?从逻辑上讲,如果循环中出现错误,则根本不会上载任何文件类型。事实也是如此。直到几天前,zip文件还可以正常上传。我对正在发生的事一无所知。请给我一点帮助。

以防万一,我检查了允许的文件类型和it列表。允许的zip文件类型。那么,wordpress是否可能在image.phpfile.phpmedia.php 这会阻止在前端上载特定类型的文件吗?

<?php $allowed_mimes = get_allowed_mime_types();
        echo \'<pre>\';
        print_r($allowed_mimes);
        echo \'</pre>\';
        ?>
<小时>

UPDATE : This issue has been solved, kindly take a look at the accepted answer.

2 个回复
最合适的回答,由SO网友:gurung 整理而成

*我想我会将此作为更新来写,但我认为最好提供解决方案作为答案,因为有人可能会跳过问题更新中的解决方案。

我的代码或循环中没有错误。这也不是服务器配置错误。作为调试的一部分,我回显了上载的文件类型,我意识到当我上载时。返回的zip文件application/x-zip-compressed 而不是我想的那样application/zip. 所以代码中的一个小改动就起到了作用。

$allowed_file_types = array(\'application/x-zip-compressed\', \'other file types......\');
上面的作品现在很好,也要注意了。rar文件必须application/x-rar-compressed. 我希望在relevant codex page. 我仍然确信这是wordpress 4.0附带的东西。感谢@ialocin和@aifrim以及其他人的帮助。

SO网友:aifrim

您需要更新WordPress设置中允许的mime类型。

对于zip/rar文件:

function my_modify_mimes( $mimes ) {

    $mimes[\'zip\'] = \'application/zip\';
    $mimes[\'rar\'] = \'application/x-rar-compressed\';

    return $mimes;
}

add_filter( \'upload_mimes\', \'my_modify_mimes\' );
此外,如果您是从前端上载,则应按角色/功能筛选谁有权访问某些mime类型。

Rar/ZIP也用此mime类型标识:application/octet-stream 如果发生错误。

结束

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。