我在添加shebang#时遇到了一些问题!在RedHat linux上使用我的PHP脚本。我添加了shebang的一小段测试代码(我也尝试了不同的变体),但每次尝试运行脚本时都会收到以下错误消息。
错误消息:
-bash: script.php: command not found
测试脚本:
#!/bin/env php
<?php echo "test"; ?>
Shebang#!变体形式:
#!/usr/bin/php
#!/usr/bin/env php
答案 0 :(得分:34)
它应该(对于大多数系统而言)为#!/usr/bin/env php
,但您的错误与此无关。
-bash: script.php: command not found
它表示找不到 script.php 。
如果问题是shebang线,则错误会出现如下情况:
bash: script.php: /usr/env: bad interpreter: No such file or directory
据推测,您输入的是script.php
,该文件不在$PATH
的目录中,或者不可执行。
chmod +x script.php
。./script.php
。您可以将文件移动/复制/符号链接到$PATH
或modify the $PATH
中列出的某个位置,而不是2,以包含包含该脚本的目录。
答案 1 :(得分:13)
如果脚本不在/usr/local/bin
中且可执行,则必须使用php
为您的脚本调用前缀:
php myscrip.php
对于shebangs,这是我使用的:
像这样:
#!/usr/bin/php
或者这个:
#!/usr/bin/env php
答案 2 :(得分:2)
在回复@NVRM关于仅一次使用-d
的评论时,这是不正确的。
以chmod +x script
开头
#!/usr/bin/php
<?php
phpinfo();
并运行script | grep -E 'memory_limit|error_reporting'
,您会看到
error_reporting => no value => no value
memory_limit => 128M => 128M
现在添加一些-d
条目,以便您拥有
#!/usr/bin/php -d memory_limit=2G -d error_reporting=-1
<?php
phpinfo();
并重新运行script | grep -E 'memory_limit|error_reporting'
,现在您将看到
error_reporting => -1 => -1
memory_limit => 2G => 2G
因此,您可以设置多个选项。
实际上,您在此处使用的是整个命令行。因此,您可以加载扩展,使用其他配置等,您可以在命令行执行的所有操作。
答案 3 :(得分:0)
在这里留一些小笔记:
要使用位于同一文件夹内的php二进制文件。
例如,从/usr/bin
复制的php7.2可执行文件在hello
脚本的同一路径中。
#!./php7.2
<?php
echo "Hello!";
要运行它:
./hello
行为与以下行为相同:
./php7.2 hello
这具有可移植性,但要提防系统架构,php二进制文件可能与目标平台不匹配。
通过哈希爆炸设置允许的内存:
我们可以在hashbang行中设置一个INI条目:
#!/usr/bin/php -d memory_limit=2048M
<?php
phpinfo();
exit;
然后使用phpinfo()查看php是否理解:
./myphpProg | grep memory
正确的shell输出应包含:
memory_limit => 2048M => 2048M
执行上述操作与此命令行类似:
php -d memory_limit=2048M myphpProg.**php**
这就是为什么我们只能在hashbangs中设置一个ini值的原因,因为php一次仅接受一个 -d 参数。
答案 4 :(得分:0)
在Linux中为PHP找到可调用的shebang, 不要记住它,学习如何使用
which php
输出
zeus@pop-os:~$ which php
/usr/bin/php
那么shebang一定是
#!/usr/bin/php