微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-finfo在7.3和7.2上明显慢

我注意到从PHP 7.2迁移到7.3后,文件浏览器小部件的加载时间要长得多.

通常花费不到一秒钟的操作所花费的时间会更长.启用慢日志后,我使用finfo将问题追溯到MIME查找.恢复到7.2后,此问题已解决.

我创建了一个简单的测试来说明问题:

#!/bin/bash
set -e

ITERS=${1:-1000}

echo "Testing finfo over $ITERS iterations"
for VER in '7.2' '7.3'; do
        echo ---
        echo "Testing PHP $VER"
        docker run -i \
                -e "ITERS=${ITERS}" \
                PHP:${VER}-cli-alpine PHP <<'EOF'
<?PHP
$iters = $_ENV["ITERS"];

$start = microtime(true);
for ($i = 1; $i <= $iters; $i++){
  $finfo = new finfo(FILEINFO_MIME);
  $type = $finfo->file("/bin/sh");
  unset($finfo);
}
$ttl = microtime(true) - $start;
echo "Took: $ttl\n";
?>
EOF
done

这是在具有3个cpu的常规DigitalOcean小滴上运行的结果:

root@PHPtest:~# ./test.sh 1000
Testing finfo over 1000 iterations
---
Testing PHP 7.2
Took: 1.2104759216309
---
Testing PHP 7.3
Took: 2.4543979167938

7.3测试花费了两倍多的时间.我已经在许多系统上运行了该测试,在所有情况下,我发现7.3的运行时增加了30%或更多.在某些情况下甚至更多.这是在负载更大且只有2个cpu的小滴上进行的相同测试(这是我第一次遇到此问题的机器;您可以看到原因):

% ./test.sh 100
Testing finfo over 100 iterations
---
Testing PHP 7.2
Took: 0.10123181343079
---
Testing PHP 7.3
Took: 34.721122980118

造成此速度下降的原因可能是什么,我应该采用任何配置/优化方法吗?

解决方法:

finfo严重依赖PCRE,在7.3中,他们更新了PCRE库.我在变更日志中找不到其他可能影响到此程度的更改.

在这种情况下,除了恢复到7.2或使用其他方法识别mime类型外,您无能为力.或采用其他安全媒介-finfo实际上很容易上当,所以这不是一个很好的解决方案.请参阅PHP file upload: mime or extension based verification?,以进行更深入的讨论.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