首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

PHP 中文文件夹或文件名 basename 时有时无的问题

  •  
  •   RobertYang · 204 天前 · 1372 次点击
    这是一个创建于 204 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统 Centos 与 Ubuntu,PHP7.2 与 7.3 均出现过。获取中文文件夹的 basename 有时会出现为空的情况,页面再次获取又是正常的。 之前有看到中文 UTF-8 处理可能依赖于 PHP-intl 模块,但是安装卸载后好像影响不大。

    刚刚我重启 PHP-fpm 之后无论怎么刷新 basename 都输出正常,之前也是运行一段时间过后又会出现相同的情况。

    5 回复  |  直到 2019-05-19 12:39:40 +08:00
        1
    haiyang416   204 天前
    100 万次测试没有重现。

    PHP 7.2.17-0ubuntu0.18.04.1 (cli) (built: Apr 18 2019 14:12:38) ( NTS )
        2
    RobertYang   204 天前
    @haiyang416 已发现如果 setlocale(LC_NUMERIC,' ')时会直接无法显示中文 basename,setlocale(LC_ALL,' ')时显示正常。难道是跟服务器上其他 PHP 程序有关系,如果当前程序没有设置 setlocale 时会被其他程序的设置影响?
        3
    haiyang416   204 天前
    @RobertYang 搜索了一下,貌似 basename 的行为受 locale 的影响,后面有空了去翻下 basename 的 c 代码看看。

    https://stackoverflow.com/questions/45268499/php-basename-and-pathinfo-with-multibytes-utf-8-file-names/45268539
        4
    haiyang416   204 天前
    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   204 天前 via Android
    @haiyang416 最奇葩的是不设置也显示,但是状态随机
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4098 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 07:55 · PVG 15:55 · LAX 23:55 · JFK 02:55
    ♥ Do have faith in what you're doing.