系统 Centos 与 Ubuntu,PHP7.2 与 7.3 均出现过。获取中文文件夹的 basename 有时会出现为空的情况,页面再次获取又是正常的。 之前有看到中文 UTF-8 处理可能依赖于 PHP-intl 模块,但是安装卸载后好像影响不大。
刚刚我重启 PHP-fpm 之后无论怎么刷新 basename 都输出正常,之前也是运行一段时间过后又会出现相同的情况。
1
haiyang416 2019-05-19 11:06:02 +08:00
100 万次测试没有重现。
PHP 7.2.17-0ubuntu0.18.04.1 (cli) (built: Apr 18 2019 14:12:38) ( NTS ) |
2
RobertYang OP @haiyang416 已发现如果 setlocale(LC_NUMERIC,' ')时会直接无法显示中文 basename,setlocale(LC_ALL,' ')时显示正常。难道是跟服务器上其他 PHP 程序有关系,如果当前程序没有设置 setlocale 时会被其他程序的设置影响?
|
3
haiyang416 2019-05-19 12:05:05 +08:00
@RobertYang 搜索了一下,貌似 basename 的行为受 locale 的影响,后面有空了去翻下 basename 的 c 代码看看。
https://stackoverflow.com/questions/45268499/php-basename-and-pathinfo-with-multibytes-utf-8-file-names/45268539 |
4
haiyang416 2019-05-19 12:06:02 +08:00
https://www.php.net/manual/en/function.basename.php
官方文档也提到了: Caution basename() is locale aware, so for it to see the correct basename with multibyte character paths, the matching locale must be set using the setlocale() function. |
5
RobertYang OP @haiyang416 最奇葩的是不设置也显示,但是状态随机
|
6
whoisix 2020-04-28 16:24:11 +08:00
我今天也遇到了,测试上面是正常的,生产和本机有问题,查到可以通过 setlocale 修正,本机测试 ok,生产还没有添加相关代码,跑测试的代码发现又正常了。现在一头雾水不知道是哪里影响到了
|
7
RobertYang OP @whoisix 确实要设置下 setlocale 而且不能全局,不添加的话是随机错误
|
8
grey5659 2021-04-02 11:46:20 +08:00
我也遇到了,时有时无,真是坑死人
|
9
GeorgeGalway 2022-06-08 10:12:19 +08:00
今天我也遇到了相同的问题,应该是个 Bug ,测试和本机都正常,生产环境复现,php 版本 7.2 。
后来把文件名改成英文开头解决了,也算是曲线修复 BUG ,奇奇怪怪。 |