首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证PHP文件中只包含数组

问验证PHP文件中只包含数组
EN

Stack Overflow用户
提问于 2016-01-20 22:00:39
回答 2查看 72关注 0票数 0

我有一个配置.php文件,其中包含一个数组(将作为PHP ),该文件包含以下内容:

代码语言:javascript
复制
<?php
return array(
  'api_key'     => 'e3awY0HoZr0c6L0791Wl2dA3',
  'user'     => 'Lequis',
  'timeout'     => '4'
);

这些文件是由用户上传的,我想验证用户没有添加任何恶意代码,因为这些文件只包含一个数组,所以我想验证它实际上只是一个数组

EN

回答 2

Stack Overflow用户

发布于 2016-01-20 22:17:44

编辑:见@VolkerK关于如何防止恶意代码注入的评论。

就像@Jay所说的那样,更好的做法可能是考虑一种更合适的数据结构,比如JSON。但是,如果您确实希望坚持这种结构,可以使用PHP的is_array() (http://php.net/manual/en/function.is-array.php)函数在尝试将该数组传递给任何其他函数之前验证变量是数组。

这只会验证您确实有一个数组,而不是您的数组是否具有正确的格式。为了更进一步,您可以使用count() (http://php.net/manual/en/function.count.php)函数验证数组的大小是否正确,这两件事的结合将确保数组中存储的值数目是正确的。

检查数组值是否采用正确的格式是另一回事。您可以运行所有的键,并将传递的键与可接受的键数组进行比较,如下所示:

代码语言:javascript
复制
function isValidArr($usrArr){

$apiParams = array('api_key', 'user', 'timeout');

for($i = 0; i < count($usrArr); $i++ {
   if(!strcmp($usrArr[$i], $apiParams[$i])) {
    return false;
   }
  }
}

然后,为了检查与每个键相关联的值,我假设api_key是一个特定长度或范围内的值,因此您可以对照它进行检查。对于超时,可以确保值是整数。要根据用户名进行验证,可以实现regex,以确保该值符合特定的格式。

票数 -1
EN

Stack Overflow用户

发布于 2016-01-20 22:11:49

我不知道你想检查什么,数组还是值?

如果数组,那么,我认为您可以使用简单的is_array($arr)功能。

如果值,则有一个很好的Symfony组件SymfonyOptionsResolver。

您可以将其用作值类型/值等的验证器。

代码语言:javascript
复制
public function configureOptions(OptionsResolver $resolver)
{
    // ...
    $resolver->setAllowedTypes('host', 'string');
    $resolver->setAllowedTypes('port', array('null', 'int'));
}

或者在preg_match中使用规范化和检查值。

代码语言:javascript
复制
public function configureOptions(OptionsResolver $resolver)
{
    // ...

    $resolver->setNormalizer('host', function (Options $options, $value) {
        if ('http://' !== substr($value, 0, 7)) {
            $value = 'http://'.$value;
        }

        return $value;
    });
}

查看文档以获得更多信息。

这就是你要找的吗?

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34911461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档