База данных или нет базы данных? - PullRequest
0 голосов
/ 13 марта 2011
<?php
$image_url = 'images/';

//User defined variables for page settings
$rows_per_page = 2;
$cols_per_page = 4;

//Master array of ALL the images in the order to be displayed
$images = array(
'image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg',
'image5.jpg', 'image6.jpg', 'image7.jpg', 'image8.jpg',
'image9.jpg', 'image10.jpg', 'image11.jpg', 'image12.jpg',
'image13.jpg', 'image14.jpg', 'image15.jpg', 'image16.jpg',
'image17.jpg', 'image18.jpg', 'image19.jpg'
);

//END USER DEFINED VARIABLES

//System defined variable
$records_per_page = $rows_per_page * $cols_per_page;
$total_records = count($images);
$total_pages = ceil($total_records / $records_per_page);

//Get/define current page
$current_page = (int) $_GET['page'];
if($current_page<1 || $current_page>$total_pages)
{
$current_page = 1;
}

//Get records for the current page
$page_images = array_splice($images, ($current_page-1)*$records_per_page, $records_per_page);

//Create ouput for the records of the current page
$ouput = "<table border=\"1\">\n";
for($row=0; $row<$rows_per_page; $row++)
{
$ouput .= "<tr>\n";
for($col=0; $col<$cols_per_page; $col++)
{
$imgIdx = ($row * $rows_per_page) + $col;
$img = (isset($page_images[$imgIdx])) ? "<img src=\"{$image_url}{$page_images[$imgIdx]}\" />" : '&nbsp;';
$ouput .= "<td>$img</td>\n";
}
$ouput .= "</tr>\n";
}
$ouput .= "</table>";

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

?>
<html>
<body>
<h2>Here are the records for page <?php echo $current_page; ?></h2>
<ul>
<?php echo $ouput; ?>
</ul>
Page <?php echo $current_page; ?> of <?php echo $total_pages; ?>


<?php echo "{$first} | {$prev} | {$next} | {$last}"; ?>
</body>
</html>

Этот код выше обеспечивает простой способ размещения изображений на моем сайте, в то время как другие изображения перемещаются автоматически без необходимости использования базы данных.Но я должен задаться вопросом: заставит ли это страницу загружаться быстрее, если я перенесу свои фотографии в базу данных, а не то, что я делаю сейчас?Я имею в виду, что приведенный выше пример показывает, что я использую только 19 картинок, но если я когда-нибудь достигну, скажем, 1000 картинок, будет ли файл php слишком большим?Должен ли я просто создать базу данных сейчас или это не имеет значения?

Кроме того, по некоторым причинам, нумерация страниц не работает.Кто-нибудь хочет поставить диагноз?

Спасибо!

Ответы [ 5 ]

1 голос
/ 13 марта 2011

Как вы упомянули, если у вас когда-либо будет 1000 изображений, файл PHP будет особенно большим. Хотя это может привести к тому, что время загрузки будет немного медленнее, массивы с 1000 элементами, безусловно, не выходят за рамки способности PHP эффективно обрабатывать.

Частично (на самом деле, во многом) причина использования базы данных заключается в том, что проще управлять большими наборами данных. С вашими текущими настройками, что происходит, когда вы хотите добавить изображения где-то, кроме как в начале или в конце, особенно когда они становятся большими.

Создание базы данных - хороший шаг к обеспечению вашего будущего здравомыслия. Тем не менее, вы можете рассмотреть возможность использования базы данных. Учитывая простую природу вашего набора данных, вы можете рассмотреть возможность использования базы данных без SQL, такой как mongodb, или даже чего-то такого простого, как sqlite.

Если вы намерены увеличить сложность своего сайта, например, добавив к своим изображениям подписи или местоположения, то вы можете рассмотреть возможность использования MySQL / PostgreSQL / и т.д ...

Что касается нумерации страниц, можете ли вы предоставить больше информации о том, что не работает? Страницы не отображаются, это неправильное количество страниц? Всегда ли отображается страница 1? Я проверю и обновлю свой пост, если вы можете дать немного больше деталей.

0 голосов
/ 14 марта 2011

Всегда лучше использовать базу данных для больших объемов данных. Это проще в управлении. А также вы можете использовать flat file db .

0 голосов
/ 13 марта 2011

Во-первых, вы можете легко уменьшить размер блока массива, используя следующее (если ваши изображения остаются в этой схеме имен):

$images = array();

for($i = 1; $i < 20; $i++)
{
    $images[$i] = 'image'.$i.'.jpg';
}

Что касается производительности, я считаю, что ваш подход немного быстреечем использование базы данных, но ваш код может скоро запутаться.Лучше отделить хранимые данные от фактической логики представления, чтобы быть более гибким при разработке кода.

Второе: о разбиении на страницы, что именно у вас не работает?

0 голосов
/ 13 марта 2011

Вы должны отделить данные от кода.Чтобы добавить новое изображение, вы не хотите редактировать код.

Рефакторинг кода путем создания функции, которая считывает, какие изображения находятся в вашем каталоге данных, и возвращает массив с именами файлов.

Размещение изображений в базе данных не дает никаких дополнительных преимуществ.

0 голосов
/ 13 марта 2011

как вам удастся обновить массив из 1000 записей вручную?

Я бы положил это в данные в базе данных.Таким образом, вы также можете фильтровать данные через MySQL перед обработкой PHP.

...