加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP Intl扩展线程安全吗?

发布时间:2020-12-13 17:19:50 所属栏目:PHP教程 来源:网络整理
导读:我一直在阅读 PHP中的语言环境,似乎setlocale()在线程方面存在问题. (我对线程不太熟悉 – 文档提到它不是线程安全的) 我想让我的项目能够处理某些数字格式,Intl扩展看起来很有趣. http://php.net/manual/en/book.intl.php 我是否应该期待setlocale()使用Int
我一直在阅读 PHP中的语言环境,似乎setlocale()在线程方面存在问题. (我对线程不太熟悉 – 文档提到它不是线程安全的)

我想让我的项目能够处理某些数字格式,Intl扩展看起来很有趣.

http://php.net/manual/en/book.intl.php

我是否应该期待setlocale()使用Intl扩展的相同问题?

解决方法

好吧,我自己也很好奇,所以我设计了一个测试.

首先,我用这两个文件测试了setlocale():

<?php
# locale1.php
error_reporting( E_ALL | E_STRICT );

date_default_timezone_set( 'Europe/Amsterdam' );
setlocale( LC_ALL,'dutch_nld' ); // awkward Windows locale string

sleep( 10 ); // let's sleep for a bit here

echo strftime( '%A,%B %d,%Y %X %Z',time() );

<?php
# locale2.php
error_reporting( E_ALL | E_STRICT );

date_default_timezone_set( 'America/Los_Angeles' );
setlocale( LC_ALL,'english_usa' ); // awkward Windows locale string

echo strftime( '%A,time() );

然后我在两个单独的标签中执行它们.第一个locale1.php,在设置语言环境后休眠10秒,让我们有时间同时执行locale2.php.

令我惊讶的是,locale2.php甚至不允许正确更改语言环境.在locale1.php中出现sleep(10),以这样的方式劫持Apache / PHP进程,使得它不允许locale2.php同时改变语言环境.然而,它确实与日期相呼应,当然,并没有按照您的预期进行本地化.

编辑:抱歉,废话.似乎locale2.php确实改变了语言环境,locale1.php然后在睡觉后打印英语日期而不是荷兰语.所以这似乎与setlocale()的预期行为一致.
/编辑

然后,我用这两个文件测试了IntlDateFormatter:

<?php
# locale1.php
error_reporting( E_ALL | E_STRICT );

$dateFormatter = new IntlDateFormatter(
    'nl_NL',IntlDateFormatter::FULL,'Europe/Amsterdam'
);

sleep( 10 ); // let's sleep for a bit here

echo $dateFormatter->format( time() );

<?php
# locale2.php
error_reporting( E_ALL | E_STRICT );

$dateFormatter = new IntlDateFormatter(
    'en_US','America/Los_Angeles'
);

echo $dateFormatter->format( time() );

然后在两个单独的选项卡中再次执行它们,方式与第一组文件相同.这确实给出了预期的结果:当locale1.php正在睡觉时locale2.php根据美国规则很好地用美式英语打印日期,之后locale1.php根据荷兰规则很好地用荷兰语打印日期.

因此,最后,看来Intl对于setlocale问题是安全的.

但当然还要介意Hyunmin Kim’s的答案.由于缺乏使用Intl的经验,我无法对此发表评论.我最近才发现Intl.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读