【问题标题】:PHP - DEFINE array with string on end [duplicate]PHP - 以字符串结尾的定义数组[重复]
【发布时间】:2017-12-12 03:08:07
【问题描述】:

我正在为用户级别创建一个数组,并希望通过在数组 UserLevels 中每个用户级别的末尾添加一个秘密的 10 位字符串来确保它们的安全。我正在使用下面的代码,但在使用 PHP 术语定义时,我似乎无法将字符串添加到数组中。

我的代码如下:

//Change the 10 digits of the $secret definition to a randomised string
$secret = '0000000000';

define('UserLevels', array(
    'Owner'.$secret,
    'Admin'.$secret,
    'Staff'.$secret
));

我打算让它散列/检查用户级别以使它们更安全,然后在每个页面稍后使用一些东西来检查散列。

【问题讨论】:

标签: php


【解决方案1】:

检查您的 PHP 版本。

您用于定义数组常量的语法应该只适用于 PHP 7。

// Works as of PHP 5.6.0
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1]; // outputs "cat"

http://php.net/manual/en/language.constants.syntax.php

您可以序列化数组以将常量存储为字符串,然后在需要访问值时使用 unserialize 将其返回到数组。

<?php

//Change the 10 digits of the $secret definition to a randomised string
$secret = '0000000000';

$user_levels = array(
    'Owner'.$secret,
    'Admin'.$secret,
    'Staff'.$secret
);

define('UserLevels', serialize($user_levels));
var_dump(UserLevels);
var_dump(unserialize(UserLevels));

https://eval.in/829457

【讨论】:

  • 你也打败了我吧。
  • @Ryan Tuosto 哦,好吧。您知道使用较低 PHP 版本的解决方法吗?
  • @BenWilson 查看更新的答案
  • @RyanTuosto 哦,太好了!你知道我怎么能用这个来调用某个用户级别吗?
  • $user_levels = unserialize(UserLevels); $owner = $user_levels[0];您可能希望将其作为一个关联数组开始,以便您可以调用类似 $user_levels['owner'] 的东西。
【解决方案2】:

如果你不使用 PHP 7

define('ARRAY_EXAMPLE', serialize(array(1, 2, 3, 4, 5)));

unserialize(ARRAY_EXAMPLE);

【讨论】:

  • 谢谢,但你能解释一下这实际上是做什么的吗?
  • 它将数组转换为字符串,稍后可以解析回数组:eval.in/829456
  • @BenWilson Look Ryan 示例
猜你喜欢
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
相关资源
最近更新 更多