MYSQL 不写脚本,用 SQL 乱序 ID 主键
添加一个 r INT(10),复制一个同样结构的表
UPDATE table SET r=FLOOR(1 + (RAND() * 10800));
INSERT INTO table_copy
(xxx,xxx,xxx)
SELECT xxx,xxx,xxx FROM table
ORDER BY r DESC;
C'est La Vie
添加一个 r INT(10),复制一个同样结构的表
UPDATE table SET r=FLOOR(1 + (RAND() * 10800));
INSERT INTO table_copy
(xxx,xxx,xxx)
SELECT xxx,xxx,xxx FROM table
ORDER BY r DESC;
最近 ENPHP 上线了两种注释加密,
这也是我个人在代码加密混淆的实际应用场景里最常用的两种方法:
1、隐藏代码
示例:
/*<hide>*/
echo 1;
/*</hide>*/
能在加密混淆前,去掉
echo 1;
这样,中间有部分逻辑就会去除。
语法说明:
/*<hide>*/
需要隐藏的代码
/*</hide>*/
/*<hide>*/和/*</hide>*/字符串固定,<和>之间不能有任何空格,hide只能小写
应用场景?我举个例子:
2、字符串+数字加密
示例:
$a = /*<encode>*/"明文数据1"/*</encode>*/;
echo /*<encode>*/2/*</encode>*/;
print(/*<encode>*/"明文数据3"/*</encode>*/);
加强字符串混淆强度,即使反编译后仍无法找到原字符串,使 hacker 们反编译后依旧无法正常阅读。
语法:
/*<encode>*/'字符串'/*</encode>*/
/*<encode>*/"字符串"/*</encode>*/
/*<encode>*/123/*</encode>*/
仅支持字符串变量和数字,如果中间是其它格式将不会转换。同理,encode 前后<和>都不能有空格
应用场景:
$domain = /*<encode>*/'djunny.com'/*</encode>*/;
$message = /*<encode>*/'Plz Register'/*</encode>*/;
if(strpos($_SERVER['HTTP_HOST'], $domain) !== false){
exit($message);
}
当然,还有一个更加优化版本:
$a = 'd';
$b = 'j';
$k = '*';
$domain = str_replace($k, '', $a.$k.$b.$k)./*<encode>*/'unny.com'/*</encode>*/;
$message = /*<encode>*/'Plz Register'/*</encode>*/;
if(strpos($_SERVER['HTTP_HOST'], $domain) !== false){
exit($message);
}
随意发挥~
好了,先说到这,有什么问题可以留言给我。
今天在部署两台新机器的时候,rpm、wget 和 curl 均出现:
Peer certificate cannot be authenticated with known CA certificates
然后整了很多方法,例如:
curl https://curl.haxx.se/ca/cacert.pem --insecure -o /etc/pki/tls/certs/ca-bundle.crt
例如:
update-ca-trust
结果依旧无法识别证书。
甚至在准备要升级下 tlinux 内核...
正当一愁莫展的时候,ls 发现新建的文件时间都是2015年...心想会不会和时间有关?
于是立马执行:
rdate -s time.nist.gov
成功后,再试一次 curl https
结果成功了。。。。。。
这踏马就尴尬了,低级错误。。。。
写到这里,希望后来有人遇到这个问题可以看到。
操作系统:centos 6.7 / centos 6.8
(YUM 安装 PHP7 的方法在这里:PHP7安装)
yum 命令(先安装 php7、PHP7-devel、ImageMagick-devel):
yum install -y php70w php70w-devel ImageMagick-devel
mkdir download/
cd download/
git clone https://github.com/mkoppanen/imagick.git
cd imagick
phpize
./configure
make && sudo make install
echo extension=imagick.so >> /etc/php.d/imagick.ini
然后,看看扩展是否正常安装:
php -m | grep imagick
返回结果为imagick 即安装成功。
PARTITION 分区技术介绍就在这里不细述了,有心人请自行百度。
我这里遇到的情况是,一个平台,下边有许多许多的代理商,每个代理商对应一个 site_id.
因为每个代理商之间的数据都是互不影响的,想根据 HASH(site_id) 来分区。
数据量因为不是很大,而且写比读频繁,所以暂时只考虑 MYISAM 引擎。
CREATE TABLE `test` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`site_id` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '站点id',
PRIMARY KEY (`id`),
KEY `siteIndex` (`site_id`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8 PARTITION BY HASH (site_id) PARTITIONS 10;
于是遇到
错误码: 1503
A PRIMARY KEY must include all columns in the table's partitioning function
这个问题的原因是因为 分区的参数必须包含 PRIMARY KEY , 主键id, 必须放在HASH(id)中。
所以,在创建表的时候不能设置主键。因此 id 字段也不能自增。
将id 改成 char(16),创建使用唯一 guid的方案:
/**
* get guid by
*
* @return string|void
*/
function guid($pre = '') {
return ($pre ? $pre : '') . substr(md5(uniqid(($pre ? $pre : '') . mt_rand(), true)), 9, 16);
}
因为 id 必须要为数字(需要coreseek配合全文索引),所以这个方案暂时放一放。
后来,还是决定把 id 字段 INT(10) 不变,变为索引字段。
然后外建一个表:
CREATE TABLE `maxid` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`tb` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '表名',
`maxid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最大自增id',
`step` INT(5) UNSIGNED NOT NULL DEFAULT '1' COMMENT '步长',
PRIMARY KEY (`id`),
UNIQUE KEY `tb` (`tb`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8;
手工统计自增的id。
(在高并发的系统中,需要在获取 maxid 之前要加锁。否则极有可能会产生重复的id。)