什么时候文件扩展名覆盖Linux上的shebang行?

前端之家收集整理的这篇文章主要介绍了什么时候文件扩展名覆盖Linux上的shebang行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近,一些 PHP cron作业在共享服务器上启动失败.他们在没有错误的情况下工作了近一年没有更新,但由于语法错误现在不再运行了.发生了什么事?

事实证明,这些脚本现在突然在PHP 4下运行,而不是PHP 5.在/usr/local / bin / PHP上安装了一个PHP 4版本,但这是这些脚本上的“shebang”行:

#!/usr/local/PHP5/bin/PHP

我做了一些实验:

% /usr/local/PHP5/bin/PHP --version
PHP 5.2.6 (cli) (built: May 11 2008 13:09:39) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0,Copyright (c) 1998-2008 Zend Technologies
    with Zend Extension Manager v1.2.2,Copyright (c) 2003-2007,by Zend Technologies
    with Zend Optimizer v3.3.3,Copyright (c) 1998-2007,by Zend Technologies

% echo '<?= PHPversion() ?>' | /usr/local/PHP5/bin/PHP
5.2.6

% printf '#!/usr/local/PHP5/bin/PHP\n<?= PHPversion() ?>' > version
% chmod +x version
% ./version
5.2.6

% mv version x.PHP
% ./x.PHP
4.4.9

我不知道Linux会让文件扩展名覆盖shebang行,但这就是我所看到的.托管公司的支持不知道为什么会发生这种情况(或者最近发生了什么变化才能实现),所以我采用了一种解决方法重命名脚本,使它们不再以“.PHP”结尾.

cron工作再次运行,但我讨厌“只是不要那样做”的答案.我真的很想知道这种行为来自哪里,因为我从来没有在shell级别从* nix看过这样的东西.我在zsh和bash下测试过,所以我认为我不能责怪shell配置.我在/ etc下面搜索PHP’,看看是否会给我任何线索,但没有.有任何想法吗?

解决方法

听起来你已经用binfmt_misc注册PHP.

查看主题的手册页:binfmt_misc.txt

你想通过回显-1(必须是root)取消注册PHP binfmt_misc处理程序.如果这是您的问题,它将列在/ proc / sys / fs / binfmt_misc /中.

作为警告,这可能会破坏系统上的其他内容.例如,如果正在执行另一个PHP脚本但没有有效的shebang. CGI或suExec可能会出问题,具体取决于其配置.简而言之,一定要测试一切.

猜你在找的Linux相关文章