CLI PHP 的优点

多年以来,我一直都在应用不确定的工程师职责定义。我个人认为,工程师就是使用工具来实现与该工具最初开发目的无关的功能。虽然这种想法并不总是正确,但当您认真考虑它时,将发现大多数创新和发明确实来自于通过以前从未考虑过的方法使用工具。

想象一下我是多么惊讶,然后,我忽然想到一个主意:使用我的老朋友 PHP,作为命令行工具,它对于 Web 页面来说一直都非常可靠。我绝对不是这样做的第一人,但是这对我来说的确是全新的想法。

当然,只是可以 在命令行中使用 PHP 当然不是这样做的最佳理由。但是,您在第一次开始以这种方式用 PHP 进行试验时可能很快就会发现几个令人兴奋的惊喜。首先,调试现有脚本将变得前所未有地简单。由主要输出和极少逻辑组成的 PHP 程序都将变得令人难以置信地简单。除此之外,您还可以使用所有 PHP 知识来完成以前从未想过使用 PHP 完成的任务。事实上,确实没有任何事能阻止您使用 PHP 作为几乎所有给定编程项目的全能王。

产生兴趣了?很好,让我们开始着手并看看您可以在命令行中使用 PHP 来完成哪些任务。

安装

安装十分简单扼要,它甚至可能都不需要特别安装任何内容。开始时先在命令行中尝试一个简单的 PHP 脚本。您可以使用现有 PHP 脚本,也可以尝试使用以下代码。本例是基于 Linux® 的,但是类似的原理也适用于其他系统。

首先,确认 PHP 可执行文件的位置 —— 对于大多数 Linux 系统,几乎肯定是 /usr/bin/php。如果不确定其位置,请在命令行中键入 which php 并查看响应内容。

其次,键入以下代码,确保将 /usr/bin/php 替换为 PHP 可执行文件的实际路径。

1

2

#!/usr/bin/php -q

Hello world

保存文件并确保用可执行权限做了标记。在大多数系统中,您都可以用 chmod +x hello-world 或类似代码完成此操作。然后,执行 PHP 文件(通过运行 ./hello-world 或者,如果有必要,运行 php hello-world),并查看它是否运行。如果它运行,则安装的 PHP 在默认情况下会包括命令行功能。

如果代码未能正确运行,事情可能会变得有点儿麻烦。关于原因有很多种不同的可能性。如果您得到一个与 PHP 相关的错误(除了 “未找到程序” 之类的结果),则问题是代码中的输入错误。如果未找到 PHP 可执行文件,请确保您使用了正确的路径。如果没有名为 PHP 的可执行文件,则必须获得一个。

获得 PHP 可执行文件可能根据所在系统的不同采取不同的步骤,但是获得所需支持不应当太难。您可以从查阅针对特定操作系统或发行版的文档开始。

很明显,如果这时系统中未安装 PHP,则先安装 PHP,然后再次尝试执行以上代码。对于许多系统,安装 PHP 是您需要做的全部操作。如果需要执行更多操作,有时只需使用您最喜欢的包管理工具(例如 apt-get 或 yum)获得 PHP CLI 包(名称可能略有不同)就可以解决此问题。

如果在 PHP 包管理工具中未能找到命令行,最糟糕的情况是您可以用 –enable-cli 标记重新编译 PHP。事实上,这样做的优点是提供了稍微优化了的系统并且不管怎么说都不是个坏主意。无论采用哪种方式,开始使用它都不应当太难。

到现在,您应当已经运行了 HelloWorld 脚本,并且输出就是可能已经猜测到的结果。我不会详细说明该脚本的工作原理,但是使用过 shell 脚本和 PHP 的人应当十分熟悉脚本的大部分内容。由于这第一个脚本现在的运行没有出现任何问题(我们希望如此!),因此我们将略微偏离真正的命令行接口 (CLI) 应用程序,看一看为什么在命令行中使用 PHP 对于所有 PHP 程序员来说都是最佳选择的好理由:调试。

PHP 调试

可能只有我有这种体验,但是我经常发现调试 CLI 程序会演变成一场噩梦,尤其是处理嵌入了 HTML 的脚本,例如 Microsoft® Active Server Pages (ASP) 或 PHP。通常很难判断特定错误消息所表达的精确含义,用户输入可能很难再次生成,并且整件事通常会使您头痛的希望拔光头发。

不幸的是,虽然足够聪明的程序员可以找到 CLI 能够有所帮助的方法(例如,通过从文件读取输入或通过一个通道的另一个程序),但是大部分问题都不会由于使用命令行而显著减弱。不过,CLI 确实使一件事变得更加简单:找到错误消息,以便可以在第一位置读取这些错误消息。

为了查看使用命令行调试的值,让我们从下面所示的非常非常糟糕的 PHP 文件开始。

1

2

#!/usr/bin/php -q

Doncodewhile drunk(); ?<

虽然第一眼看到代码时,就发现这个脚本中的一些错误十分明显,但是代码在 Web 浏览器中提供了无用调试信息的极好示例。尤其是,不会发生这种情况:在 Apache 中运行此页面只是得到了根本没有输出的结果。如果错误不明显,那么您怎样找到错误原因?

