我的堂兄和我为CoursePress构建了一个WordPress插件,该插件将收集一个电子邮件地址列表,并将其作为用户/学生添加到课程中。
我们已多次使用此插件,但我们的一位客户告诉我们该插件不适用于他们。我有屏幕共享并验证他们正确使用插件。
该插件以“Email,FirstName,LastName,CompanyName”格式接收.csv文件,根据该数据添加用户,将这些用户作为学生添加到所选课程,并提示您下载新的.csv文件将包含来自已创建用户的用户名和密码。
您可以看到代码HERE
我最初的想法是Windows和Mac / Linux保存带有不同行结尾的.csv文件,所以也许这就是问题所在,但我发送了一个文件,我通过MacBook保存并指示不打开文件但是只是尝试在插件中使用它来查看它是否有效。仍然没有。
我在uploads.php文件中进行了一些编辑,试图缩小问题的范围,但我没有取得任何进展。
在下面的编辑中,我试图查看“uploaded_file”post变量是否为空,如果是,则告诉我它是。我的客户端遇到的当前错误是“文件验证期间出错”!我很确定他的错误应该是从下面读取$ ers变量,但是当我提交没有文件的表单时,我无法让它给我错误。
任何人都可以帮助我吗?
<?php
function wp_mail()
{
// Do nothing!
}
error_reporting(0);
require_once('../../../../wp-config.php');
include 'gen-file.php';
//Posted files
$files = $_FILES["uploaded_file"];
if (empty($files)) {
$ers = 'The file was not sent with the form!';
}
$post = $_POST;
//Imported users CsV
$impUsers = array(array( "Username", "Password", "email" ),);
$file = checkFile($files);
if($file){
$ID = getCid($post);
$tmpname = $file['tmp_name'];
//Convert CSV to array
$csv = array_map('str_getcsv', file($tmpname));
//Remove first row in CSV Array
$csv = array_splice($csv, 1);
//Create Users
$Users = createUsers($csv);
//Add users to course
$students = AddAsStudents($Users,$ID);
convert_to_csv($Users);
}else{
echo 'There was an error during file validation! </br>';
echo $ers;
}
答案 0 :(得分:2)
问题在于您的checkFile()
功能。该函数使用$_FILES['userfile']['type']
作为验证的一部分。但是,正如文档中所述:
$ _ FILES ['userfile'] ['type'] - 文件的mime类型,如果浏览器提供了这个信息。但是这个mime类型没有在PHP端检查,因此不要把它的价值视为理所当然。
因此,不同的浏览器可能会发送不同的值或根本没有值,因此您不能依赖它。
你可以从这行检查中删除它:
if (($ext == "csv") && ($files["type"] == "text/csv") && ($files["size"] < 350000))
并使用:
if (($ext == "csv") && ($files["size"] < 350000))