gabrielelana / violent-death
生成段错误的本地扩展
Requires
- php: >=5.4.0
- ext-blast: *
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-08 07:23:59 UTC
README
你如何知道你的代码是容错的?你如何验证它不会以一种可怕且无法恢复的方式在发生坏事时崩溃?此包将帮助您模拟您的代码在其生命周期中可能面临的最致命事件。
场景
你想测试你代码的容错性。你想要确保你的代码总是以一致的状态离开这个世界。问题是你在PHP内部可以创建的失败类型有
- 软性:它们或多或少由PHP解释器管理
- 可预测的:它们是由你以同步方式创建的,在现实生活中,当你不期望时会发生真实的事情,但你不能模拟当你正在执行查询或向远程服务器发出请求时的失败
如果你在问自己如何管理这种类型的失败,那么graceful-death 就是你的答案
用法
<?php require __DIR__ . "/../vendor/autoload.php"; // The output will be something like: // // What is this? Should I drink it? // There, I drank it, I will die eventually... // Still there :-) // Still there :-) // … // Still there :-) // [1] 26584 segmentation fault (core dumped) php examples/drink_poison.php echo "What is this? Should I drink it?\n"; drink_poison($msToTakeEffect=500, $msToAgonizeAtMost=1000); // Here we have created a background thread that will wait // at least for 500ms and at most 1500ms before to cause // an horrible death with a segmentation fault echo "There, I drank it, I will die eventually...\n"; while(true) { echo "Still there :-)\n"; usleep(50000); }
它是如何工作的?
为了创建段错误,我们依赖于一个C扩展。为了最终在代码执行其他操作时创建段错误,我们创建一个后台线程,该线程将等待一段时间,然后引发段错误。
注意事项
你需要能够编译PHP扩展,并且需要安装pthread
库。段错误在所有平台上不保证(即对于C编译器、操作系统内核和CPU架构的每个组合),因此它可能不起作用。据我所知,段错误的概念不是ANSI C标准的一部分,因此没有创建真正的段错误的标准方法。
概述
drink_poison($msToTakeEffect, $msToAgonizeAtMost, $probabilityToDie)
它将在至少 $msToTakeEffect
毫秒后,最多在 $msToTakeEffect + $msToAgonizeAtMost
毫秒后引发段错误。这将在后台线程中异步发生,因此在此调用之后,代码可以继续其正常流程
int $msToTakeEffect
:在毒药起效前等待的毫秒数int $msToAgonizeAtMost
:在毒药结束你的代码前最多等待的毫秒数。默认0
int $probabilityToDie
:死亡的概率百分比。介于1
和100
之间的整数。默认100
play_russian_roulette($probabilityToDie)
它可能会创建段错误。概率百分比可以作为参数传递
int $probabilityToDie
:死亡的概率百分比。介于1
和100
之间的整数。默认16
在Blast扩展中: die_violently_after($msToWait)
在Blast扩展中: die_violently($msToWait)
安装
您可以通过composer舒适地安装此包
$ composer require "gabrielelana/violent-death"
但在您需要之前,您需要安装 blast
本地扩展
安装本地扩展
为了确保造成尽可能多的破坏,我们需要人类已知的最具破坏力和最可靠的自我毁灭武器:C语言
$ phphize $ ./configure --with-pthread $ make $ sudo make install
希望现在扩展已经编译并安装。现在你需要将 extension=blast.so
添加到你的 php.ini
文件中。运行以下命令,如果你看到绿色条,那么你可以继续了
$ composer install $ vendor/bin/phpunit
自我推广
如果你喜欢这个项目,那么请考虑以下