作者归档:不白搜

PHP计算程序运行所占内存方法

//获取当前内存

$star_memory = memory_get_usage();
echo ‘开始内存:’.($star_memory/1024/1024). ”;
$tmp = str_repeat(‘hello’, 1000);
$array = [];
for($i=0;$i<8300000;$i++){
$array[] = $i;
}
$aaa = ”;
foreach($array as $k => $v) {
$aaa ++;
}
$end_memory = memory_get_usage();
echo ‘运行后内存:’.($end_memory/1024/1024). ”;
unset($tmp);
echo ‘差值:’.(($end_memory-$star_memory)/1024/1024);
echo “\n”;

$m=memory_get_usage(); //获取当前占用内存
echo $m;

PHP计算程序运行所占内存方法

memory_get_usage 此函数获取当前cpu内存

 

array_walk比foreach快?实际操作对比

<?php

function getmicrotime()
{
list($usec, $sec) = explode(” “,microtime());
return ((float)$usec + (float)$sec);
}
//
//
//
$time_start = getmicrotime();
$array = [];
for($i=0;$i<100000;$i++){
$array[] = $i;
}
echo ‘数据量:’.count($array);
echo “\n”;
$str = implode($array,’,’);
//// 记录结束时间
$aaa = 1;
$time_start1 = getmicrotime();
//test code
array_walk($array, function($aaa){
return $aaa++;
});

$time_end1 = getmicrotime();
echo ‘array_walk用时:’.sprintf(“%.8f”, $time_end1-$time_start1);
//////////////////////
echo “\n”;
$time_start2 = getmicrotime();
//test code
foreach($array as $k => $v) {
$aaa ++;
}
$time_end2 = getmicrotime();
echo ‘foreach用时:’.sprintf(“%.8f”, $time_end2-$time_start2);
?>

实际操作结果

环境php版本:  PHP7

十万数据循环

WX20171020-134933@2x

显示操作运行时间    foreach 是array_walk 的三分之一左右

上面附测试代码

代码在线测试执行

空闲时间乱搞了那么一通,竟然按照心里的想法搞了出来
平常在线测试代码比较繁琐 就写了个测试
一直纠结别人怎么弄的
1、支持大多数语言
2、安全性要有保证
3、带智能语法提示

第一点就不多重复了,语言越多越方便

第二点比较重要,安全是首要考虑的问题,拿最简单的来说,代码执行shell命令就可以了,可以把你的服务器所有东西删除掉。所以这是必需要考虑的。

第三点也是很重要的,作为一个程序员,编写程序的时候代码提示还是很重要的,至少对我来说,智能提示还是很需要的~~。

我比较擅长PHP 所以页面用PHP来写咯,接口也是用PHP来写的
运行的环境,当然我不用在自己的服务器上搞,这是很危险的,开始想了虚拟机但是对性能要求比较
高,还有就是服务器被黑的话在恢复的时间上 会很长。别人介绍了用docker(强力推荐),这个软件
非常的方便。即使删除了我系统相关的东西,也能很快的恢复。
语法提示,这个推荐个编辑器 ace.js 编辑器 吊的不得了 强力推荐!!支持120多种语言
相关的工具就那么多 php docker nginx (后面会用到 端口转发) ace.js
流程: php 渲染模板(可以无视) PHP请求数据,生成对应的 编程语言文件,PHP调用命令执行文件。执行的过程是在 docker 里面
其实流程还是比较简单的,踩坑比较多
以前踩过的坑  执行php代码
ace.js 相关
docker相关操作

SSH命令操作参考

1、查看SSH客户端版本

有的时候需要确认一下SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本号。需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用OpenSSH:

$ ssh -V
OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003

下面的例子表明该系统正在使用SSH2:

$ ssh -V
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu

2、连接到远程主机:

命令格式 :
ssh name@remoteserver 或者
ssh remoteserver -l name
说明:以上两种方式都可以远程登录到远程主机,server代表远程主机,name为登录远程主机的用户名。

3、连接到远程主机指定的端口:

命令格式:
ssh name@remoteserver -p 2222 或者
ssh remoteserver -l name -p 2222
说明:p 参数指定端口号,通常在路由里做端口映射时,我们不会把22端口直接映射出去,而是转换成其他端口号,这时就需要使用-p端口号命令格式。

4、通过远程主机1跳到远程主机2:

命令格式:
ssh -t remoteserver1 ssh remoteserver2
说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。

5、通过SSH运行远程shell命令:

命令格式:
ssh -l name remoteserver ‘command’
说明:连接到远程主机,并执行远程主机的command命令。例如:查看远程主机的内存使用情况。
$ ssh -l root 192.168.1.100 svmon -G

6、修改SSH监听端口:

