hur*_*n77 4 domain-name-system php mod-php apache-2.2
当 PHP 在 Apache 中执行时,我们的一台旧式服务器没有进一步更新或重新配置,突然停止将主机名解析为 IP。但是,从 CLI 执行时它仍然可以正常工作。
从 RSS 缓存上次修改时间,我推断它在 3 月 28 日左右停止工作。
为了重现这个问题,我创建了一个脚本fsockopen()
,上面写着“连接失败(错误号 2)”。我进一步将问题归结为与失败的名称解析有关:
<?php $addr = gethostbyname("twitter.com"); echo "ADDR($addr)"; ?>
Run Code Online (Sandbox Code Playgroud)
当我通过 Apache 运行它时,输出是ADDR(twitter.com)
,这是错误的。
当我从 CLI 运行它时,输出ADDR(aaa.bbb.ccc.ddd)
具有不同的 IP 地址,正如预期的那样。
服务器设置上的任何内容都没有改变。CLI 和 Apache 模块共享相同的php.ini
. PHP 是带有 Zend Optimizer v2.5.10 的 v4.4.9 版本。Apache 是 v1.3.31。
我知道这些版本是旧的。但是由于没有任何改变,像“先尝试升级版本”这样的解决方案是行不通的,因为服务器的功能集/版本控制被冻结并且很快就会被替换。我们仍然需要一个解决方案。
如果我运行dig
脚本,它可以在两种环境(mod_php 和 CLI)中工作,但这不仅仅是一个丑陋的黑客,因为它会涉及整个脚本库中的许多编辑和测试,这也是不受欢迎的,因为服务器上的 PHP 应用程序是也被冻结,并且只接收安全更新。它将被完全重写(在新服务器上)所取代。
但是由于重写需要一些时间并连续替换遗留应用程序的部分,我们需要修复解析器问题。我已经用谷歌搜索了一下,虽然问题是已知的,但许多人没有找到解决办法。提高内存限制的修复不起作用。重新启动没有用。mod_php 中的解析器确实没有明显原因停止工作。:-(
更新:我同时通过完全停止 apache 来解决它,等待片刻,然后再次启动它。但这并不能解释这种行为的根本原因(因此没有令人满意的解决方案)。所以我把它打开。
正常重启和正常重启都不起作用。我需要完全停止 apache,等待所有进程完成,然后再次启动 apache。问题解决了。由于似乎没有人找到这种行为的根本原因的解释,我接受我自己的解决方案。
归档时间: |
|
查看次数: |
5437 次 |
最近记录: |