什么工具可以分析php源代码,[精选]PHP性能分析工具,你在用哪一个?

PHP性能分析工具,小编一直都在用这个:Xhprof, 今天给大家介绍一下如何安装与如何使用,注意事项等!也许你会用得着的。

什么是Xhprof

Xhprof是一个轻量级的分层性能测量分析器。在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图。它在报告、后期处理阶段计算了独占的性能度量,例如运行经过的时间、CPU 计算时间和内存开销。

Xhprof包含了一个基于 HTML 的简单用户界面(由 PHP 写成),可以方便地浏览性能分析报告,这对理解代码执行结构常常很有帮助。

安装

Xhprof是PHP的一个扩展,所以只需要按照PHP扩展的编译安装方法来安装即可。

1、下载扩展包

支持PHP 7+的Xhprof扩展包:https://github.com/longxinH/xhprof

wget https://github.com/longxinH/xhprof/archive/v2.2.0.tar.gz

2、解压编译

PHP扩展编译三部曲:phpize、configure、make。

$ tar xzf xhprof-2.2.0.tar.gz

$ cd xhprof-2.2.0/extension

$ /usr/local/services/php7/bin/phpize

$ ./configure --prefix=/usr/local/services/php7/lib/php/extensions/no-debug-zts-20160303 --with-php-config=/usr/local/services/php7/bin/php-config

$ make然后就可以在当前的modules目录下看到编译生成的so文件,将它拷贝到扩展目录。

注:安装autoconf库:yum -y install autoconf3、配置php.ini在php的配置文件中添加两行配置,并重启php-fpm:extension=xhprof.so

xhprof.output_dir=/data/release/xhprof_project/output

其中xhprof.output_dir用于指定存储xhprof分析数据的目录。

二、创建Xhprof项目

1、创建目录

mkdir /data/release/xhprof_project

2、将相关文件拷贝到目录下

cp -r /data/software/xhprof-2.2.0/xhprof_html /data/release/xhprof_project/

cp -r /data/software/xhprof-2.2.0/xhprof_lib /data/release/xhprof_project/

3、添加nginx访问配置

server {

listen  80;

server_name xhprof.report.com;

root /data/release/xhprof_project/xhprof_html;

index index.php index.html;

location ~* \.php$ {

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_pass  127.0.0.1:9000;

fastcgi_index index.php;

}

}

三、如何使用

在PHP脚本中使用的模式如下:

// 开始分析

xhprof_enable();

// 你的代码

// 停止分析

$xhprof_data = xhprof_disable();

// 导入两个库文件

$XHPROF_ROOT = "/data/release/xhprof_project";

include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";

include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

// 保存这次分析的结果数据

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

// 查看地址

echo "http://xhprof.report.com/index.php?run=$run_id&source=xhprof_foo"

默认只会分析代码的耗时,可以通过传参控制是否分析代码的memory和CPU性能数据:

xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

在浏览器打开输出的地址,可以看到如下结果分析页:

ba2544b67ebf9bfb345c88e305e66c61.png图中的表格给出了代码的性能分析数据,分别表示:Funciton Name:函数名

Calls:调用次数

Calls%:调用占比

Incl. Wall Time (microsec):函数运行时间(包括子函数)

IWall%:函数运行时间(包括子函数)占比

Excl. Wall Time(microsec):函数运行时间(不包括子函数)

EWall%:函数运行时间(不包括子函数)占比

点击页面中[View Full Callgraph]链接,可以绘制出一张可视化的性能分析图。如果点击后报错failed to execute cmd:" dot -Tpng". stderr:sh:dot:command not found,可能是缺少依赖库graphviz,安装即可。

四、在Laravel项目中使用

方法一:直接使用

直接嵌在接口函数的开始和结束处:

// API接口

public function testApi(Request $request){

// =============API开始处================

xhprof_enable();

// =====================================

for ($i=0; $i<5; $i++) {

$this->bar($i);

$len = strlen("songlee");

}

// =============API结束处================

$xhprof_data = xhprof_disable();

$XHPROF_ROOT = "/data/release/xhprof_project";

include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";

include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new \XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

// =====================================

return json_encode(true);

}

// 私有方法

private function bar($num){

if ($num > 0) {

$this->bar($num - 1);

}

}

这种方法显然是最麻烦的。

方法二:封装Helper

封装成Helper放在app/Helpers目录下,使用XhprofHelper::beginXhprof()、XhprofHelper::endXhprof()方法嵌入接口。

XhprofHelper如下:

namespace App\Helpers;

class XhprofHelper

{

const XHPROF_ROOT = '/data/release/xhprof_project';

/**

* 开始分析

* @return mixed

*/

static public function beginXhprof(){

xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

return ;

}

/**

* 停止分析

* @return mixed

*/

static public function endXhprof(){

$xhprof_data = xhprof_disable();

// 导入两个库文件

include_once self::XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";

include_once self::XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

// 保存这次分析的结果数据

$xhprof_runs = new \XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "api_demo");

return $run_id;

}

}

然后可以在代码中使用:

// API接口

public function testApi(Request $request){

XhprofHelper::beginXhprof();

for ($i=0; $i<5; $i++) {

$this->bar($i);

$len = strlen("songlee");

}

XhprofHelper::endXhprof();

return json_encode(true);

}

方法三:在入口文件index.php中注入

将方法二中封装的 XhprofHelper 文件放到入口文件所在的public目录下,然后在index.php文件中加几行代码:

/*

|--------------------------------------------------------------------------

| Create The Application

|--------------------------------------------------------------------------

|

*/

$app = require __DIR__.'/../bootstrap/app.php';

/*

|--------------------------------------------------------------------------

| Run The Application

|--------------------------------------------------------------------------

|

*/

require_once './XhprofHelper.php';

\MyHelpers\XhprofHelper::beginXhprof();

$app->run();

\MyHelpers\XhprofHelper::endXhprof();

但是这种方式分析的不仅仅只是业务代码,而是从Laravel项目启动到调用结束为止,整个调用链很长。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 PHP 来创建一个 SQL 注入漏洞分析工具。具体来说,你可以使用 PHP 的 PDO (PHP Data Objects) 扩展来创建一个工具,用于检测网站是否存在 SQL 注入漏洞。 下面是一个简单的示例代码,可以帮助你开始创建这样的工具: ``` <?php // 连接到数据库 $db = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password'); // 构建查询语句 $query = "SELECT * FROM users WHERE username = :username AND password = :password"; // 使用预处理语句防止 SQL 注入 $stmt = $db->prepare($query); // 绑定参数 $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); // 执行查询 $stmt->execute(); // 获取结果 $result = $stmt->fetchAll(); // 如果有结果,则登录成功;如果没有,则登录失败 if (count($result) > 0) { // 登录成功 } else { // 登录失败 } ``` 在这段代码中,我们使用了 PDO 的预处理语句功能来防止 SQL 注入。预处理语句是一种特殊的 SQL 语句,它允许我们在执行之前预先准备好 SQL 语句,并绑定参数,而不是直接把参数拼接到 SQL 语句中。这样可以有效地防止 SQL 注入攻击,因为即使攻击者尝试注入恶意代码,也无法通过 ### 回答2: PHP 是一种常用的服务器端脚本语言,用于开发动态网页和应用程序。在开发过程中,我们可能会遇到安全漏洞,其中之一是 SQL 注入漏洞。为了提高系统的安全性,我们可以开发一个 SQL 注入漏洞分析工具,以下是一个概述: 首先,我们需要理解 SQL 注入漏洞的原理。SQL 注入是一种利用用户输入来篡改 SQL 查询语句的方法,从而达到非法操作数据库或绕过权限验证的目的。我们的分析工具需要能够检测和识别潜在的注入点。 其次,我们需要编写一个函数来处理用户输入。这个函数应该对输入进行过滤和转义,以防止恶意输入被解释为 SQL 代码。PHP 中的 mysqli_real_escape_string() 函数可以用于转义输入。 接下来,我们可以开发一个代码扫描器,在源代码中查找潜在的 SQL 注入漏洞。我们可以使用 PHP 自带的代码解析器来解析 PHP 文件,然后查找可能的漏洞点,如未经过滤的用户输入直接拼接到 SQL 查询语句中等。 另外,我们可以添加一个日志记录功能,将检测到的潜在漏洞信息记录在日志文件中,方便开发者查看和修复。 最后,我们可以开发一个简单的界面,让用户能够输入待分析源代码或文件,并提供分析结果的展示。 总结来说,开发一个 SQL 注入漏洞分析工具可以帮助开发者检测潜在的漏洞,并提供相应的修复建议。这种工具可以在开发过程中及时发现潜在的安全隐患,提高系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值