默认情况下,SSH监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务,将SSH端口修改为大于1024的端口是一个明智的选择,因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。打开/etc/ssh/sshd_config文件并查找下面这样的行:
Port 22
去掉该行前面的# 号,然后修改端口号并重新启动SSH服务:
$ /etc/init.d/ssh restart

7、仅允许SSH协议版本2:

有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。编辑/etc/ssh/sshd_config文件并查找下面这样的行:
# Protocol 2,1
修改为
Protocol 2

8、禁止root用户登录:

通常情况下,不采用直接用root用户登录到远程主机,由于root用户拥有超级权限,这样会带来安全隐患,所以,一般我们用普通用户登录,当需要管理远程主机时,再切换到root用户下。打开/etc/ssh/sshd_config文件并查找下面这样的行:
#PermitRootLogin yes
将#号去掉,然后将yes修改成no,重启ssh服务,这样就可以禁止root用户登录。

将#号去掉,然后将bannertest.txt文件的全路径替换/some/path,然后保存,重启ssh服务。当客户端登录时,就会看到bannertest.txt文件中的提示信息。

9、进行端口映射:

假如公司内网有台web服务器,但是只对内不对外,这样,外网就无法访问,可以用ssh进行端口映射来实现外网访问内网的web服务器。假如web服务器名为webserver,webserver可以用ssh访问到远端主机remoteserver,登录到webserver,然后用下面命令进行映射
命令格式:
ssh -R 3000:localhost:80 remoteserver
执行完成后,在remoteserver机器上,执行netstat -an | grep 3000,查看有没有开通3000端口。并执行以下命令观察是否可以打开webserver上的网页
$ w3m http://127.0.0.1:3000
如果能打开界面,说明映射成功.但是,这只限于本机访问web服务器,即只能remoteserver机器访问webserver。因为3000端口绑定的是remoteserver机器的127.0.0.1端口。可以编辑remoteserver机器上的/etc/ssh/sshd_config文件并添加如下内容:
添加 GatewayPorts yes 内容,把监听端口3000绑定到 0.0.0.0 地址上,这样外部的所有机器都能访问到这个监听端口,然后保存退出。并重启ssh服务。完成后其它机器就可以在浏览器中输入 http://remoteserver:3000来访问webserver了。

10、设置登录时提示信息

首先编辑一个文件,如bannertest.txt,文件内容自行定义。然后打开/etc/ssh/sshd_config文件并查找下面这样的行:
#Banner /some/path

ace.js编辑器怎么用?

ace.js编辑器 支持 120多重语言 并且支持markdown 非常好用的代码编辑器

编辑代码或者显示代码 都推荐去使用
语法高亮超过120多种语言
超过20个主题
自动缩进
减少缩进
一个可选的命令行处理庞大的文件(400万线似乎是极限!)
完全自定义的键绑定,包括vim和Emacs模式
用正则表达式的搜索和替换
突出显示匹配的括号
软标签和实际标签之间切换
显示隐藏字符
使用鼠标拖放文本
换行
代码折叠
多个光标和选择
现场语法检查器
剪切,复制和粘贴功能
代码提示
尤其多代码提示功能,做的非常好
使用例子
只需要加载 这两个文件即可 下载的时候 会有src-noconflict 这个文件
<pre id=”editor”><?php 11;?></pre>
<script src=”ace/src-noconflict/ace.js” type=”text/javascript” charset=”utf-8″></script>
<script src=”ace/src-noconflict/ext-language_tools.js” type=”text/javascript” charset=”utf-8″></script>
下面的JS代码要写到 你的编辑器 上面,不然有可能因为加载问题没有代码提示
<script>
var editor = ace.edit(“editor”);//
editor.setTheme(“ace/theme/twilight”);//设置模板
editor.session.setMode(“ace/mode/php”);//设置语言
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
enableLiveAutocompletion: true
});
</script>
ace.js 方法属性调用
editor.getValue();   获取编辑器的值
editor.setValue(value);设置编辑器的值
editor.setTheme("ace/theme/twilight");设置皮肤
//设置编辑配置信息
editor.setOptions({
    enableBasicAutocompletion: true,
    enableSnippets: true,
    enableLiveAutocompletion: true//是否开启智能提示
});
editor.session.setMode("ace/mode/markdown");//设置编辑器语言

PHP如何直接运行PHP代码?

PHP运行PHP代码

一、  eval  函数

此函数运行PHP代码变量

函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false

$symbol = “+”;

$a = 1;

$b = 2;

$c = $a.$symbol.$b;

echo $c.”\n”;

eval(“echo $c;);

此处  直接输出 $c  则是字符串 1+2

eval 方式输出  结果则是  3   相当于 执行了  echo  $a + $b;

注:此函数 官方不建议用,有安全问题

二、流协议加载  

