Drupal:验证文件扩展名?

时间:2010-01-03 22:35:30

标签: php upload drupal-6 user-input validation

我正在尝试验证上传的文件确实具有.csv扩展名。但是,此代码无效:

function upload_validate($form, &$form_state) {
        // code that does work ...
 else {
  $file = file_save_upload('upload');
  $errors = file_validate_extensions($file, 'csv');
  if (! empty($errors)) {
   form_set_error('', $errors[0]);
  }
  else {
   $_SESSION[FILE_KEY] = serialize($file);
  }
 }
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

<wrong>
我认为您的问题出在form_set_error()上。这是实际的功能(带注释):

<?php
function form_set_error($name = NULL, $message = '', $reset = FALSE) {
  static $form = array();
  if ($reset) {
    $form = array();
  }
  // here is where setting $name to '' is a problem
  if (isset($name) && !isset($form[$name])) { 
    $form[$name] = $message;
    if ($message) {
      drupal_set_message($message, 'error');
    }
  }
  return $form;
}
?>

我认为问题是您将空字符串传递给$name,因此form_set_error看到该名称已设置但是不能有一个空字符串的数组键。我会尝试这样调用函数:

form_set_error(, $errors[0]);

</wrong>(当我第一次写这篇文章时,在我添加到代码中的注释后,我没有读到该行isset()的'!'inf前面。我会尝试传递一个字符串这不是$form数组的任何部分,看看会发生什么,但可能会尝试下面的答案)

除此之外,通过查看API Documentation for file_validate_extensions()看起来您编写的代码应该可行。您是否尝试使用类似drupal_set_message()之类的内容来检查if块的哪一部分在您认为应该是的时候开始运行。可能是你的if逻辑有问题。