有没有之间的PHP任何差异while(true)
和for(;;)
除了语法和可读性?
编辑:我不认为这是重复 - 我想知道PHP特有的答案.就发动机而言,有什么真正的区别吗?他们编译成同样的东西吗?他们有同等的表现吗?
编辑2:我也不会认为相对表现和相关的OpCodes是基于意见.可读性存在意见空间,但这显然不是问题.
我已经长时间使用了无盐的md5/sha1,但由于这种方法不太安全(并且随着时间的推移变得越来越不安全)我决定切换到盐渍的sha512.此外,我想通过使用许多迭代(例如100)来减慢散列的生成.
我的问题是我是应该在每次迭代时添加盐还是在开始时只添加一次.以下是两个可能的代码:
每次追加:
// some nice big salt
$salt = hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string . $salt, $raw);
}
return $string;
Run Code Online (Sandbox Code Playgroud)
追加一次:
// add some nice big salt
$string .= hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string, $raw);
}
return $string;
Run Code Online (Sandbox Code Playgroud)
我首先想要使用第二个版本(追加一次)但后来发现每次添加盐的一些脚本.
所以,我想知道每次添加它是否会增加哈希的强度.例如,攻击者是否有可能找到一种聪明的方法来创建一个100XSha512函数,这比简单地执行sha512 100倍?
好吧,所以本着Code-Golf的精神,我在这里尝试新的东西:Code-Bowling.
在高尔夫中,你试图获得最低分(最小的应用,最优雅的等).在鲍灵,你试图获得最高分.因此,如果您遵循,Code-Bowling挑战的目标是制作最大,最卑鄙,最难维护的代码仍然能够满足挑战的要求.然而,仅仅为了它而使源更长是没有意义的.它似乎需要增加的长度来自设计而不仅仅是填充.
这是挑战:
用您选择的语言编写一个程序,创建一行文本输出并终止.创建的输出必须与此正则表达式匹配:
/^Good (Morning|Afternoon|Evening|Night)$/
Run Code Online (Sandbox Code Playgroud)
输出可能是随机的(使用语言或您自己的实现)或混乱(确定性,但不是平凡的).
我曾经把它作为传递给PDO构造函数的选项之一(第4个参数):
$aOptions[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
Run Code Online (Sandbox Code Playgroud)
但是刚发现由于某些bug,它在Windows上的某些php版本上无效(在5.3中不起作用).
现在我需要运行SET NAMES utf8
任何一个$pdo->exec("SET NAMES utf8");
要么 $pdo->query("SET NAMES utf8");
在实例化pdo对象之后.那么,我应该使用哪一个 - exec()或query()?
我研究类编译,它的序列和逻辑.
如果我在简单父级之前声明一个类:
class First extends Second{}
class Second{}
Run Code Online (Sandbox Code Playgroud)
这将工作正常.查看PHP版本的实例.
但是,如果父类还有一些尚未声明的父类(扩展或实现),如下例所示:
class First extends Second{}
class Second extends Third{}
class Third{}
Run Code Online (Sandbox Code Playgroud)
我会有一个错误:
致命错误:找不到"第二级"......
那么,为什么在第二个例子中它找不到Second
类?也许php无法编译这个类因为它还需要编译Third
类,还是什么?
我试图找出为什么在第一个例子中,PHP编译类第二,但如果它将有一些父类,它不会.我研究了很多,但没有确切的.
在PHP中,我们可以mb_check_encoding()
用来确定字符串是否是有效的UTF-8.但这不是一个可移植的解决方案,因为它需要编译和启用mbstring扩展.此外,它不会告诉我们哪个字符无效.
是否有正则表达式(或其他100%可移植方法)可以匹配给定字符串中的无效UTF-8字节.这样,如果需要,可以替换这些字节(保留二进制信息,例如在构建包含二进制数据的测试输出xml文件时).因此,将字符转换为UTF-8将丢失信息.所以,我们可能想转换:
"foo" . chr(128) . chr(255)
Run Code Online (Sandbox Code Playgroud)
成
"foo<128><255>"
Run Code Online (Sandbox Code Playgroud)
所以只是"检测"字符串不够好,我们需要能够检测哪些字符无效.
我正在编写一个PHP应用程序.我想将用户登录信息存储在cookie中,这样用户就无需在每次访问时登录.
我想对它们进行编码或对它们进行模糊处理,以便它们不会被读取或篡改.
做这个的最好方式是什么?
更新:
我不打算将密码存储在cookie中,只是一个用户ID,以便我知道它们是谁,但我想要对其进行编码或加密,这样就没有人可以欺骗其他用户
我在一个文件夹中有1000个图像,在所有图像中都有SKU #word.举些例子
WV1716BNSKU#.zoom.1.jpg
WV1716BLSKU#.zoom.3.jpg
Run Code Online (Sandbox Code Playgroud)
我需要做的是读取所有文件名并将其重命名为以下内容
WV1716BN.zoom.1.jpg
WV1716BL.zoom.3.jpg
Run Code Online (Sandbox Code Playgroud)
所以从文件名中删除SKU#,在PHP中可以进行批量重命名吗?
我正在寻找一种合理有效的方法来确定浮点值(double
)是否可以由整数数据类型(long
,64位)精确表示.
我最初的想法是检查指数是否0
(或更确切地说127
).但这不会起作用,因为2.0
e = 1 m = 1 ......
基本上,我被卡住了.我有一种感觉,我可以使用位掩码做到这一点,但我现在还没有理解如何做到这一点.
那么我怎样才能检查一个double是否完全可以表示为long?
谢谢
php ×8
security ×2
utf-8 ×2
c ×1
cookies ×1
cryptography ×1
double ×1
for-loop ×1
ieee-754 ×1
inheritance ×1
obfuscation ×1
passwords ×1
pdo ×1
random ×1
regex ×1
session ×1
string ×1
validation ×1
while-loop ×1