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

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

概述最近,一些 PHP cron作业在共享服务器上启动失败.他们在没有错误的情况下工作了近一年没有更新,但由于语法错误现在不再运行了.发生了什么事? 事实证明,这些脚本现在突然在PHP 4下运行,而不是PHP 5.在/usr/local / bin / php上安装了一个PHP 4版本,但这是这些脚本上的“shebang”行: #!/usr/local/php5/bin/php 我做了一些实验: % 最近,一些 PHP cron作业在共享服务器上启动失败.他们在没有错误的情况下工作了近一年没有更新,但由于语法错误现在不再运行了.发生了什么事?

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

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

我做了一些实验:

% /usr/local/PHP5/bin/PHP --versionPHP 5.2.6 (cli) (built: May 11 2008 13:09:39) copyright (c) 1997-2008 The PHP GroupZend 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/PHP5.2.6% printf '#!/usr/local/PHP5/bin/PHP\n<?= PHPversion() ?>' > version% chmod +x version% ./version5.2.6% mv version x.PHP% ./x.PHP4.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上的shebang行?全部内容,希望文章能够帮你解决什么时候文件扩展名覆盖Linux上的shebang行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1043443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存