totten / pogo
运行具有内联依赖的PHP脚本
v0.5.0
2022-11-05 02:29 UTC
Requires
- php: >=7.1.8
- civicrm/composer-downloads-plugin: ~3.0
- lesser-evil/shell-verbosity-is-evil: ~1.0
- symfony/console: ~4.0
- symfony/filesystem: ~4.0
- symfony/yaml: ~4.0
Requires (Dev)
- phpunit/phpunit: ~5.0
README
Pogo 允许您编写使用PHP库(由 composer
/packagist
提供)的小型PHP脚本...但它 不 需要您设置专门的文件夹、项目或存储库。要使用依赖项,只需在脚本中添加一个小型pragma即可。例如
#!require symfony/yaml: ~4.4
这使得使用PHP库进行粘合脚本、一次性脚本、快速实验等变得更加容易。
示例
让我们选择一个需要几个库的小任务——假设我们想从一个源代码文件(*.php
、*.json
等)生成漂亮的PDF。我们需要一个漂亮的打印器(scrivo/highlight.php)和一个PDF生成器(dompdf/dompdf)。
快速浏览每个库的README,可以发现一些简介片段。我取了这些片段,添加了 #!require
pragmas,并在 $html
变量上进行了一点即兴创作。这变成了一个小脚本,code2pdf.php
<?php $code = file_get_contents('php://stdin'); #!require scrivo/highlight.php: ~9.15 $hl = new \Highlight\Highlighter(); $hl->setAutodetectLanguages(['php', 'css', 'yaml', 'json', 'js']); $highlighted = $hl->highlightAuto($code); $html = sprintf('<link rel="stylesheet" href="file://%s"/>', \HighlightUtilities\getStyleSheetPath('sunburst.css')); $html .= sprintf("<pre><code class=\"hljs %s\">%s</code></pre>", $highlighted->language, $highlighted->value); #!require dompdf/dompdf: ~0.8.3 $dompdf = new \Dompdf\Dompdf(); $dompdf->loadHtml($html); $dompdf->setPaper('A4', 'landscape'); $dompdf->render(); $dompdf->stream();
要在CLI中运行此脚本,只需使用
pogo code2pdf.php
当然,此脚本期望一些内容作为输入(例如 myfile.yml
)并生成PDF作为输出(例如 myfile.pdf
),因此更现实的命令可能是
cat myfile.yml | pogo code2pdf.php > myfile.pdf
就这样!
更多示例
在 examples 文件夹中,有其他库和框架的几个示例,例如 ReactPHP、Symfony Console、Clippy 和 Robo。每个示例都是一个可执行的程序。
动机
我的日常工作中大部分都是在PHP、JS和bash中。偶尔需要一点粘合代码,而我发现自己为了避免这个任务而避开PHP...因为使用PHP中的库仍然需要一些管理任务。《pogo》是一个实验,旨在减少这种管理任务。只需创建一个 .php
文件并运行它。
文档
- 安装:系统要求和安装步骤
- Composer集成:如何使用
pogo
- 执行:通过
pogo
调用脚本的方法 - 编译到PHAR:如何使用
pogo
创建phar
- 常见问题解答:常见问题
- Pragmas:所有支持pragma的列表
- 待办事项:应该完成的一些杂项
相关
- Clippy:针对脚本优化的
symfony/console
变体。