totten/pogo

运行具有内联依赖的PHP脚本

v0.5.0 2022-11-05 02:29 UTC

This package is auto-updated.

Last update: 2024-09-15 03:50:00 UTC


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 文件夹中,有其他库和框架的几个示例,例如 ReactPHPSymfony ConsoleClippyRobo。每个示例都是一个可执行的程序。

动机

我的日常工作中大部分都是在PHP、JS和bash中。偶尔需要一点粘合代码,而我发现自己为了避免这个任务而避开PHP...因为使用PHP中的库仍然需要一些管理任务。《pogo》是一个实验,旨在减少这种管理任务。只需创建一个 .php 文件并运行它。

文档

相关

  • Clippy:针对脚本优化的 symfony/console 变体。