PHP实现区块链技术(转载) 不指定

jed , 2018-3-14 09:01 , 代码编程 , 评论(0) , 阅读(1652) , Via 本站原创

<?php
/**
* 区块链相关算法
*/
class Block
{
    
    public $timestamp; //时间
  
    public $index; //索引
    
    public $data; //数据

    public $prevHash; //上一个哈希值
    
    public $hash; //当前哈希值

    public function __construct($index, $timestamp, $data, $prevHash = '')
    {
        $this->index = $index;
        $this->timestamp = $timestamp;
        $this->data = $data;
        $this->prevHash = $prevHash;
        $this->hash = $this->calculateHash();
    }
    /**
     * 加密算法
     * @return string
     */
    public function calculateHash()
    {
        return hash('sha256', $this->index . $this->prevHash . $this->timestamp . json_encode($this->data));
    }
}
/**
* 区块链
* Class BlockChain
*/
class BlockChain
{

    public $chain = []; // Block[]

    public function __construct()
    {
        $this->chain = [$this->createGenesisBlock()];
    }
    /**
     * 创世区块
     * @return Block
     */
    public function createGenesisBlock()
    {
        return new Block(0, '2017-01-23', 'forecho', '0');
    }
    /**
     * 获取最新的区块
     * @return Block|mixed
     */
    public function getLatestBlock()
    {
        return $this->chain[count($this->chain) - 1];
    }
    /**
     * 添加区块
     * @param Block $newBlock
     */
    public function addBlock(Block $newBlock)
    {
        $newBlock->prevHash = $this->getLatestBlock()->hash;
        $newBlock->hash = $newBlock->calculateHash();
        array_push($this->chain, $newBlock);
    }
    /**
     * 验证区块链
     * @return bool
     */
    public function isChainValid()
    {
        for ($i = 1; $i < count($this->chain); $i++) {
            $currentBlock = $this->chain[$i];
            $prevBlock = $this->chain[$i - 1];
            if ($currentBlock->hash !== $currentBlock->calculateHash()) {
                return false;
            }
            if ($currentBlock->prevHash !== $prevBlock->hash) {
                return false;
            }
        }
        return true;
    }
}
// test
$blockChain = new BlockChain();
$blockChain->addBlock(new Block(1, '2017-02-23', ['amount' => 1]));
$blockChain->addBlock(new Block(2, '2017-03-23', ['amount' => 3]));
$blockChain->addBlock(new Block(3, '2017-04-23', ['amount' => 20]));
print_r($blockChain);
echo "区块链验证通过吗?" . ($blockChain->isChainValid() ? '通过' : '失败') . PHP_EOL;
$blockChain->chain[1]->data = ['amount' => 2];
$blockChain->chain[1]->hash = $blockChain->chain[1]->calculateHash();
echo "区块链验证通过吗?" . ($blockChain->isChainValid() ? '通过' : '失败') . PHP_EOL;

判断是否是微信浏览器 不指定

jed , 2018-3-7 08:29 , 代码编程 , 评论(0) , 阅读(3318) , Via 本站原创

navigator.userAgent.toLowerCase().indexOf("micromessenger") >= 0;

select * FROM table WHERE keyword LIKE 'field%'

SELECT * FROM table WHERE LOCATE('field',keyword)>0;

SELECT * FROM table WHERE INSTR(keyword,'field')>0;


table : 表名

field : 需要查字段名

keyword : 字段名称

phpstorm使用教程 不指定

jed , 2018-3-5 10:28 , 代码编程 , 评论(0) , 阅读(4562) , Via 本站原创
、设置行号 show line numbers  设置里面搜索这个,可以设置默认显示行号

2、设置自动换行 use soft wraps in editor

3、设置 FTP  搜索 Deployment 快捷键 Shift+Ctrl+Alt+X

1.设置新建文件的编码
File -> Settings -> File Encoding 进行调整,一般为utf-8。
2.对jquery等一些javascript库的一些提示
File -> Settings -> javascript -> Libraries 点击download选择需要下载的js库。
3、取消自动保存
File ->Settings ->System Setting 取消 save files on frame deactivation 。

4、修改的文件标记星星(即*)

File ->Settings ->Editor -> Editor Tabs,,勾选mark modified tabs width asterisk选项.



代码快捷键:



ctrl+j            插入活动代码提示
ctrl+alt+t        当前位置插入环绕代码
alt+insert        生成代码菜单

ctrl+q            查看代码注释
ctrl+d            复制当前行
ctrl+y            删除当前行
shift+F6          重命名
ctrl+shift+u      字母大小写转换
ctrl+f            查找
ctrl+r            替换
F4                查看源码
ctrl+shift+i      查看变量或方法定义源
ctrl+g            跳转行
ctrl+alt+F12      跳转至当前文件在磁盘上的位置
alt+down          查看下一个方法
alt+up            查看上一个方法
ctrl+alt+l        重新格式化代码
ctrl+shift+down   statement向下移动
ctrl+shift+up     statement向上移动
alt+shift+down    line向下移动
alt+shift+up      line向上移动
ctrl+/            行注释
ctrl+shift+/      块注释

