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