我在理解php的crypt函数方面有点麻烦.我的PHP版本是5.4.7.
我想使用crypt在数据库中存储salted密码,因为据我所知,使用md5哈希密码的开发人员将在现场进行赌注和烧毁.
我想使用blowfish alg来生成哈希.现在,根据php文档,如果用"$ 2y $"+成本(例如:"08")+"$"+ 22个字符盐(./0-9A-Za-z)调用它,则crypt使用blowfish .但是,这一点测试代码的输出让我很困惑:
echo "<pre>";
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish SaltLen = 18: ' . crypt('string that should be hashed', '$2y$08$123456789012345678') . "\n";
echo 'Blowfish SaltLen = 19: ' . crypt('string that should be hashed', '$2y$08$1234567890123456789') . "\n";
echo 'Blowfish SaltLen = 20: ' . crypt('string that should be hashed', '$2y$08$12345678901234567890') . "\n";
echo 'Blowfish SaltLen = 21: ' . crypt('string that should be hashed', '$2y$08$123456789012345678901') . "\n";
echo 'Blowfish SaltLen = 22: …Run Code Online (Sandbox Code Playgroud) 首先:我试图谷歌它,但我大多只发现有关如何在常量和其他无关信息中定义数组的讨论.
我有一个问题,一个解决方案,使我的代码更可读(和漂亮),只是发生在我身上.基本上我有大多数函数返回一个状态代码,表示成功,或者,如果出现问题,返回错误代码.为此,我创建了一个名为"StatusCode"的类,它只包含常量,如下所示:
<?php
class StatusCode {
const success = 0;
const badArgument = -1;
const badQuery = -2;
const outOfMana = -3; //Really just for demonstration purposes
...
}
Run Code Online (Sandbox Code Playgroud)
目的是让魔术数字从我的代码中消失,并清楚地说明出了什么问题而不必在某处寻找解释:
if (mana > 10) {
//Do some magic
return StatusCode::success;
}
else {
//Oh god this is not good!
return StatusCode::outOfMana;
}
Run Code Online (Sandbox Code Playgroud)
它还应该消除意外使用重复错误代码的可能性.我很确定这会给我的应用程序增加一些小的开销,但是让我的代码更易于理解.是否有一些惊天动地的理由不这样做?也许更好的办法呢?
(我已经避免使用这种define(CONSTANT, "value")方法,因为它看起来不那么漂亮,而且在我的德语键盘上写一个麻烦:))
情况:
我有5个CSS文件:
base.css,其中一些样式适用于所有地方
339px.css,宽度可达339px
639px.css,宽度最大为639px
999px.css和
bigscreen.css适用于宽度超过999像素的任何东西
代码:
<link rel="stylesheet" type="text/css" media="all" type="text/css" href="css/base.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width: 0px) and (max-width: 339px)" href="css/339px.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width: 340px) and (max-width: 639px)" href="css/639px.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width: 640px) and (max-width: 999px)" href="css/999px.css" />
<link rel="stylesheet" type="text/css" media="screen and (min-width: 1000px)" href="css/bigscreen.css" />
Run Code Online (Sandbox Code Playgroud)
这一切都很好,并且在设备屏幕上1 css像素等于1/96英寸(2.54cm)的任何设备上都能完美运行.然而,最近许多显示设备的像素密度远高于此,因此当339px.css合适时,它们应用于639px.css.这是一个问题,因为内容看方式太小.
另请注意,我不能使用JavaScript和台式计算机schould总是根据宽度获取相应的css文件,无论方向如何.
我想要实现的目标:
基本上不是css像素,我想要一个相对于设备像素密度的单位(桌面,平板电脑,智能手机,4k显示器,"Retina"显示器,你明白了)并且可以同时使用所有主流浏览器移动和桌面平台.
与此同时,我还需要为旧版浏览器支持css像素.
这给了我一个令人头疼的问题.据我所知,您可以使用device-pixel-ratio,但我没有成功地在某些时候(两个css文件处于活动状态的区域,例如339px.css和639px.css)中使css文件"重叠".
我没办法.我已经试过的组合min-width,max-width, …
我一直在努力找到这个问题的解决方案,现在我已经几乎无法想出一些有效的方法.问题如下:
我目前正在开发一个统计工具,显示一些应用程序的图形和数据.显然需要限制对这些数据的访问,因为用户A拥有应用程序"一"和"二",并且不能看到"三"或"四".
现在,每个用户可以是多个组的成员并从该组继承权限,但也可以拥有单独的权限.必须为每个应用程序设置这些权限.在以下情况下,可以访问一个应用程序的一组数据:

目标是创建一个表,该表存储每个用户当前对每个应用程序的实际权限,根据组成员身份和个人权限计算,并且由于与其他表的关系,该信息始终保持一致.
我不知道这是否有助于找到解决方案,但这里是获取id为1的用户当前活动权限的SQL:
(
SELECT u.perm_id AS perm, u.user_id AS uid, u.app_id AS app
FROM daUsers_has_daPermissions AS u
WHERE u.user_id = 1
)
UNION
(
SELECT g.perm_id AS perm, u.user_id AS uid, g.app_id AS app
FROM daUsers_has_daPermissions AS u, daUsergroup_has_daPermissions AS g, daUsergroup_has_daUsers AS g_has_u
WHERE u.user_id = 1
AND u.user_id = g_has_u.user_id
AND g.group_id = g_has_u.group_id
);
Run Code Online (Sandbox Code Playgroud)
这就是我想要存储在一个额外的表中(仅适用于所有用户).