【问题标题】:Why would my WP plugin work for one person and not another on the same system?为什么我的 WP 插件只能在同一系统上为一个人工作而不是另一个人工作?
【发布时间】:2017-07-11 13:44:52
【问题描述】:

我和表弟为 CoursePress 构建了一个 WordPress 插件,该插件将接收电子邮件地址列表,并将它们作为用户/学生添加到课程中。

我们已经多次使用这个插件,但没有失败,但我们的一位客户告诉我们该插件不适用于他们。我已共享屏幕并验证他们是否正确使用了该插件。

插件采用“电子邮件、名字、姓氏、公司名称”格式的 .csv 文件,根据该数据添加用户,将这些用户作为学生添加到所选课程,并提示您下载一个新的 .csv 文件将包含来自已创建用户的用户名和密码。

可以看代码HERE

我最初的想法是 Windows 和 Mac/Linux 以不同的行结尾保存 .csv 文件,所以这可能是问题所在,但我向此人发送了我通过 MacBook 保存的文件并指示不要打开该文件,但是只是尝试在插件中使用它,看看它是否有效。还是什么都没有。

我在 uploads.php 文件中进行了一些编辑以尝试缩小问题范围,但我没有取得任何进展。

在下面的编辑中,我试图查看“uploaded_file”帖子变量是否为空,如果是,告诉我它是。我的客户当前遇到的错误是“文件验证期间出现错误!”。我很确定他的错误应该是从下面读取 $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;
        }

【问题讨论】:

  • 可能是其他一些插件,或者 WP 设置干扰了您自己的插件?
  • 这是我的第一个想法,但我可以以管理员用户身份登录,运行插件,一切都会正常工作。我的客户可以在同一用户下登录到同一系统,但没有结果。我能看到的唯一区别是他使用的操作系统与我不同,但如果是这种情况,该插件将不适用于其他 Windows 用户,它确实如此。
  • 如果您以他的用户身份登录系统会发生什么?
  • 当我以他的用户身份登录时,插件工作正常。当他在该系统上登录我的用户帐户时,它对他不起作用,但对我仍然有效。
  • $_FILES['userfile']['type'] 文件的 mime 类型,如果浏览器提供了此信息。但是 PHP 端不会检查此 mime 类型,因此不要认为它的值是理所当然的。

标签: php wordpress csv


【解决方案1】:

问题在于您的checkFile() 函数。该函数使用$_FILES['userfile']['type'] 作为验证的一部分。但是,如文档中所述:

$_FILES['userfile']['type'] - 文件的 mime 类型,如果浏览器提供了此信息。但是 PHP 端不会检查此 mime 类型,因此不要认为它的价值是理所当然的。

因此,不同的浏览器可能会发送不同的值或根本不发送值,所以你不能依赖它。

您可能可以在此行的检查中删除它:

if (($ext == "csv") && ($files["type"] == "text/csv") && ($files["size"] < 350000))

并使用:

if (($ext == "csv") && ($files["size"] < 350000))

【讨论】:

  • 这就是问题所在。他和我使用的是同一个浏览器,但是这个编辑让它开始为他工作。非常感谢您的帮助:)!!!
猜你喜欢
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多