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
