我正在编写一个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
得到变量,所以我在这里遗漏了什么?我花了几个小时在网上搜索,但没有回答我可能做错了什么。有人能指出我正确的方向吗?