我注意到cPanel托管环境中的物理内存使用率很高。 为了显示一些符合某些标准的照片,我在10.000 jpeg的目录中大量使用了glob函数。
这可能是原因吗?
谢谢
这是我的代码
<?php
$glob = glob("imgs/".$id."*.jpg");
if (empty($glob)) { echo'none'; }
else {
foreach ($glob as $img) {
echo $img; }
}
?>
答案 0 :(得分:1)
是的,这是可能的。你拥有的数组越大,php消耗的内存就越多,直到达到max_memory
限制,这将破坏你的代码。而不是全局使用readdir
而不会消耗太多:
if ($handle = opendir('/path/to/files')) {
while (false !== ($entry = readdir($handle))) {
$ext = strtolower(end(explode('.', $entry)));
// Check for extension, first 4 characters a number and 5th character underscore
if ($ext == 'jpg' && substr($entry, 0, 5) == ($id . '_')) {
echo "$entry\n";
}
}
closedir($handle);
}
答案 1 :(得分:1)
是;您可能认为它很慢。
我更喜欢RecursiveDirectoryIterator或DirectoryIterator。
这是一个使用RecursiveDirectoryIterator的演示,它应该打印所有目录中的所有文件,用于指定的根目录。
<?php
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'), RecursiveIteratorIterator::SELF_FIRST);
foreach($files as $name => $file) {
echo $name . '<br />';
}
?>
编辑: 在阅读您的评论后,我找到了一个可能更适合您的解决方案。
<?php
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("."));
$files = new RegexIterator($files,'/^.+\.jpeg$/i',RecursiveRegexIterator::GET_MATCH);
然而,readdir解决方案更快。