在PHP中不使用数据库的分页

时间:2015-02-13 16:28:54

标签: php glob

我正在尝试创建一个网页,每次显示存储在目录中的10个文件。我不想为它使用数据库。这就是我到目前为止所做的。

<?php 
$exclude = array("index.php");
$cssfiles = array_diff(glob("*.php"), $exclude); 
foreach ($cssfiles as $cssfile) {
$filename = "http://example.com/lessons/css/".$cssfile;
outputtags($filename,true,true); 
}
?>

这打印出所有结果,我无法弄清楚如何仅显示前十个结果,之后用户在不使用数据库的情况下单击下一个10个结果。我认为仅仅为此目的使用数据库是没有意义的。

编辑我想这样做的原因是因为我收到了max_user_connection错误。

2 个答案:

答案 0 :(得分:0)

您可以将文件存储到数组中并按照您的意愿对其进行排序,如下所示:

    $exclude = array("index.php");
    $cssfiles = array_diff(glob("*.php"), $exclude); 
    $files = array();
    foreach ($cssfiles as $cssfile) {
    $filename = "http://example.com/lessons/css/".$cssfile;
       $files[] = $filename;
    }

    asort($files);

    // Pagination start from here
    $page = 1; // You will get this parameter from the url using $_GET['page'] for instance
    $limit  = 10; // Number of files to display.
    $offset = (($page-1) * $limit);
    $max = ($page * $limit);
    $max = $max > count($files)  ? count($files) : $max;

    for ($i=$offset; $i<$max; $i++) {
        echo $files[$i] . PHP_EOL;
    }

    echo 'Total Pages : ', count($files). PHP_EOL;
    echo 'Page number : ' , $page;

也许您可以使用ajax并提取分页页面以避免每次都抓取所有文件。

答案 1 :(得分:-1)

这取决于您希望如何选择这十页。可以使用for循环将文件0-9列为,并且可以从10-19,......开始计算,取决于用户请求的页面范围。

但是,添加文件时,系统会出现故障。在这种情况下,将一些排序信息加载/保存到会话/ cookie可以解决问题。

编辑:然而,使用数据库是此类任务的标准。即使您不喜欢它们,您也很可能需要它们来处理需要排序,搜索或连接多个数据集的更复杂的任务,这些数据集太复杂,无法通过文件系统功能实现。