Wordpress Custom Plugin - 顶级管理员菜单中的PHP文件上传器 - 找不到页面404

时间:2012-05-02 16:47:19

标签: php wordpress file-upload wordpress-plugin

这是我真正需要完成的第一个自定义Wordpress插件。整晚都在这里,无法弄清楚什么是错的...我假设我缺少一些简单和基本的标准插件编码。

我写了一个插件,允许管理信息中心中的顶级菜单项。它是一个简单的PHP上传表单。我想要做的就是让客户端将CSV文件上传到特定文件夹。我刚刚测试了wordpress框架的PHP代码OUTSIDE,它可以工作......但是当我尝试使用实际的wordpress管理员上传文件时,我按下提交并且它没有上传文件它也发送给我“找不到页面” 404“......最重要的是,当我在我的生产网站上激活插件时,它会导致错误和一些小故障...所以我假设我只是在插件php文件中缺少一些我需要的代码。

这是我的插件主要php文件的完整代码 - 减去处理所有“上传代码”的单独的php文件

<?php
/*
Plugin Name: Points Uploader
*/
?>

<?php
add_action( 'admin_menu', 'sheets_plugin_menu' );

function sheets_plugin_menu() {
add_menu_page( 'Upload Points Sheets', 'Upload Points', 'manage_options', 'upload-   points-sheets', 'sheets_plugin_page', '', 10);
 }

function sheets_plugin_page() {
if ( !current_user_can( 'manage_options' ) )  {
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
}
echo '<div class="wrap">';
echo '<h1>Upload Points Sheets</h1>';
?>

<form action="uploader.php" method="post" enctype="multipart/form-data">
<label for="file">Select a file:</label> <input type="file" name="userfile" id="file">    
<br />
<button>Upload File</button>
</form>

<?php
echo '</div>';
}
?> 

那么我需要添加到这个php页面以使其成为更“标准”的操作插件?当我按下提交按钮时它就像我错过了一个“wordpress发送”代码,而它只是404,我不知道如何让它在Admin屏幕字段中运行。感谢您提供任何帮助,我真的很难过。 ;)

...好吧,以防万一这里需要的是uploader.php文件。只是我在网上找到的示例代码来测试。

<?php
// Configuration - Your Options
$allowed_filetypes = array('.csv'); // These will be the types of file that will pass the validation.
$max_filesize = 524288; // Maximum filesize in BYTES (currently 0.5MB).
$upload_path = './upload/'; // The place the files will be uploaded to (currently a 'files' directory).

$filename = $_FILES['userfile']['name']; // Get the name of the file (including file extension).
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // Get the extension from the filename.

// Check if the filetype is allowed, if not DIE and inform the user.
if(!in_array($ext,$allowed_filetypes))
die('The file you attempted to upload is not allowed.');

// Now check the filesize, if it is too large then DIE and inform the user.
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('The file you attempted to upload is too large.');

// Check if we can upload to the specified path, if not DIE and inform the user.
if(!is_writable($upload_path))
die('You cannot upload to the specified directory, please CHMOD it to 777.');

// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
echo 'Your file upload was successful, view the file <a href="' . $upload_path . $filename . '" title="Your File">here</a>'; // It worked.
else
echo 'There was an error during the file upload.  Please try again.'; // It failed :(.

?>

1 个答案:

答案 0 :(得分:1)

在WordPress中使用自定义上传器相当新,我不知道我会有多少帮助。但我确实知道一件事:它可能是404-ing因为你的表单动作是“uploader.php”。这不会飞(除非你的uploader.php文件位于服务器的根目录中) - WordPress不能很好地使用相对路径。我很确定您需要使用plugin_dir_url() . '/uploader.php'plugin_dir_path() . '/uploader.php'

之类的内容

您还必须记住,在上传文件时,某些服务器对于您是使用服务器路径还是http路径非常挑剔。很多时候,当我上传时,我必须确定我正在使用我将文件放入文件夹的服务器路径(你有一个相对路径=“./upload/”。在某些情况下,它只是像http路径一样。所以这是很多试验和错误(对我来说无论如何)。就此而言。

就像我说的那样,不知道它是否有多大帮助,但也许这只是从相对路径到绝对路径的简单切换?