创建 PHP 控制台工具时的 4 个有用技巧

你好。
我是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 -r "chmod('/path/to/hoge', 777)" # 您可以使用 ls 命令立即查看结果!


 我本想写成 `chmod 777 /path/to/hoge`,但权限实际上并没有改变。
我阅读了文档并尝试查找答案,但仍然没有找到。

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

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

 
就是这样。

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
1,108
X Facebook 哈特纳书签 口袋

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。