2011-08-02 123 views
2

这已经让我略微感到困扰。运行CLI php脚本执行位

我知道你能做到

php foo.php 

php -f foo.php 

有没有办法只是启动与执行位脚本设置

./foo.php 

考虑如下因素:

#!/usr/bin/php 

<?php 
exit('hello'); 

根据“bin/php”后面是否有空格,我得到“无法打开输入文件”或“错误的解释器:没有这样的文件或目录”。

+0

你有php在/ usr/bin/php吗? – Subdigger

+0

@Subdigger是的。这对你有用吗?我不知道我是否试图强迫它做一些不该做的事情。 – Greg

回答

3

你给出的示例代码似乎确定,对我的作品(我加的收盘?>虽然)

如果可以运行该文件与/usr/bin/php foo.php有事情很奇怪。只是一个疯狂的猜测,但也许你的文本编辑器在文件的开头留下一个BOM(字节顺序标记),以便#!不是该文件中的前两个字节。 (你可以在这里找到hexdump -C foo.php | head

+0

这是BOM!谢谢! – Greg

7

而不是#!/usr/bin/php,使用#!/usr/bin/env php是一个更好的解决方案。这将在PATH环境变量中查找PHP二进制文件。这是更稳健&跨平台。例如BSD在/usr/local/bin/php中安装PHP。

此外,您将需要确保这是第一线,并且该脚本具有可执行位设置,将其设置为每个人(一般正常)使用方法:chmod a+x script.php

另外,还要确保你启用CLI SAPI。运行php -v顶部验证,它应该显示是这样的:

[~]% php -v 
PHP 5.3.3 (cli) (built: Jul 22 2010 16:21:30) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 
2

php(1)手册页:

TIPS

可以使用shebang行从 脚本自动调用PHP。只有PHP的CLI版本会忽略这样的第一线 如下图所示:

#!/bin/php 
<?php 
// your script 
?> 

所以,认领方法确实可行。如果我在Vim中设置了行结尾而不是“unix”,我会得到“:没有这样的文件或目录”。你在脚本中使用DOS行结束符?

5
  1. 检查,如果你有什么之前“#!”,像一个UTF-8 BOM
  2. 检查,如果你不在行到底有什么,就像CR(\ r)以前生产的最终LF(\ n)。如果您使用Windows行结尾(CR LF)在Windows中编写文件并且可能会将其解释为解释器路径的一部分,则CR会到达那里。
+1

好抓!谢谢。 – Greg