nikic / include-interceptor
拦截 PHP 包含文件
v0.1.2
2021-11-27 21:03 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^7 || ^8
This package is auto-updated.
Last update: 2024-09-13 09:33:52 UTC
README
一个拦截 PHP 包含文件的库。它是 icewind1991/interceptor 的分支。
composer require nikic/include-interceptor
用法
use Nikic\IncludeInterceptor\Interceptor; $interceptor = new Interceptor(function(string $path) { if (!wantToIntercept($path)) { return null; } return transformCode(file_get_contents($path)); }); $interceptor->setUp(); // Start intercepting includes require 'src/foo.php'; $interceptor->tearDown(); // Stop intercepting includes
拦截钩子遵循以下约定
- 只有当包含的文件存在时才会调用。
- 传递的
$path
是真实路径。 - 如果钩子返回
null
,则不执行拦截。 - 如果钩子返回一个字符串,这些字符串被视为文件的转换内容。
为了方便,提供了一个实现文件和目录白名单和黑名单的 FileFilter
。传递给 addBlackList()
和 addWhiteList()
的路径应该是真实路径。
use Nikic\IncludeInterceptor\Interceptor; use Nikic\IncludeInterceptor\FileFilter; $fileFilter = FileFilter::createAllWhitelisted(); // Start with everything whitelisted $fileFilter->addBlackList(__DIR__ . '/src/'); // Blacklist the src/ directory $fileFilter->addWhiteList(__DIR__ . '/src/foo.php'); // But whitelist the src/foo.php file $interceptor = new Interceptor(function(string $path) use ($fileFilter) { if (!$fileFilter->test($path)) { return null; } return transformCode(file_get_contents($path)); }); $interceptor->setUp(); require 'src/foo.php';