小编ano*_*reh的帖子

PHP函数生成v4 UUID

所以我一直在做一些挖掘,我一直在努力拼凑一个在PHP中生成有效的v4 UUID的函数.这是我能够来的最接近的.我在十六进制,十进制,二进制,PHP的按位运算符等方面的知识几乎不存在.此函数生成有效的v4 UUID直到一个区域.v4 UUID应采用以下形式:

xxxxxxxx-xxxx- 4 xxx- y xxx-xxxxxxxxxxxx

其中y 是8,9,A或B.这是函数失败的地方,因为它不符合它.

我希望在这个领域有比我更多知识的人可以帮助我解决这个问题并帮助我解决这个问题.

功能如下:

<?php

function gen_uuid() {
 $uuid = array(
  'time_low'  => 0,
  'time_mid'  => 0,
  'time_hi'  => 0,
  'clock_seq_hi' => 0,
  'clock_seq_low' => 0,
  'node'   => array()
 );

 $uuid['time_low'] = mt_rand(0, 0xffff) + (mt_rand(0, 0xffff) << 16);
 $uuid['time_mid'] = mt_rand(0, 0xffff);
 $uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000));
 $uuid['clock_seq_hi'] = (1 << 7) | (mt_rand(0, 128));
 $uuid['clock_seq_low'] = mt_rand(0, 255);

 for ($i = 0; $i < 6; …
Run Code Online (Sandbox Code Playgroud)

php uuid function

215
推荐指数
11
解决办法
18万
查看次数

SQLAlchemy按照多对多的关系排序

这是我当前模型的简化示例(我正在使用Flask SQLAlchemy扩展):

like = db.Table(
    'like',
    db.Column('uid', db.Integer, db.ForeignKey('users.id')),
    db.Column('pid', db.Integer, db.ForeignKey('posts.id'))
)

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key = True)
    username = db.Column(db.String(20))

class Post(db.Model):
    __tablename__ = 'posts'

    id = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(255))

    likes = db.relationship(
        'User',
        secondary = like,
        backref = db.backref('likes', lazy = 'dynamic'),
        lazy = 'dynamic'
    )
Run Code Online (Sandbox Code Playgroud)

我试图Post通过喜欢的数量订购.

这是我基本上试图发出的查询:

SELECT p.*, COUNT(l.`pid`) as `likes`
FROM `posts` as p
LEFT JOIN `like` …
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy flask flask-sqlalchemy

26
推荐指数
1
解决办法
9621
查看次数

活动流/源,是否反规范化?

我知道这个问题的变化已经被问了很多次之前(我看过他们,他们是2:1,2),但我不能换我的头周围任何东西,感觉就像合适的解决方案.

从多对多关系,扇出,多态关联,NoSQL解决方案,消息队列,非规范化以及它们的组合,都提出了一切建议.

我知道这个问题非常具有情境性,所以我将简要解释一下我的问题:

  • 许多活动触发了许多事件.
    • 关注,创建,喜欢,评论,编辑,删除等
  • 用户可以关注其他用户的活动(他们触发的事件).
  • 请求最多的活动将是最近发生的事件.
    • 需要查看过去事件的能力.
  • 根据日期描述,不需要对订阅源进行排序或搜索.
  • 可伸缩性是一个问题(性能和可扩展性).

对于平均时间,我结束了一个非标准化的设置基本上被由包括事件表的打算:id,date,user_id,action,root_id,object_id,object,data.

user_id是触发事件的人.
action是行动.
root_idobject属于的用户.
object是对象类型.
data包含在用户流中呈现事件所需的最少量信息.

然后,为了获得所需的事件,我只抓住所有行,其中user_id是用户的id,我们正在抓取它的流.

的工作原理,但非规范化只是感觉不对.多态关联看起来同样如此.Fanout似乎介于两者之间,但感觉非常混乱.

通过我对这个问题的所有搜索,并在这里阅读了很多关于SO的问题,我无法点击任何内容并感觉它是正确的解决方案.

我们非常感谢任何人提供的任何经验,见解或帮助.谢谢.

database-design social-networking

17
推荐指数
1
解决办法
4114
查看次数

ArrayAccess多维(un)设置?

我有一个类实现ArrayAccess,我试图让它与多维数组一起工作.existsget工作.set并且unset给我一个问题.

class ArrayTest implements ArrayAccess {
    private $_arr = array(
        'test' => array(
            'bar' => 1,
            'baz' => 2
        )
    );

    public function offsetExists($name) {
        return isset($this->_arr[$name]);
    }

    public function offsetSet($name, $value) {
        $this->_arr[$name] = $value;
    }

    public function offsetGet($name) {
        return $this->_arr[$name];
    }

