PHP错误分页/目录阅读

时间:2014-07-29 04:47:17

标签: php pagination directory undefined offset

所以我有一个恼人的错误,我的朋友目前没有在线帮助我,所以为什么不问 stackoverflow

我收到以下错误:

  

注意:未定义的偏移量:第21行/home1/username/public_html/foldername/v1/screenshots.php中的7

脚本读取文件夹并收集该目录中的文件。那部分有效,但是我确实得到了这个令人烦恼的错误,我无法弄明白。

我认为脚本正在尝试读取不存在的图像。因为我使用了一个分页脚本来回显该目录中的文件。该脚本工作得很好,减去了一个错误,试图读取不存在的文件。无论如何我可以告诉剧本说}其他{echo" Nothing Here ...&#34 ;;可以这么说?以下是我使用的完整代码。

编辑:(从.txt文件中提取)

$filearray = array(); if ($fil = opendir("../uploads/")) {
    while (($file = readdir($fil)) !== false) {
if ($file != "." && $file != "..") { $filearray[] = $file;
    }
}
    closedir($fil);
} 
$page = empty($_GET['page']) ? 1 : $_GET['page'];
$num_per_page = 5;
$total_pages = ceil(count($filearray)/$num_per_page);

    for($i = ($page - 1) * $num_per_page; $i < $page * $num_per_page; $i++) {
        echo "<a href=\"http://www.url.com/uploads/".$filearray[$i]."\"><img src=\"http://www.url.com/uploads/".$filearray[$i]."\" width=\"100\" height=\"100\" /></a>";
}

$pages = array();
    for($i = 1; $i <= $total_pages; $i++) {
    $pages[] = "<a href=\"".$_SERVER['PHP_SELF']."?page=".$i."\">".$i."</a>";
}
echo "<br />Page: ".implode(" ", $pages); 

我无法在表单中粘贴整个代码。任何形式的帮助都会很棒......

2 个答案:

答案 0 :(得分:0)

for($i = 1; $i <= $total_pages; $i++)

应该是

for($i = 0; $i < $total_pages; $i++)

在PHP中,数组从0开始编入索引,因此数组$ 7的7个值将具有值$ pages [0],$ pages [1],...,$ pages [6],但不是$页面[7]。

如果从1开始计算(假设$ total_pages为7),那么您将尝试查询$ pages [1],$ pages [2],...,$ pages [6](到目前为止一直这么好),$ pages [7],它将触发错误,因为数组中没有这样的元素。

答案 1 :(得分:0)

您的问题是您正在尝试访问不在阵列中的数组值。当你没有足够的价值时,这很可能是你最后一页造成的 - 即。如果错误为7,则最有可能在第2页上,并且只有6 $filearray个值。

一个简单的解决方法是检查数组值是否存在

for($i = ($page - 1) * $num_per_page; $i < $page * $num_per_page; $i++) {
  if(isset($filearray[$i])){
    echo "<a href=\"http://www.url.com/uploads/".$filearray[$i]."\"><img src=\"http://www.url.com/uploads/".$filearray[$i]."\" width=\"100\" height=\"100\" /></a>";
  }
}

另一种方法是检查您是否拥有该页面的全部金额,如果没有设置新的最大金额。

$max = ( count($filearray) > ($page * $num_per_page) ) ? $page * $num_per_page : count($filearray); // if size of $filearray is larger than the page*numb_per_page set max to page*numb_per_page else set it to the size of $filearray

for($i = ($page - 1) * $num_per_page; $i < $max; $i++) {
    echo "<a href=\"http://www.url.com/uploads/".$filearray[$i]."\"><img src=\"http://www.url.com/uploads/".$filearray[$i]."\" width=\"100\" height=\"100\" /></a>";
}