自定义一个流协议  include require 加载协议

function getCode()
{
    return <?php echo www.bubaiso.com’?>’;
}

//自定义协议
class VariableStream
{
    private $string;
    private $position;

    public function stream_open()
    {
        //getCode 接收到参数

        $this->string = getCode();
        $this->position = 0;
        return true;
    }

    public function stream_read($count)
    {
        $ret = substr($this->string, $this->position, $count);
        $this->position += strlen($ret);
        return $ret;
    }

    public function stream_eof()
    {
    }

    public function stream_stat()
    {
    }
}
//注册流协议
stream_wrapper_register(“myStr”, “VariableStream”);

include(“var://);

返回值无法接收

三、 PHP代码 写入文件, 然后用PHP函数调用系统命令

函数  exec  这个函数带返回值

$str = <?php echo www.bubaiso.com’;?>”;
$fileName = run.php’;

//创建文件
$myfile = fopen($fileName, “w”) or die(“Unable to open file!”);

//写入数据
fwrite($myfile, $str);

//关闭
fclose($myfile);

exec(“php $fileName”,$out,$status);
//需要删除的话  这里是执行之后删除文件操作
unlink($fileName);

//$out 如果参数里面有 \n 回车符  返回值是个数组  可以拼接返回数据
$value = ”;
foreach ($out as $v){
    $value .= $v.”\n”;
}

echo $value;

TIOBE 2017 8月编程语言排行榜,Java、C、PHP等前十名分数全部下滑,Crystal成黑马

TIOBE编程语言社区发布了 2017 年 8 月排行榜,和上个月相比,前五名没有变化,Java、C、C++、C# 和 Python 仍然稳定保持在前 5 的位置。不过比例都有不同程度的下降。

尽管 Java 仍然稳居第一,但最值得注意的是 Java 本月跌破13%,今年接下去能否还是能一如既往保住第一的宝座,我们拭目以待。

Go 语言和 7 月份相比从前 10 回落 第 16 名,但总体趋势还算平稳。自从谷歌宣布了安卓开发全面支持 Kotlin 之后,Kotlin 可谓风头正劲,自上个月首次进入前 50 名后,本月更是上升了 7 位,目前排名 41。

2017 年 8 月编程语言排行榜 Top 20 榜单:

在 21-50 名的排行中,本月上幅最为明显的是 Crystal(#32),从第 60 位跃升至第 32 位。Crystal 是一个开源的、类似于 Ruby 语法的编程语言,有开发者称其简直酷毙了。

本月上升趋势较为明显的还有:Clojure(#42),VBScript(#38)和 VHDL(#45)。

第20-50榜单:

Top 10 编程语言 TIOBE 指数走势(2002-2016)

怎么成为大神程序员?大神程序员给的建议

原文标题:我要成为大神程序员,别拦我

作者给每个想成为大神的程序员下面的一些建议:

  • 在数据科学上投入一些精力
    1. 尽量亲自动手去完成事情。你将会有一种直觉,知道如何去处理该事物。
    2. 积累案例,从Excel中标注着自己已获得的数据开始。
    3. 在找到通用办法之前,先找到一种能解决当前问题的办法。
    4. 让算法本身输出调试信息。你应该能够转储每一步的中间结果,并用文本编辑器或是 Web 浏览器手动检查它们。
    5. 不用那么着急写单元测试,因为很多时候连正确的行为自己还无法定义
  • 维护一些大型的,完全不同的项目
    1. 检查文件的大小,找出最核心的业务逻辑
    2. 从主循环调度开始单步调试程序。可以学到很多关于控制流的东西。
    3. 寻找数据结构,特别是做为参数传递到许多函数中的那些。大多数程序具有一个小的关键数据结构集合,找到它们,理解代码的其余部分会变得容易的多。
    4. 写单元测试。这是确认你所理解的代码与真实代码工作方式无误的最好方法。
    5. 移除一些代码,看看什么出问题了。(但不要 check in!)
  • 性能优先的思考
    1. 不要过早优化,除非用户开始抱怨它太慢了
    2. 设立性能指标,不漫无目的的进行评估
    3. 许多性能瓶颈都存在于多个系统交互的部分
    4. 多使用工作
    5. 少做无用功,尽量缓存计算结果,对不精确需求的东西可以进行估算
    6. 不要忽视现实世界的东西,很多算法评估并不理想,但是表现非凡
    7. 有时通过修改数据结构减少内存使用,会给你带来巨大的性能收益
  • 编码的技巧
    1. 做用户要用的功能
    2. 慎重选择依赖的代码库
    3. 小团队可以将问题积累起来,集中火力一次性解决,大型团队尽量不要积累代码问题,学会协作。

      原文链接https://www.ttalk.im/bookmarks/42