ctrl+shift+n      打开工程中的文件
ctrl+b            跳到变量申明处
ctrl+[]           匹配 {}[]
ctrl+shift+]/[    选中块代码....

ctrl+x            剪切行
ctrl+shift+v      复制多个文本
alt+left/right    标签切换
ctrl+p            显示默认参数

Ctrl + Alt + L    格式化代码
alt + '7'         显示当前的函数结构
ctrl + '.'        折叠选中的代码的代码
ctrl + '-/+'      可以折叠项目中的任何代码块,包括htm中的任意nodetype=3的元素,function,或对象直接量等等。它不是选中折叠,而是自动识别折叠
ctrl + F12        可以显示当前文件的结构



配置ftp:

http://bbs.csdn.net/topics/390677784

http://www.cnblogs.com/jikey/p/3486621.html

tools-devloy。。。



配置svn:

http://jingyan.baidu.com/article/c275f6ba240f4ee33c75677f.html

常见svn错误:



Can't use Subversion command line client: https://XXX/xxx

Probably the path to Subversion executable is wrong. Fix it. (show balloon)

解决:指定svn命令行

在菜单栏中选择“File”->“Settings”->“Subversion”->“General”打开属性面板。勾选“Use command line client”填写你的TortoiseSVN安装目录如:C:\Program Files\TortoiseSVN\bin\svn.exe。

我在TortoiseSVN1.9中的目录没找到svn.exe,反倒是在我安装的VisualSVN 服务器端找到了,C:\Program Files (x86)\VisualSVN Server\bin,应用即可。

如果:

https://pcdalao/svn/项目  Vis svn给你分配的路径  别人访问不到。

就用https://你的ip/svn/项目

注意要关闭防火墙





xdebug调试:

任务:我有一个本地配好的Thinkphp项目,正常访问连接是,http://192.168.1.248:94 ,那么我要调试Admin模块Test控制器的index方法,

也就是http://192.168.1.248:94/admin/test/index



准备工作:

1.谷歌浏览器,并下载插件2个插件。JetBrains IDE Support,Xdebug helper


=================================================

1
本地修改记录:在项目名称上右键,点击Local History | Show History。你可以看到项目文件各个历史版本;Alt+Shift+C,可以看到项目最近的修改。这就是它的版本集成功能特性。



2
最近编辑:Ctrl+E。可以快速打开你最近编辑的文件。



PhpStorm中文教程
3
代码分界线:打开File | Setting | Editor,选择Appearance下面的Show Method Separators。它会将你的代码按方法,用灰色线框进行智能分割。你还可以使用:alt+↑或↓,在方法之间进行跳转。

PhpStorm中文教程
4
代码输入提示:IDE基于系统函数库,关联项目文件的方法名,当前文件内容,内部文件路径(使用【Ctrl+空格】补全)进行代码提示。

5
粘贴板:使用Ctrl+Shift+V。可以选择需要粘贴的最近内容。

6
皮肤切换:Ctrl+反引号,可以快速切换皮肤。

7
快速查看样式:在HTML标签上进行右键,选择Show Applied Styles For Tag。可以快速查看该标签应用的样式。类似于前端开发工程师常用的firebug。



PhpStorm中文教程
8
查找和替换:当前文件中的文本查找和替换使用Ctrl+F和Ctrl+R;

END
IP相关统计
统计IP访问量(独立ip访问数量)

awk '{print $1}' access.log | sort -n | uniq | wc -l

查看某一时间段的IP访问量(4-5点)

grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l  

查看访问最频繁的前100个IP
Tags:
在centos 6上面,curl模块的ssl 支持默认为NSS,涉及到的程序里有https,是需要双向认证的,这时使用NSS会报错,所以需要更换为openssl.

一、查看系统自带的curl的版本

[root@localhost local]# curl -V
curl 7.19.7

二、得到curl当前版本是7.19.7,我们去官方下载http://curl.haxx.se/download/archeology/ 同样版本,然后解压、编译。
一、 L2TP/IPSec vpn一键安装脚本

运行下面的命令

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/across/master/l2tp.sh
chmod +x l2tp.sh
./l2tp.sh

全默认回车就行,全自动安装,如果没有问题,那就成功安装了L2TP/IPSec

二、pptp vpn一键安装脚本

运行下面命令

wget http://mirrors.linuxeye.com/scripts/vpn_centos.sh
chmod +x ./vpn_centos.sh
./vpn_centos.sh

这里这个脚本我在CentOS 6中安装完全没问题。

三、添加vpn登陆账号

在/etc/ppp/chap-secrets里添加和删除vpn账号,比如我添加一个账号:

veaxen * 123 *

这样就可以使用veaxen这个账号进行登陆了,密码是123,可选用pptp登陆也可以选用用L2TP/IPSec登陆。第二中登陆方式可能还需要与共享秘钥(PSK),这个可以在/etc/ipsec.secrets里增加或者修改。

下载文件 (已下载 953 次)

linux下显示dd命令的进度 不指定

jed , 2017-7-11 17:11 , 服务器技术 , 评论(0) , 阅读(59329) , Via 本站原创
Linux下显示dd命令的进度:

dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000

想要查看上面的dd命令的执行进度,可以使用下面几种方法:

比如:每5秒输出dd的进度

方法一:

watch -n 5 pkill -USR1 ^dd$


方法二:

watch -n 5 killall -USR1 dd

方法三:

while killall -USR1 dd; do sleep 5; done

方法四:

while (ps auxww |grep " dd " |grep -v grep |awk '{print $2}' |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done

上述四种方法中使用三个命令:pkill、killall、kill向dd命令发送SIGUSR1信息,dd命令进程接收到信号之后就打印出自己当前的进度。
一、内容介绍

1、问题描述

1)、问题一
CentOS 6.x 在格式化大于16TB的ext4分区时,会提示如下错误:
分页: 11/80 第一页 上页 6 7 8 9 10 11 12 13 14 15 下页 最后页 [ 显示模式: 摘要 | 列表 ]