PHP 执行系统外部命令(3):通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]

PHP下通过exec获得计算机的唯一标识的代码,可获得CPU,网卡 MAC地址信息。 复制代码代码如下: //获取电脑的CPU信息 function OnlyU(){ $a = ”; $b = array(); if(function_exists(‘exec’)){ if(mailto:!@exec( /all”,$b)){ return false; } }elseif(function_exists(‘system’)){ ob_start(); if(mailto:!@system( /all”)){ return false; }else{ } $b = ob_get_contents(); ob_end_clean(); $b = explode(“n”,$b);//print_r($b); array_pop($b); }else{ return false; } $all = sizeof($b); for($i = 0; $i < $all; $i++){ if(strpos($b[$i],”Description”) !== false){ if(strpos($b[$i+1],”Physical Address”) !== false){ […]

PHP 执行系统外部命令(2): shell_exec, exec, passthru, system详细使用介绍

PHP 为执行外部命令提供大量函数,其中包括 shell_exec()、exec()、passthru() 和 system()。这些命令是相似的,但为您运行的外部程序提供不同的界面。 所有这些命令都衍生一个子进程,用于运行您指定的命令或脚本,并且每个子进程会在命令输出写到标准输出 (stdout) 时捕捉它们。 shell_exec() shell_exec() 命令行实际上仅是反撇号 (`) 操作符的变体。如果您编写过 shell 或 Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。例如,清单 1 显示了如何使用反撇号在当前目录中获取每个文本(.txt)的单词计数。 清单 1. 使用反撇号计算单词数量 复制代码代码如下: #! /bin/sh number_of_words=`wc -w *.txt` echo $number_of_words #result would be something like: #165 readme.txt 388 results.txt 588 summary.txt #and so on….

PHP 执行系统外部命令(1): system() exec() passthru()

PHP作为一种服务器端的脚本语言,象编写简单,或者是复杂的动态网页这样的任务,它完全能够胜任。但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功倍。 区别: system() 输出并返回最后一行shell结果。 exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。 相同点:都可以获得命令执行的状态码 demo: 复制代码代码如下: //system(‘dir’); // exec (‘dir’); // passthru (‘dir’); // echo `dir`;

如何用PHP实现通过Web执行C/C++程序

一、简介 如果你对Unix/Linux有所了解的话,你应该知道他们大都自带了C和C++的编译器,分别是GCC和G++。Unix在程序安装及Make等许多地方使用到了这些编译器。利用一些控制台命令,C++和PHP。我将向你介绍怎样生成一个完整的C++程序例子,他可以在用PHP程序来执行,并能获得相应的输出结果。 我将先生成C++程序代码,并编译它,然后讨论我们将如果通过使用PHP的函数passthru来执行这个程序。从某种意义上来说,这边文章给我们提供一种通过Web页面来访问一般程序的方法。 为了能更好的理解这篇文章,你应该有一台运行着apache和最新版本php的unix/Linux服务器。同时也应该掌握C++, unix控制台命令,当然一些PHP的编程经验也是必需的。 二、编写一个C++程序 例如,我们可以写一个能够通过命令行还接收参数的C++简单程序,并命名为Sampleapp.然后我们能够按照下面的方式给他传递三个不同的参数 :

Firefox Throttle,模拟不同网速测试你的程序

不同网速测试程序运行的必要性 你是否曾经想过自己的网站或者其他应用程序在一个缓慢的网络环境中的运行状况? 如果你用过flash制作动画,你会发现在调试的时候,有个速率选项,即测试动画在不同网速中的加载或者播放状况。这是一个很好的并且是十分有必要的模拟测试,因为网络环境各异,不同网络环境中,程序的运行是有可能不尽相同的,有的差别还十分之大。 我就一直想知道自己网站在各种网速下的加载速度究竟是怎样的,但是一直不知道如何检测。所以至今为止我也不清楚网站在512k网速、2m网速、4m网速、10m网速下是怎样加载的,在各种网速下网页的加载时间是多少也无从得知。 Firefox Trottle模拟不同网速测试你的程序 今天无意中发现一个插件:Firefox Throttle,这是一个Firefox的插件,该插件可以模拟不同网速测试你的程序。这个插件能“不费吹灰之力”的让你模拟各种不同网速的因特网连接,你可以在各种网速条件下观察你的应用的表现。 Firefox Throttle是一个能够让你控制上传/下载速率、监视当前带宽使用的Firefox扩展工具。它能让你限制本地网络连接。很酷!下面的就是这个插件在运行时的截图。 这个插件能在其状态栏里显示当前带宽使用率。你可以根据这些指示及时的开/关限流。 你知道你的网站在512k的网速里打开需要多长时间吗?赶快用这个插件测试测试吧。

PHP实现前台同步显示后台任务进度

  一次批量发送几千条短信。 如果直接在后台循环执行虽然可行,但是前台操作用户就只能坐着空等,完全看不到后台执行结果,所以考虑能不能有一种办法可以在php后台执行过程中同时在前台显示后台执行任务进度呢。 但是这里遇到一个问题,一般情况下php都是在后台任务执行完毕后输出结果到浏览器,在执行过程不会给浏览器发送任何数据。这个时候想到了可以使用php的flush函数,可以使用flush函数在程序执行中强制输出; 尝试以下代码: 1 2 3 4 5 6 7 8 <?php for ($i = 1; $i <= 50; $i++) { ob_flush(); flush(); echo $i.'<br/>’; sleep(rand(0, 1)); } ?> 网上大都这样的例子,看代码应该会每隔一秒输出一个数字。但是大家实际测试下情况并非如此,而是和没用flush一样,一次性输出1-50; 在这里请大家参考下鸟哥博客上的一篇文章http://www.laruence.com/2010/04/15/1414.html( 深入理解ob_flush和flush的区别); 其中有一段话: 有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。 甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到 </table> 标记之前,不会显示出整个表格。 一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这 些浏览器显示页面内容。 所以找到问题所在了,不是因为flush没有起作用,而是服务器或者浏览器在内容不到一定的字节数(甚至是没有遇到html标记)同样会进行缓存,找到问题所在后尝试以下代码; 1 2 3 4 5 6 […]

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生 成22MB数据。整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条tweet从Lady Gaga手中呈现到她3100万粉丝的屏幕上。当下Twitter系统的规模及强大的吞吐量确实惹人艳羡,然而在出道之初Twitter也只是个奋斗在 RoR上的小站点而已,下面就一览Twitter如何完成从RoR到以服务为核心的系统架构蜕变。 Twitter系统的一些特性: 1. 当下的Twitter已不满足于Web Ap的现状。Twitter期望成为一组API,驱动世界范围内的移动客户端,成为世界级最大的实时事件链之一。 2. Twitter主导的是消费机制,而不是生产机制。每秒读取timeline的操作就会产生30万次的查询,而每秒的写入请求只有6000左右。 3. 离群值,拥有巨量粉丝的个体开始变得普遍,大量粉丝拥有者发送tweet时会因为大量的扩散而变得缓慢。Twitter试图将这个延时控制在5秒 内,但是也并非一直生效,特别是名人们发送tweet以及相互转发变得越来越频繁后。这样就导致转发的内容可能比原始内容先一步到达共同粉丝的界面上,这 样一来,就高价值用户来说,Twitter的主要精力必须从写操作转移到读操作上。 4. 使用Redis集群处理Home Timeline(首页时间轴,包含了众多关注者的tweet),最大条数为800。 5. 从你关注的人和你点击的链接,Twitter可以获知一系列关于你的信息。 6. 用户最关心的是tweet内容,然而大部分的基础设施却和这些内容不相关。 7. 对如此复杂堆栈进行性能追踪所需求的监视和调试系统往往非常复杂,同样旧决策的影响会不时的出现。

必须了解的session的本质- 续篇1 – 固定会话ID

随着php语言的流行,出现了无数的使用php开发的web应用程序,这吸引了大批的攻击者开始寻找,攻击有安全漏洞的php应用程序。 所以,程序的安全问题得到了越来越多的关注。做为一个专业的php开发者,必须要重视安全问题。 接下来,我们来谈谈攻击session的方法之一 – 固定会话ID。 这种攻击方式的核心要点就是让合法用户使用攻击者预先设定的session ID来访问被攻击的应用程序,一旦用户的会话ID被成功固定,攻击者就可以通过此session id来冒充用户访问应用程序(只要该session id还是有效的,也就是没有被系统重新生成或者销毁)。 通过这种方式,攻击者就不需要捕获用户的Session id(该种方式难度相对稍大)。 当然,以上的解释的前提是攻击者也知道session name了。我们简单讲个概念啊,下面提到的session标识符,php中默认的格式就是PHPSESSID=1234。等号前面的是session name, 后面的是session id。   固定会话ID 在我看来,Session的安全性应该说是最重要的,也是最复杂的。对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,进而保存到数据层。 然而,为了维持来自同一个用户的不同请求之间的状态, 客户端必须要给服务器端发送一个唯一的身份标识符(Session ID)。 很显然,这和前面提到的安全原则是矛盾的,但是没有办法,http协议是无状态的,为了维持状态,我们别无选择。 可以看出,web应用程序中最脆弱的环节就是session,因为服务器端是通过来自客户端的一个身份标识来认证用户的, 所以session是web应用程序中最需要加强安全性的环节。 基于session的攻击有很多种方式。大部分的手段都是首先通过捕获合法用户的session, 然后冒充该用户来访问系统。也就是说,攻击者至少必须要获取到一个有效的session标识符,用于接下来的身份验证。 据我所知,攻击者至少可以通过以下三种方式来获取一个有效的session标识符: 预测 捕获(劫持) 固定 预测这种方式,也就是攻击者需要猜测出系统中使用的有效的session标识符,有点类似暴力破解。 php内部session的实现机制虽然不是很安全,但是关于生成session id的关节还是比较安全的,这个随机的session id往往是极其复杂的并且难于被预测出来,所以说,这种攻击方式基本上是不太可能成功的。 捕获一个有效的session标识符 – 这种方式使用的就比较普遍了,很多的攻击类型都是使用这种方式来获取session标识符。当session标识符存储在浏览器的cookie中的时候,如果浏览器有漏洞的话(比如早期的IE),就就可能暴露其中的session标识符信息。当通过url参数来传递session标识符的话,那就更加容易暴露这个标识符,有很多方法可以捕获存在于url中的session标识符。所以,一般都是通过cookie来存储传递session标识符,尽管也有可能因为浏览器的漏洞而被攻击,但是相比通过url来传递,cookie这种方式要安全的多。 Session固定这种方式,简单来讲,攻击者要想办法,让某个用户通过他预先选择的session标识符来访问系统。一旦系统接收到了这个用户的请求,并且使用用户传递过来的session标识创建了会话,攻击者就可以使用这个session标识了。这种方式是最简单的获取有效的session标识符,但是不一定能成功,因为有的系统发现在服务器端找不到对应该session标识符的数据的话,会自动重新创建一个session标识符,并且保存到客户端。

必须了解的Session的本质

有一点我们必须承认,大多数web应用程序都离不开session的使用。这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制。我们先简单的了解一些http的知识,从而理解该协议的无状态特性。然后,学习一些关于cookie的基本操作。最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行。 我想大多数的php初级程序员一定会认为php默认的session机制的安全性似乎是有一定保障的,事实恰好相反 – php团队只是提供了一套便捷的session的解决方案提供给程序员使用,至于安全性的话,应该由程序员来加强,这是应用程序开发团队的责任。因为,这里面的方法很多,可以这么说吧,没有最好,只有更好。攻击的方式在不断变化,防守方也需要不断变招,所以,我个人认为php团队的做法还是比较明智的。 无状态性 Http是一种无状态性的协议。这是因为此种协议不要求浏览器在每次请求中标明它自己的身份,并且浏览器以及服务器之间并没有保持一个持久性的连接用于多个页面之间的访问。当一个用户访问一个站点的时候,用户的浏览器发送一个http请求到服务器,服务器返回给浏览器一个http响应。其实很简单的一个概念,客户端一个请求,服务器端一个回复,这就是整个基于http协议的通讯过程。 因为web应用程序是基于http协议进行通讯的,而我们已经讲过了http是无状态的,这就增加了维护web应用程序状态的难度, 对于开发者来说,是一个不小的挑战。Cookies是作为http的一个扩展诞生的,其主要用途是弥补http的无状态特性,提供了一种保持客户端与服务器端之间状态的途径,但是由于出于安全性的考虑,有的用户在浏览器中是禁止掉cookie的。这种情况下,状态信息只能通过url中的参数来传递到服务器端,不过这种方式的安全性很差。事实上,按照通常的想法,应该有客户端来表明自己的身份,从而和服务器之间维持一种状态,但是出于安全性方面的考虑,我们都应该明白一点 – 来自客户端的信息都是不能完全信任的。 尽管这样,针对维持web应用程序状态的问题,相对来说,还是有比较优雅的解决方案的。不过,应该说是没有完美的解决方案的,再好的解决方案也不可能适用所有的情况。这篇文章将介绍一些技术。这些技术可以用来比较稳定地维持应用程序的状态以及抵御一些针对session的攻击,比如会话劫持。并且你可以学习到cookie是怎样工作的,php 的session做了那些事情,以及怎样才能劫持session。

linux查看多核负载

1. Linux下,如何看每个CPU的使用率: #top -M 之后按下数字1. (或者top之后按1也一样)则显示多个CPU 的信息,和内存信息: [root@testpc ~]# top -M top – 15:38:40 up 2 days,  2:05,  2 users,  load average: 0.00, 0.00, 0.00 Tasks: 138 total,   1 running, 137 sleeping,   0 stopped,   0 zombie Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st Cpu2  […]