这已经让我略微感到困扰。运行CLI php脚本执行位
我知道你能做到
php foo.php
或
php -f foo.php
有没有办法只是启动与执行位脚本设置
./foo.php
考虑如下因素:
#!/usr/bin/php
<?php
exit('hello');
根据“bin/php”后面是否有空格,我得到“无法打开输入文件”或“错误的解释器:没有这样的文件或目录”。
这已经让我略微感到困扰。运行CLI php脚本执行位
我知道你能做到
php foo.php
或
php -f foo.php
有没有办法只是启动与执行位脚本设置
./foo.php
考虑如下因素:
#!/usr/bin/php
<?php
exit('hello');
根据“bin/php”后面是否有空格,我得到“无法打开输入文件”或“错误的解释器:没有这样的文件或目录”。
你给出的示例代码似乎确定,对我的作品(我加的收盘?>
虽然)
如果可以运行该文件与/usr/bin/php foo.php
有事情很奇怪。只是一个疯狂的猜测,但也许你的文本编辑器在文件的开头留下一个BOM(字节顺序标记),以便#!
不是该文件中的前两个字节。 (你可以在这里找到hexdump -C foo.php | head
)
这是BOM!谢谢! – Greg
而不是#!/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
从php(1)
手册页:
TIPS
可以使用shebang行从 脚本自动调用PHP。只有PHP的CLI版本会忽略这样的第一线 如下图所示:
#!/bin/php <?php // your script ?>
所以,认领方法确实可行。如果我在Vim中设置了行结尾而不是“unix”,我会得到“:没有这样的文件或目录”。你在脚本中使用DOS行结束符?
好抓!谢谢。 – Greg
你有php在/ usr/bin/php吗? – Subdigger
@Subdigger是的。这对你有用吗?我不知道我是否试图强迫它做一些不该做的事情。 – Greg