【问题标题】:PHP - make $_FILES filenames safePHP - 使 $_FILES 文件名安全
【发布时间】:2014-07-30 13:17:18
【问题描述】:

我有一个包含“附件”字段的表单,允许用户添加多个附件。然后上传每个附件,但在此之前,使用以下函数确保每个文件名安全。

function safeFile($file) {  

    $lower = strtolower($file);
    $trim = rtrim($lower, '.');
    $regex = array('#[^A-Za-z0-9\.\_\- ]#');

    return trim(preg_replace($regex, '', $trim));       
}

到目前为止一切顺利。

然后我对文件名进行 json 编码以存储在数据库中。使用以下内容:

json_decode($_FILES['attachment']['name']);

这会在数据库中输出以下内容:

["FILE.jpg", "OTHER.jpg"]

这可行,但是我也在尝试调用safeFile() 函数,以便在插入数据库之前应用与上传时相同的操作。

我尝试使用以下不起作用。

json_encode( safeFile($_FILES['add_attachment']['name']) );

为了解决这个问题,从逻辑上思考,我是否必须创建一个foreach 循环,然后使每个单独的文件名安全,然后返回一个数组?

有人能把我推到正确的方向吗?

【问题讨论】:

  • 试试array_map("safeFile",$_FILES['add_attachment']['name']);
  • 虽然 array_map 很好,但问题中提出的 foreach 可以正常工作,所以我想知道你为什么在提问之前没有尝试?

标签: php arrays function json


【解决方案1】:

你不需要 foreach 循环

你需要像这样使用array_map()

array_map("safeFile", $_FILES['add_attachment']['name']);

另外,我认为您需要使用的是 json_encode() 而不是 json_decode

【讨论】:

  • 谢谢。发挥了作用:) 我使用的是 json_encode,但输入时出错了。
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 2015-03-19
  • 2011-04-26
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
相关资源
最近更新 更多