PHP 命令行完全解读
STDIN 是从 Web 编程而来的最有趣更改,因为它向您展示了真正的用户输入而不是使用表单或其他基于浏览器的方法。尝试以下命令:
#!/usr/bin/php -q
<?php
$file = file_get_contents("php://stdin", "r");
echo $file;
?>
这段代码的工作原理应当很像 cat,回转提供给它的所有输入。但是,这时它还不能接受参数。
第一个 PHP shell 脚本
很好 —— 从这里开始事情会变得非常有趣。运用到目前为止学到的简单知识,您可以创建简单而有用的 shell 脚本。在文本编辑器中键入以下代码。
清单 2. randomize-lines
#!/usr/bin/php -q
<?php
$lines = split("\n", file_get_contents("php://stdin", "r"));
shuffle($lines);
foreach ($lines as $line) {
if ($line !== "") {
echo "$line\n";
}
}
?>
现在,只需一些快速检查即可运行这个脚本:
确保 hashbang(第一行,以 #! 开头)被设为先前描述的 PHP 可执行文件的位置
保存文件
使用 chmod 添加可执行权限
运行程序
注:randomize-lines 将完全执行所期望的操作:它打乱键入的输入内容行并将它们以不同的顺序返回回来。这项功能可以颇具价值地填补 shell 脚本库中的空白。
作为此脚本的应用程序示例,您可以使用它为音乐或视频播放器动态生成随机播放列表。例如,要打乱 XMMS 播放列表,请尝试:
./randomize-lines < .xmms/xmms.m3u > temp
mv temp .xmms/xmms.m3u
现在,再升一级。
命令行参数
实际命令行程序使用参数。同样,就像 C 语言和其他类似语言一样,您可以为此目的而使用 argv 和 argc。特别是,argv 是程序的参数数组,第一个参数是程序本身。使用这个函数,构建根据给定参数从文件或用户输入读取数据的程序就不难了。例如,请查看以下代码。
清单 3. randomize-lines-w-args
#!/usr/bin/php -q
<?php
array_shift($argv);
if (count($argv) == 0) {
$argv[0] = "php://stdin";
}
foreach ($argv as $file) {
$lines = split("\n", file_get_contents($file, "r"));
shuffle($lines);
foreach ($lines as $line) {
if ($line !== "") {
echo "$line\n";
}
}
}
?> ?>
现在您拥有这样一个程序:完全运行的 CLI PHP 程序,它可以接受用户输入,也可以接受文件列表并随机排列每个文件的相关内容。
结束语
最佳工具通常都不是期望使用的那一个工具。在命令行接口中使用PHP,会发现它已经成为 shell 脚本工具新宠。
技术无忧.net










文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面