    public function offsetUnset($name) {
        unset($this->_arr[$name]);
    }
}

$arrTest = new ArrayTest();


isset($arrTest['test']['bar']);  // Returns TRUE

echo $arrTest['test']['baz'];    // Echo's 2

unset($arrTest['test']['bar'];   // Error
$arrTest['test']['bar'] = 5; …
Run Code Online (Sandbox Code Playgroud)

php arrays interface multidimensional-array

16
推荐指数
2
解决办法
4607
查看次数

PHP解引用数组元素

我有2个阵列.

$result = array();
$row = array();
Run Code Online (Sandbox Code Playgroud)

Row的元素都是引用,并且不断变化.对于每次迭代,$row我想将行的复制到条目$result而不是引用.

我找到了一些解决方案,但它们看起来都很糟糕.

$result[] = unserialize(serialize($row));
$result[] = array_flip(array_flip($row));
Run Code Online (Sandbox Code Playgroud)

上面的两个工作,但似乎是很多不必要和丑陋的代码只是通过值复制引用数组的内容,而不是复制引用本身.

有没有更清洁的方法来实现这一目标?如果不是最有效的方式是什么?

谢谢.

编辑:如下所示,例如:

function dereference($ref) {
    $dref = array();

    foreach ($ref as $key => $value) {
        $dref[$key] = $value;
    }

    return $dref;
}

$result[] = dereference($row);
Run Code Online (Sandbox Code Playgroud)

也有效,但看起来同样丑陋.

php arrays reference dereference

6
推荐指数
1
解决办法
5276
查看次数

PHP如何检查是否需要关闭MySQLi查询?

我为我正在处理的项目创建了一个简单的 MySQLi 类,以便更轻松、更简化地从数据库中提取和推送到数据库。(也是为了更熟悉 PHP 中的 OOP

我一直遇到的一个问题是努力使其尽可能高效。我尝试关闭/释放每个查询/语句/结果集。这样做时,我经常收到以下错误:

Warning: mysqli_result::close(): Couldn't fetch mysqli_result
Run Code Online (Sandbox Code Playgroud)

我想我得到了上面的内容,因为它试图连续两次关闭查询。

目前,我的班级可以做出准备和未准备的陈述。所以我尝试在 2 个地方关闭查询/语句。我在准备语句时检查我是否已经准备好了语句,如果是这样,我需要在创建新语句之前关闭旧语句,最后在类的析构函数中。

我意识到我可以在提取并存储结果后关闭查询/语句,但由于一些原因,这似乎很混乱。一方面,它消除了重用准备好的语句的可能性。以及不允许我在查询运行后提取有关查询的一些信息,例如受影响的行等。

我知道我可以只为每个查询存储这个信息,而不是什么,但似乎解决这个问题的正确方法是关闭/释放查询/语句,如果我需要再做一个,然后在最后再次的脚本。

我曾尝试环顾四周并阅读我应该如何正确处理这项任务,但我一直无法想出任何东西。

所以我的问题是,无论如何要测试查询或语句是否需要关闭或释放?或者我应该尝试解决这个问题有更好的方法吗?

感谢任何人可以提供的任何帮助或见解。

php mysql mysqli prepared-statement

5
推荐指数
1
解决办法
5757
查看次数

PHP Markdown XSS Sanitizer

我正在寻找一个简单的PHP库来帮助过滤PHP Markdown输出中的XSS漏洞.IE PHP Markdown将解析以下内容:

[XSS Vulnerability](javascript:alert('xss'))
Run Code Online (Sandbox Code Playgroud)

我一直在做一些阅读,我在这个问题上找到的最好的就是这个问题.

尽管HTML Purifier看起来像是最好的(几乎唯一的)解决方案,但我想知道是否有更一般的东西?HTML Purifier似乎有点强大,特别是对我的需求,以及配置的痛苦,虽然它看起来像这样做后很好.

还有什么可能会有点不那么健壮和可配置但仍然可以做得很好吗?或者我应该深入挖掘并开始尝试根据我的需求配置HTML Purifier?

编辑清晰度:我不打算偷工减料等.HTML Purifier只提供了很多细粒度的控制,对于一个简单的小项目来说,只需简单的控制就可以了,尽管不使用任何东西也不是一种选择.这是我在要求更简单更不健全的东西时来自的地方.

另外最后一点,我不是在寻找的建议使用htmlspecialchars(),strip_tags()或类似的东西.我已经通过以类似的方式清理PHP Markdown Extra中的嵌入式HTML.我正在寻找方法来防止PHP Markdown OUTPUT中的XSS漏洞.

谢谢.

php xss markdown sanitization

5
推荐指数
1
解决办法
2489
查看次数