4 个技巧助你创建 PHP 控制台工具

大家好,
我是Mandai,Wild团队负责开发工作的成员。

我们常常会萌生创建一个简单的工具来自动化繁琐任务的冲动,对吧?这
可以称之为“一时兴起的创作”,但你可能也经历过,这类工具通常功能固定,你根本不会特意打开浏览器去运行它们。所以,我们
甚至想把“打开浏览器”这个步骤也自动化,对吧?

在这种情况下,您可以将其转换为控制台工具并设置定时运行,但 PHP 本身也可以用于控制台应用程序,因此我收集了一些实用技巧。请
注意,我主要只在 Linux 系统上测试过这些技巧。

 

获取主目录路径

说到控制台,我们指的是 shell 脚本,而对于
shell 脚本,可以使用“~”获取主目录的路径。

如果在 PHP 中使用类似的路径尝试加载用户主目录中的文件,则会发生错误。

<?php echo file_get_contents('~/hogehoge.txt'); # 上記のソースを実行すると、以下のエラーが発生 PHP Warning: file_get_contents(~/hogehoge.txt): failed to open stream: No such file or directory in Command line code on line 1

 
因此,您可能会想获取执行用户并将其与 /home 连接起来,并尝试各种方法来创建路径,但
实际上主目录路径存储在超全局变量 $_SERVER 中。

<?php echo file_get_contents($_SERVER['HOME']. '/hogehoge.txt'); # 上記のソースを実行すると、テキストファイルの中身が表示される hogehoge

 
当你想把配置文件放在用户主目录下时,这非常有用,类似于 bash 的
工作方式。但有一个盲点(或者说,至少对我来说是盲点):即使是在控制台执行,数据也会存储在 $_SERVER 变量中。
文档这就像一个隐藏参数,
(正文后面的注释里有简要提及。)

 

如何接受论点

根据参数改变行为在命令行世界中很常见,所以当然在 PHPCLI 中也可以做到。
然而,即使它是一个超全局变量……

  • 不以_开头
  • 未定义(大写)
  • 是c吗?是v吗?请明确一下!

因此,我无法立即记住这些词语,如果一段时间不用它们,我就会忘记它们。

存储运行时传递的参数$argv

另外,如果您想将带有换行符的字符串传递给 $argv,将字符串用 "" 或 ' 括起来即可使其按预期工作。

例如,准备一个源,该源直接使用 var_dumps 输出以下参数。

<?php var_dump($argv);

 
接下来,让我们运行源代码,并将包含换行符的字符串作为参数。

php test.php hogehoge '我会添加一个换行符' # 运行上述命令后,将显示以下内容: array(3) { [0] => string(8) "test.php" [1] => string(8) "hogehoge" [2] => string(22) "我会添加一个换行符" }

 
看来很多事情都会取得进展。

 

为错误信息添加颜色(+额外奖励)

如果你想找点乐子,不妨试试给错误信息着色?

在 Linux 系统中,你可以让回显的字符串显示彩色,并更改背景颜色。

使用相同的技术即可轻松实现这一点。

<?php # hogehogeを赤字で表示するコード echo "\e[31mhogehoge\e[m"; echo "\033[31mhogehoge\033[m";

 
以上两个代码都以红色显示“hogehoge”,但乍一看很难理解它们的含义,所以
让我们来详细解释一下。

<?php # hogehogeを赤字で表示するコード echo "\e[31m". "hogehoge". "\e[m"; echo "\033[31m". "hogehoge". "\033[m";

 
让我们把“hogehoge”部分与其他部分分开。然后,我们可以大致看出一个规律。似乎
应该用“\e[**m”或“\033[**m”将要更改颜色的字符串括起来。

剩下的唯一部分是开头的“31”,它
指定了文本颜色。
我们将“31”拆分为“3”和“1”,其中“3”指定文本颜色,“1”指定红色。
因此,要将文本颜色更改为其他颜色,只需将“1”更改为“2”,依此类推。

我提到过,“31”中的“3”指定文本颜色,但如果变成“4”,则指定背景颜色

<?php echo "\e[41m". "hogehoge". "\e[m"; echo "\033[41m". "hogehoge". "\033[m";

 
上述代码会产生红色背景。

如果要同时更改文本颜色和背景颜色,请将它们并排放置,并用分号分隔。

<?php echo "\e[31;41m". "hogehoge". "\e[m"; echo "\033[31;41m". "hogehoge". "\033[m";

 
上面的代码只会显示一个红色矩形,不会显示任何文字,但它能达到目的。

至于更高级的功能,您还可以使用此设置来添加下划线、加粗、反转文本和背景颜色以及使文本闪烁。

<?php echo "\e[31;1m". "hogehoge". "\e[m"; // 赤い太字で表示 echo "\e[31;42;1m". "hogehoge". "\e[m"; // 赤い太字を緑の背景で表示 echo "\e[7m". "hogehoge". "\e[m"; // 文字色と背景色を反転して表示

 
倒置和其他功能不太可能造成眼睛疲劳,因此您可以单独使用它们。

 

当您只想快速检查特定代码时,可以使用以下命令选项

在创建控制台工具时,您
有时可能会遇到一些小问题,例如执行结果的格式,或者某种特定的代码编写方式是否会导致错误。
在这种情况下,我想介绍一下 PHP 的“-r”选项,您可以快速试用一下。

例如,假设你想更改权限。
你可以使用 chmod 函数快速更改,但如果你想测试它是否有效,则无需编写测试代码;你可以直接在命令行中编写 PHP 代码。我
喜欢它的一点是,你甚至不需要 PHP 的起始标签“php”。

php -r "chmod('/path/to/hoge', 777)" # 您可以使用 ls 命令立即查看结果!

 
我本想用类似 `chmod 777 /path/to/hoge` 的方式来写,但权限实际上并没有改变。我正在
阅读文档并反复尝试,试图找出问题所在,找到正确的解决方案。

编辑文件 → 保存 → 转到控制台 → 运行 php 文件 → (´・ω・`)

说实话,一遍又一遍地重复这个过程很麻烦,所以如果你能像上面的例子那样轻松地提取一些东西并进行测试,那么从命令行执行它可能更省力。

 
就这样。

如果您觉得这篇文章对您有帮助,请点个“赞”!
0
加载中...
0票,平均分:0.00/10
1,152
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

万代洋一

我的主要工作是开发社交游戏的Web API,但幸运的是,我也有机会参与其他各种任务,包括市场营销。
我在Beyond中的图像版权采用CC0协议。