PHP Shebang not working


PHP Shebang not working

注意:这个问题已经解决了。这是shebang行不工作的副本


这是我的:

#!/usr/bin/env php
<?php
echo "starting";

文件是可执行的"-rwxr-xr-x"

我将包含完整路径的文件称为

/var/projects/user-backup.php

但是我只得到错误消息":没有这样的文件或目录"

调用脚本
php /var/projects/user-backup.php

导致字符串"Starting…"按预期显示。

即使当我尝试

 /usr/bin/env php /var/projects/user-backup.php

一切正常,字符串"starting…"按预期显示。

我哪里错了?

EDIT1:像这样使用shebang:

#!/usr/bin/php

导致错误消息"^M: bad interpreter: No such file or directory"虽然确实有/usr/bin/php (/usr/bin/php ->/etc/alternatives/php,/etc/alternatives/php ->/usr/bin/php5)

我想我已经知道了(由于问题@EDIT1)。

关于[Wikipedia]的几句话:换行符(EOLNs):

  • :赢得" ' r ' n "(" ' x0D ' x0A ", CR + 低频

  • Nix :

      Linux
    • :" ' n "(" ' x0A ",低频

    • OSX :" ' r "(" ' x0D ", CR)

你的.php文件有Win样式EOLNs(至少是shebang行),而一些Nix解释器不喜欢CR,这里就是这种情况。

作为边注,Nano(或任何体面的编辑器,事实上)在编辑文件时计算出文件中的行结尾,并且在添加新行时,它们的EOLNs与现有的一致。

要使其工作,将文件EOLNs转换为Nix (Linux)样式:

dos2unix /var/projects/user-backup.php

可能还想阅读[SO]: Flask CLI抛出'OSError: [Errno 8] Exec格式错误',当运行通过docker-compose (@CristiFati的答案)。

/usr/bin/php放入/etc/shells文件

是行尾!!虽然我使用"nano"在一个窗口中编辑文件,但我仍然得到了window -line-ending。

使用"dos2unix"转换所有行尾后,事情解决了!

比较这个问题的答案:Shebang line不工作