一、问题
在执行以下代码获取hostname时,
$hostname = gethostname();
发现获取hostname失败, Warning 信息如下
gethostname(): unable to fetch host [36]: File name too long
二、分析
在网上搜公开资料,发现一篇文档 gethostname fails if your host name is 64 chars long,提到了这个问题,如果hostname达到64字符,gethostname会报错,同时提到该bug处于已修复状态。接下来尝试在本地深入了解此问题。 当前的hostname值如下,长度为63字符
# hostname
prodduct-helloworld-test-hostname-php71-abcdefhhijklmnopqr-env
查阅资料可知,执行以下命令可以设置 主机的hostname
hostnamectl set-hostname hostname_you_want_to_set
经过测试发现,允许设置的hostname最长为64字符,如果提供的 hostname_you_want_to_set 参数超过64字符,只保留前64字符作为hostname
然后分别在 php 7.1/7.4环境下,将主机hostname的长度从64字符逐渐减小,每次调整完执行 php -r 'var_dump(gethostname());' 观察输出。
结果如下
php 7.1下 hostname<=62字符,gethostname()输出正常
php 7.4下 hostname<=64字符,gethostname()输出正常
三、结论
System Warn: gethostname(): unable to fetch host [36]: File name too long 确实是php较低版本存在的一个bug,导致hostname最多只能为62字符,否则将获取不到hostname,高版本已经修复此问题。
四、解决办法
1、升级php 2、修改主机hostname不超过62字符
|