Wordpress自定义插件文件上传 - $ _FILE是空的?

时间:2015-08-19 22:24:38

标签: php wordpress file-upload wordpress-plugin

我正在编写一个wordpress插件,应该做一些小事情:

1)用户可以上传文件(理想情况下是csv文件,但现在不相关)。

2)插件打开文件,从中读取数据,用它执行几个操作,然后删除它。

现在,我特别遇到了第1步的问题。虽然我已经有插件使用数据来执行其任务的部分,虽然我知道如何在服务器中打开文件,但我似乎无法在服务器中获取它。具体来说,因为$_FILES似乎是空的。这是我的变量声明空间:

function register_random_plugin_settings() {
    register_setting( 'random-plugin-settings-group', 'random_plugin_data1' );
    register_setting( 'random-plugin-settings-group', 'random_plugin_uploadedfile' );
}

这是我的设置页面功能:

function page_injector_display_settings() {
    do_random_thing();
?>
<div class="wrap">
<h2>Random Parameters</h2>

<form method="post" action="options.php">
    <?php settings_fields( 'random-plugin-settings-group' ); ?>
    <?php do_settings_sections( 'random-plugin-settings-group' ); ?>
    <table class="form-table">
        <tr valign="top">
        <th scope="row">Data 1</th>
        <td><input type="text" name="random_plugin_data1" id="random_plugin_data1" /></td>
        </tr>

        <tr valign="top">
        <th scope="row">CSV File</th>
        <td>
            <input type="file" id="random_plugin_uploadedfile" name="random_plugin_uploadedfile" />
        </td>
        </tr>


    </table>

    <?php submit_button(); ?>

</form>
</div>
<?php }

这是我的处理程序的简化,do_random_thing()

function do_random_thing(){
    if((esc_attr( get_option('random_plugin_data1') ) != '')){

        $data1 = esc_attr( get_option('random_plugin_data1') );

        var_dump($_FILES);

        //Here we have everything the plugin does, unnecessary now.

        echo "<h2>Your will has been done.</h2>";

        update_option( 'random_plugin_data1', '');

    }
}

问题是,正如我之前所说,var_dump($_FILES)是空的。如果它是空的,我不能对我应该上传和阅读的文件做任何事情。我甚至不知道它是否已上传。我试过改变:

<form method="post" action="options.php">

<form enctype="multipart/form-data" method="post" action="options.php">

更好地模仿常规PHP文件上传的工作方式。但是当我这样做时,$_FILES不仅保持为空,而且esc_attr( get_option('random_plugin_data1') )之类的所有变量都会变空。

我注意到$_POST总是空的,但当然这不是问题,因为我可以用get_option得到变量,所以我在这里遗漏了什么?我花了几个小时在网上搜索,但没有回答我可能做错了什么。有人能指出我正确的方向吗?

0 个答案:

没有答案