php gethostname(): unable to fetch host 问题分析

本文档详细记录了在执行PHP代码获取hostname时遇到的'Filenametoolong'警告问题。通过研究发现,当hostname长度超过64字符时,PHP低版本会出现此问题,但在高版本中已修复。解决方案包括升级PHP或缩短hostname至62字符以内。经测试,PHP7.1在hostname长度小于等于62字符时能正常工作,而PHP7.4则可接受64字符。
摘要由CSDN通过智能技术生成

一、问题

在执行以下代码获取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()输出正常

三、结论

gethostname(): unable to fetch host [36]: File name too long 确实是php较低版本存在的一个bug,导致hostname最多只能为62字符,否则将获取不到hostname,高版本已经修复此问题。

四、解决办法

1、升级php
2、修改主机hostname不超过62字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值