解决这个问题的传统方法是查看错误日志。例如,您可能先运行:

1

tail -f/var/log/httpd/error_log

然后再将页面装入运行 Apache 2 的 Linux 系统,这将得到诸如下面的输出:

1

2

[client 127.0.0.1] PHP Parse error: parse error, unexpected T_STRING, expecting

'(' in /var/www/html/dont-code-drunk.php on line 2

不幸的是,您可能同意我的观点,考虑这种不太理想的解决方案。一方面,文件日志位置可能因系统的不同而有所不同。另一方面,您必须浏览不相关事件的日志以查找所需内容,这对于活动的服务器来说很可能是一场噩梦。

php cli 判断,php cli 命令行详解【转】相关推荐

  1. python的pytest模块:pytest命令行详解

    一.官方文档 How to invoke pytest - pytest documentationhttps://docs.pytest.org/en/latest/how-to/usage.htm ...

  2. GCC 命令行详解 -L -l

    我们用gcc编译程序时,常常会用到"-I"(大写i),"-L"(大写l),"-l"(小写l)等参数,下面做个记录: GCC 命令行详解 -L ...

  3. 7Z解压缩包软件命令行详解

    7Z命令行 7z.exe在CMD窗口的使用说明如下: 7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za ...

  4. Terraform常用命令行详解

    Terraform命令行又称Terraform CLI,用来跟Terraform进行交互的命令行接口. 我们可以通过运行terraform来查看支持的所有命令 Terraform init 用法:te ...

  5. Python爬虫从入门到放弃(十三)之 Scrapy框架的命令行详解

    这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名 例子如下: localhost:spider zhaofan$ scrapy star ...

  6. windows winrar 指令_【转】winrar命令行详解

    从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下: WinRAR  - - 命令:WinRAR 运行的字符组合代表功能 开关:切换操作指定类型,压缩强度,压缩文件类型,等等的定义. 压 ...

  7. [转]GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名

    1.gcc包含的c/c++编译器 gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什 么意思:))一般c程序就用gcc编译,c++程序就用g++编 ...

  8. WinZip命令行详解

    在WinZip安装包中没有包含命令行工具,但在其官方站点上有单独提供下载,所以如需要WinZip命令行工具就得去官方站点下载并单独安装,需要注意的是安装WinZip命令行工具前确保机子上已经安装有适当 ...

  9. FFmpeg 快速上手:命令行详解、工具、教程、电子书

    FFmpeg 简介 FFmpeg 是一个开源的音视频处理工具,诞生已22年.它可以用来处理音视频的编解码.格式转换.剪辑.合并.抽取.压缩.解压缩.滤镜.字幕等等.它可以在 Windows.Linux ...

最新文章

  1. MySQL中,当update修改数据与原数据相同时会再次执行吗?
  2. asp.net 利用Global.asax 捕获整个解决方案中的异常错误
  3. 【转载】手把手教你配置Windows2003集群(图)
  4. 非线性最优化(二)——高斯牛顿法和Levengerg-Marquardt迭代
  5. oracle 表空间异常增长过快解决方法
  6. 【转】使用lockbits方法处理图像
  7. 电脑右击文件夹无反应
  8. SpringMVC + AJAX 实现多文件异步上传
  9. 深入解读Linux内存管理系列(4)——Memblock管理机制
  10. java的class文件反编译
  11. 用Java简单实现单例模式
  12. mega linux教程,MegaRAID工具使用详解
  13. 移动硬盘计算机管理无法显示,为什么移动硬盘插在电脑上不显示_移动硬盘为什么在电脑上面显示不出来-系统城...
  14. DHU数据结构-循环单链表-ADT应用-圆桌问题
  15. 写一手好SQL很有必要
  16. 讯飞离线语音命令词识别
  17. fabric-ca-client颁发Orderer节点证书
  18. Flex/FlashBuilder4.5破解
  19. 自然图像与医学图像的区别(研究方向:医学图像处理)
  20. 打造“大国重器”高性能计算,联想与英特尔如何携手点亮数字经济加速度?...

热门文章

  1. 关于使用两个GTP/GTX出现[DRC RTSTAT-1]error([route 35-54] critical warning)的问题详解
  2. mysql专门导入程序_从MySQL导入导出大量数据的程序实现方法
  3. 超线程cpu的寄存器_一文总结 CPU 基本知识
  4. java三目运算符嵌套_替代JS中的嵌套三元运算符
  5. asp.net 调用本地php,.NET_Asp.net获取服务器指定文件夹目录文件并提供下载的方法,本文实例讲述了Asp.net获取服务 - phpStudy...
  6. python opencv 识别角度_OpenCV入门之获取图像的旋转角度
  7. 中文命名代码示例之Spring Boot 1.3.3演示
  8. 桶排序+基数排序+计数排序
  9. Python开发【第十一篇】:JavaScript
  10. android studio中使用x5 webview来读写cookies的问题