PHP Dosya Sistemi Numaralandırma

3 Cevap php

Nasıl bir klasör içinde dosyaların büyük bir listesini sayfalandırmak nedir?

Ben bir 'offset' belirtmek için herhangi bir şekilde söz PHP belgelerinde herhangi bir işlev göremiyorum. Her iki glob () ve scandir () sadece klasördeki tüm dosyaları iade, ve ben bu büyük bir dizin için iyi bir fikir olmayacaktır korkuyorum.

Sadece tüm dosyaları geçiyor ve dosyaların ilk X sayıda kapalı doğrama daha Bunu yapmanın iyi bir yolu var mı? Ben özyineli kastetmek ve bir topak () desen kullanmak için seçenekler istiyorum unutmayın.

Düzenleme: LimitIterator, GlobIterator bir sürü baktım ettik ve RecursiveDirectoryIterator. Hepsi güzel görünüyor ama ben bunları birleştirmek oldu bile (PHP SPL belgeleri son derece azdır) başlamak için hiçbir fikrim yok. Ben muhtemelen sadece sorunu aşırı düşünüyorum.

3 Cevap

Sen sonuçlar kendiniz sayfalandırmak olabilir, PHP basit bir dizi döndürür, bu yüzden size olan dizinizin hangi parçası olarak biliyorum bu yüzden ofset bir $ tutmak ve $ sınır değişkenleri olabilir.

Eğer bir web bağlamda iseniz, GET parametreleri etrafında bu iletebilirsiniz.

Hayır, yok. Dizinler akarsu sadece başka bir türüdür, ve bu "aramak" operatörü tanımlanır nasıl:

static int php_plain_files_dirstream_rewind(php_stream *stream, off_t offset, int whence, off_t *newoffs TSRMLS_DC)
{
    rewinddir((DIR *)stream->abstract);
    return 0;
}

Bunu sadece bir saptırma olduğunu görüyorum. Yani girişi n + 1 okumak için ilk n girdileri okumak gerekir. Daha verimli olmak istiyorsanız, tüm dizini ilk defa okudum ve bir önbellek (oturumda mağaza gibi) olarak kullanabilirsiniz. Tüm okudum sonra, depolanan dizideki n 1 ofset gidin.

Sadece Francisco Soto söylediklerini bazı kod koymak için, el sayfalandırmak

$limit = 10;
$offset = (isset($_GET['offset'])) ? $_GET['offset'] : 0;
$dir = scandir($path);
for ($i = $offset; $i < $offset+$limit; $i++) {
    echo $dir[$i] . "<br />";
}
echo "<br />";
for ($i = 0; $i < count($dir); $i++) {
    echo "<a href='?offset=" . ($i*$limit) . "'>{$i}</a>";
}

Çok kaba, denenmemiş kodu.