Php 扫描目录和打印文件无法正常工作

Php 扫描目录和打印文件无法正常工作,php,pdf,directory,Php,Pdf,Directory,好的,我有一个小问题,我还没有弄明白为什么会发生。我们的网站上有很多每月的时事通讯和东西,我们不是每月手动更改页面,而是将PDF转储到一个目录中,让PHP来完成这项工作。我最近使用了我在至少三个其他地方使用过的一些代码,它将所有文件打印为同一个月(部分文件名),我不知道为什么。打印链接到正确文件的链接时,文件命名结构为newsletter-2014-04-01.pdf或newsletter-year-month-day.pdf,但将月份列为二月,并使用月份作为日期。同样的代码在至少3个其他目录上

好的,我有一个小问题,我还没有弄明白为什么会发生。我们的网站上有很多每月的时事通讯和东西,我们不是每月手动更改页面,而是将PDF转储到一个目录中,让PHP来完成这项工作。我最近使用了我在至少三个其他地方使用过的一些代码,它将所有文件打印为同一个月(部分文件名),我不知道为什么。打印链接到正确文件的链接时,文件命名结构为newsletter-2014-04-01.pdf或newsletter-year-month-day.pdf,但将月份列为二月,并使用月份作为日期。同样的代码在至少3个其他目录上运行得非常好。。。我唯一更改的是新闻稿的分钟数和目录路径。有人能告诉我为什么要这样做吗

<?php

$PHP_SELF = '/'.current_path();

$base = DRUPAL_ROOT . "/assets/pdfs/cce/sbdc/newsletter";

$thisyear = date("Y");

# Strip out any HTML tags to eliminate cross-site scripting.
foreach ($_GET as $value) {
    $value = preg_replace("/<(.*?)>/","",$value);
}
# Then grab each GET value into a variable.
foreach ($_GET as $varname => $value) {
    $$varname = $value;
}

# If a year was not specified, use the current year by default.
if (!$year) {
    $year = $thisyear;
}

# List the year folders in the base directory (2001, 2002, et cetera).
if ($handle = opendir($base)) {
    while (false !== ($file = readdir($handle))) {
        // echo $file . '<br />';
        if( is_dir( $base . '/' . $file ) ){
            // echo $file . 'Is a directory <br />';
            if (preg_match("/\d\d\d\d/",$file)) {
                $years[count($years)] = $file;
            }
        }
    }

    closedir($handle);
    rsort($years);
}

# Is the specified year available in the list?
if (!in_array($year, $years)) {
    print "<p><font color=\"red\">Invalid year \"$year\".</font></p>";
    $year = $thisyear;
}


# List the target year directory.
$minutes = array();
$agendas = array();
$packets = array();
$directory = $base . '/' . $year;
if ($handle = opendir($directory)) {
    while (false !== ($file = readdir($handle))) {
        if (preg_match("/newsletter-\d\d\d\d-\d\d-\d\d\.pdf/",$file)) {
            $minutes[count($minutes)] = $file;
        }
            if (preg_match("/newsletter-\d\d\d\d-\d\d-\d\d\d\.pdf/",$file)) {
            $minutes[count($minutes)] = $file;
        }

    }
    closedir($handle);
    if (count($minutes)) {
        sort($minutes);
    }

    if (count($agendas)) {
        sort($agendas);
    }

}

print "<table width=\"100%\" id=\"content_table\" cellpadding=\"5\" border=\"1\" summary=\"Newsletters\"><tr width=\"600\" valign=\"top\">";

# Print the year index in the first column.
print "<td width=\"175px\" align=\"center\"><p><span class=\"bold\">Year index</span></p>\n";
for ($i = 0; $i < count($years); $i++) {
    if ($years[$i] == $year) {
        print "<b>";
    }
    if ($years[$i] == $thisyear) {
        print "<a href=$PHP_SELF>";
    } else {
        print "<a href=$PHP_SELF?year=$years[$i]>";
    }
    print "$years[$i]</a><br />\n";
    if ($years[$i] == $year) {
        print "</b>";
    }
}
print "</td>";

# Print the list of minutes in the second column.
print "<td width=\"250px\" align=\"center\"><p><span class=\"bold\">$year Newsletters</span></p>\n";
if (count($minutes)) {
    for ($i = 0; $i < count($minutes); $i++) {
        $y = substr($minutes[$i],8,4);
        $m = substr($minutes[$i],13,2);
        $d = substr($minutes[$i],16,2);
        print '<a href="/assets/pdfs/cce/sbdc/newsletter/' . $year . '/' . $minutes[$i] . '">';
        print date("F j", mktime(0,0,0,$m,$d));
        print "</a><br />\n";
    }
} else {
    print "No newsletters";
}
print "<br />\n";
print "</td></tr></table>\n";
    ?>

模拟寄存器全局变量是危险的。不要这样做。另外,您可以使用
glob
而不是
opendir
东西<代码>$minutes[计数($minutes)]=$file
可以替换为
$minutes[]=$file。如果您使用的是
preg\u match
,则不应使用
substr
。请显示目录中的文件、所需和实际输出。@sectus添加的文件以及当前和所需的文件output@sectus这段代码是预先存在的,我对其中的一些东西比较陌生,所以我只是重用已经存在的东西。这碰巧是他们中的一个。