什么时候文件扩展名覆盖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/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可能会出问题,具体取决于其配置.简而言之,一定要测试一切. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |