加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 18:08:33 所属栏目:Linux 来源:网络整理
导读:最近,一些 PHP cron作业在共享服务器上启动失败.他们在没有错误的情况下工作了近一年没有更新,但由于语法错误现在不再运行了.发生了什么事? 事实证明,这些脚本现在突然在PHP 4下运行,而不是PHP 5.在/usr/local / bin / php上安装了一个PHP 4版本,但这是这些
最近,一些 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/phpn<?= 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可能会出问题,具体取决于其配置.简而言之,一定要测试一切.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读