- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我注意到,从 php 7.2 迁移到 7.3 后,文件浏览器小部件的加载时间要长得多。
通常需要不到一秒的操作花费的时间要长得多。启用 slowlog 后,我使用 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 的 prestine DigitalOcean droplet 上运行的结果:
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 的 Droplet 上运行的相同测试(这是我第一次遇到问题的机器;您可以看到原因):
% ./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?进行更深入(和粗暴)的讨论和示例。
关于php - 7.3 与 7.2 上的 finfo 相当慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406460/
假设已经定义了一个 Point2D 类来存储具有 x 和 y 坐标(均为 double )的二维点。该类包括以下成员: 您的任务是通过添加适当的compareTo 方法将该类修改为Comparable
首先,设计:我需要某种树,其中每个节点可以有任意数量的子节点。每个节点携带一个有效负载。节点的总负载是特定节点的负载+其所有祖先直到根节点的负载。 预期在树上执行的操作有:插入、更新、删除(相当频繁)
如果您愿意,可以快速提问或发表意见。 我需要为数据库表生成一些 UUID。 自动递增键不会削减它,因为我还需要键在数据库和系统中是唯一的。 UUID 工作正常,但它的输出对于行将导出到的某些系统来说太
我这样写 map_tail 的尾递归版本: let map_tail f l = let rec map acc = function | [] -> List.rev acc |
我正在为我当前的项目编写自己的测试运行程序。一个特性(这可能在测试运行器中很常见)是每个测试用例都在子进程中执行,因此测试运行器可以正确检测并报告崩溃的测试用例。 我还想测试测试运行器本身,因此一个测
内存中的 H2 - 插入 - 错误 42000 尝试过版本 1.4.196、1.4.197、1.4.199。 我还尝试在 H2 服务器(本地)上执行 INSERT:也失败 给出错误的行:(抱歉,出于安
我正在评估从 Joda-Time 的使用中迁移我的项目到java.time package在 Java 8 。在 Joda-Time 中,我大量使用了 Interval类(class)。我在 java
我是 C# 新手 -- 不到 50 行代码。 所以问题是 C# 中的 ArrayList 是 Java 中 ArrayList 的一个很好的替代品。 以下是我注意到的一些差异: C# 中的 Array
我需要在一个包含将近 100 万条条目的表中进行查询,但有趣的部分只有前 500 条。 我想知道在查询行的末尾使用 Take() 方法是否是速度(和内存)优化方面的最佳选择,或者只是执行整个查询然后获
我从另一篇文章中读到,c++11 提供了闭包功能。据我了解,闭包非常类似于具有私有(private)成员和公共(public)方法的对象。如果不是,那么它有何不同? 最佳答案 闭包是一种从外部作用域访
我是一名优秀的程序员,十分优秀!