【问题标题】:PHP glob a directory going wrong in some cases why?PHP glob 某个目录在某些情况下会出错,为什么?
【发布时间】:2016-01-27 02:48:49
【问题描述】:

我的 PHP 代码在某些情况下会出错,我不明白为什么。 我当前的代码是按范围显示与客户相关的所有照片。

示例:选择文件夹内300到310的所有图片并显示。

我的文件夹中的照片名称示例:C20_0385、C20_0386、C20_0389、C20_0400...

当前 PHP 代码:照片从 385 到 420。

$start = 385:
$end = 420;

$dirname = "smallphotos/$jour_creation - $date_creation/$session/$dossier";

$filenames = glob("$dirname/*{" . implode(",", range($start, $end)) . "}*", GLOB_BRACE);

foreach ($filenames as $filename)
{
echo "<img class=\"img-responsive\" src=\"$filename\" alt=\"$filename\">";
}

如果我现在这样做$start = 385; $end = 450;

它写错误:

Warning: glob(): Pattern exceeds the maximum allowed length of 260 characters
Warning: Invalid argument supplied for foreach()

如果我从$start = 385; $end = 435; 开始,它会显示当前最高为 C20_503.JPG 的整个文件夹

对于小范围的或多或少 40 张照片,它似乎可以完成这项工作,但对于更多的情况,就会出现问题。

【问题讨论】:

    标签: php


    【解决方案1】:

    错误指出 glob 模式不能超过 260 个字符;你将不得不使用an alternative approach:

    $filenames = array();
    $dir = opendir( $dirname );
    while (false !== ($file = readdir($dir)))
    {
        if ( is_file( $file ) && preg_match( "/^.*?_(\d+)/", $file, $m )
          && $m[1] >= $start && $m[1] <= $end
        )
            $filenames[] = "$dirname/$file";
    }
    closedir($handle);
    

    【讨论】:

    • 你的代码很有趣。今晚我会测试它谢谢你
    【解决方案2】:

    这个函数range($start, $end)正在生成一组数字。

    当您$start = 385; and $end = 420; 时,列表包含 35 个条目

    当您$start = 385; and $end = 435; 时,列表包含 50 个条目

    正是这个导致了Pattern exceeds the maximum allowed length of 260 characters 错误

    您必须限制数字,以免生成的字符串超过允许的长度。

    【讨论】:

    • 谢谢你,现在我明白是怎么回事了。那 260 个字符不是 Windows 限制吗?我的意思是,如果我在 Linux 服务器上,这不再是问题了吗?
    • 无论如何我认为这是glob函数的限制,与操作系统文件路径限制无关。
    • 好的,很高兴知道这一点。感谢您的所有帮助和信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2016-06-10
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多