2011-03-14 70 views
0
<?php 
$rows_per_page = 2; 
$cols_per_page = 2; 
$image_href = '<a href=/'; 
$image_links = array('file1/page1>', 'file2/page2>', 'file3/page3>', 
'file4/page4>', 'file5/page5>', 'file6/page6>', 'file6/page6>', 
'file/page7>', 'file/page8>', 'subfile/page9>'); 
$img_srcs = '<img src="https://s3.amazonaws.com/imagetitle/'; 
$images = array(); 

for($i = 1; $i < 10; $i++) 
{ 
    $images[$i] = $i; 
} 
$image_ending = '.png" height="200" width="200" /></a>'; 
$image_descriptions = array('<br />something', '<br />description', 
'<br />arbitrary', 'random', '<br />you', '<br />get', '<br />the', 
'<br />idea', '<br />itsdescriptions'); 
$total_images = count($images); 
$images_per_page = $rows_per_page * $cols_per_page; 
$total_images = count($images); 
$total_pages = ceil($total_images/$images_per_page); 
$current_page = (int) $_GET['page']; 
if($current_page<1 || $current_page>$total_pages) 
{ 
    $current_page = 1; 
} 

//Get records for the current page 
$page_image_links = array_splice($image_links, ($current_page-1)*$images_per_page, $images_per_page); 
$page_images = array_splice($images, ($current_page-1)*$images_per_page, $images_per_page); 
$page_image_descriptions = array_splice($image_descriptions, ($current_page-1)*$images_per_page, $images_per_page); 
$slots = "<table border=\"1\">"; 
for($row=0; $row<$rows_per_page; $row++) 
{ 
    $slots .= "<tr>"; 
    for($col=0; $col<$cols_per_page; $col++) 
    { 
     $imgIdx = ($row * $rows_per_page) + $col; 
     $img = (isset($page_images[$imgIdx])) ? "{$image_href}{$page_image_links[$imgIdx]}{$img_srcs}{$page_images[$imgIdx]}{$image_ending}{$page_image_descriptions[$imgIdx]}" : '&nbsp;'; 
     $slots .= "<td>$img</td>"; 
    } 
    $slots .= "</tr>"; 
} 
$slots .= "</table>"; 

//Create pagination links 
$first = "First"; 
$prev = "Prev"; 
$next = "Next"; 
$last = "Last"; 
if($current_page>1) 
{ 
    $prevPage = $current_page - 1; 
    $first = "<a href=\"blah.php?page=1\">First</a>"; 
    $prev = "<a href=\"blah.php?page={$prevPage}\">Prev</a>"; 
} 
if($current_page<$total_pages) 
{ 
    $nextPage = $current_page + 1; 
    $next = "<a href=\"blah.php?page={$nextPage}\">Next</a>"; 
    $last = "<a href=\"blah.php?page={$total_pages}\">Last</a>"; 
} 

?> 
<html> 
<title></title> 
<body> 
<h2>Here are the records for page <?php echo $current_page; ?></h2> 
    <ul> 
    <?php echo $slots; ?> 
    </ul> 
Page <?php echo $current_page; ?> of <?php echo $total_pages; ?> 
<br /> 
<?php echo "{$first} | {$prev} | {$next} | {$last}"; ?> 
</body> 
</html> 

所以基本上這段代碼可以很容易地放置圖像及其鏈接。目前,我沒有那麼多的圖像,所以頁面運行速度非常快。不過,我從長遠考慮。如果我說,有10,000張圖片,需要很長時間才能處理每個分頁頁面,因爲我會將file1/page1的$ image_links分配到file10000/page10000以及10000個不同的圖片說明!有沒有辦法阻止瀏覽器閱讀或跳過腳本的某些部分(在我的情況下是$ image_links和$ image_descriptions)?這樣,它不需要讀取所有10000 $ image_links和$ image_descriptions。如何跳過我的PHP腳本的某些部分? (使我的網頁加載速度更快)

謝謝!

回答

4

在這種情況下,人們通常會做的是將每個圖像的記錄存儲在數據庫中。這樣你就不必每次都創建完整的圖像列表。因此,您只能檢索用戶當前正在查看的頁面的圖像。

緩存

您還可以緩存結果。有各種各樣的方法,類和庫可以做到這一點,但它基本上涉及做這樣的事情:

$cache_key = 'cache-page-'.$pagenumer.'.cache'; 
if (!file_exists($cache_key)) { 

    ob_start(); 
    // all your code comes here - to make it very 
    // fast, you can do an include() here on the other file 
    include 'the-rest-of-your-code-example.php'; 
    $output = ob_get_clean(); 
    $fp = fopen($cache_key, 'w'); 
    fwrite($fp, $output); 
    fclose($fp); 

} else { 
    $output = file_get_contents($cache_key); 
} 

// And finally echo the content 
echo $output; 
+0

雖然這不是看起來癡迷嗎?它似乎並不像我所做的那樣需要足夠的資源來保證使用數據庫。 – user657847 2011-03-14 03:52:40

+0

如果您預計有10,000張圖片,這是正確的方法。如果您預計超過25個,這可能是正確的做法。 – rockerest 2011-03-14 03:55:21

+0

它比首先定義10k行的數組,然後檢索其中的一部分要快得多和容易。 – arnorhs 2011-03-14 04:37:34

相關問題