frantic, на счет стримминга, то для видео и т.д. я пример привел
nginx - картинки отдаст быстрее, лучше чем отдавать с базы....
если с базы, то может будет не много и на веб-сервер паразитная некая нагрузка...
и если картинки в базе будут более 100-150kб, а 1М примерно, то для СУБД тоже будет не красиво...
я видел некоторые хранят превиюшки по 5-30кб в MySQL (как обычный текст)
не знаю, почему, я бы все таки сделал в файлах... :)
на сколько я знаю, то максимальное ограничение файлов (и каталогов) в одном каталоге за которой ОС будет притормажить составляет около 2 млн файлов (точно не помню)... (а в вашем лучае только 60 тыщ)
можно взять сервер, и поставить распределенную файловую систему... MogileFS (http://www.google.com.ua/#hl=uk&q=mogilefs+freebsd&meta=&aq=0&aqi=g1&aql=&oq=MogileFS+f&gs_rfai=&fp=a1e4a221592c4a20)
в Oracle и MsSQL можно даже видео клипы смотреть из базы :D
есть втроенные типы STREAM
в MySQL почему-то не включили такой тип, хотя в PgSQL вроде бы есть минимальная возможонсть такая с функцией seek из BLOB
(но я не пробовал)
http://search.cpan.org/~pythian/DBD-Oracle-1.23/Oracle.pm#Example:_Streaming_character_data_from_the_database
dima yurgensen, видно как вы хотите решить свою проблему...
закажите лучше уже чтобы кто-то сделал, например bearman
в Белоруссии полностью запретили :)
пример на Украине - только идиоты могли придумать такие законы...
view'er, имхо, таких алгоритмов больше чем предостаточно в гугле, я уже не помню какой я использовал, они все одинаковые, только что нашел:
(можете изменить их как хотите...)
<?phpfunction table($nameArray){ GLOBAL $_POST, $_GET; if (isset($_POST['page'])) { $page = intval($_POST['page']); } else if (isset($_GET['page'])) { $page = intval($_GET['page']); } else { $page = 1; } if ($page == 0) { $page = 1; } $st = 3; // количество столбцов $maxRecords = 3; // Количество записей на страницу $allRecords = sizeof($nameArray); $maxPages = floor(($allRecords / $maxRecords) / $st); // Добавляем $st, т.к. вывод идёт еще и колоночно, а если обычно, то не нужно if ($page == 1) { $start = 0; $finish = $maxRecords; } else { $start = ($page * $maxRecords) - $maxRecords; $finish = $page * $maxRecords; } //echo $page."<br>"; //echo $allRecords."<br>"; //echo $start."<br>"; //echo $finish."<br>"; $a = "<table border=0 width= '100%' align='center'>"; for($i = $start; $i < $finish; $i++){ $a .= "<tr>"; for($j = 0;$j < $st; $j++){ $a .= (isset( $nameArray[(($i*$st)+$j)]))? "<td>".$nameArray[(($i * $st)+$j)]."</td>": ''; } $a .= "</tr>"; } $a .= "</table>"; echo $a; echo "<center>"; if (($allRecords % $maxRecords) != 0) { $maxPages++; } if ($page != 1) { echo " <a href=\"".$_SERVER['PHP_SELF']."?page=1\"><<</a> "; } if ($page == 1) { echo " << "; } if ($page >= 3) { echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page - 2)."\">".($page - 2)."</a> "; } if ($page != 1) { echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page - 1)."\">".($page - 1)."</a> "; } echo " ".$page." "; if ($page < $maxPages) { echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page + 1)."\">".($page + 1)."</a> "; } if (($page + 1) < $maxPages) { echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".($page + 2)."\">".($page + 2)."</a> "; } if ($page != $maxPages) { echo " <a href=\"".$_SERVER['PHP_SELF']."?page=".$maxPages."\">>></a> "; } if ($page == $maxPages) { echo " >> "; } echo "</center>";}?>
вот который сейчас:
sub build_pages { my $self = shift; my ( $url, $count, $cuttent_page, $url_panel, $max_page, $class_id ) = @_; my ( $count_limit, $page ); $max_page ||= '10'; # $count ||= 0; $cuttent_page = 0 if ($count == 0); $cuttent_page = $cuttent_page || ''; my $total_pages = ceil( $count / $max_page ); $count_limit = 0; if ( ( $cuttent_page eq 'end' && $total_pages > 0 ) || ( $cuttent_page =~ /^\d+$/ && $cuttent_page > $total_pages ) ) { # print '11 '.$total_pages ; $cuttent_page = $total_pages; } if ( $cuttent_page =~ /^\d+$/ ) { $count_limit = ( $cuttent_page - 1 ) * $max_page; } $cuttent_page = 1 if ( $cuttent_page !~ /^\d+$/ ); $class_id = $class_id ? "class='".$class_id."'" : ''; my $page_number; my $i; for ( $i = 0 ; $i < $total_pages ; $i++ ) { $page_number++; last if ( $total_pages <= 1 ); next if ( $page_number > $cuttent_page + 4 ); next if ( $page_number < $cuttent_page - 4 ); if ( $page_number > $cuttent_page + 3 ) { $page .= ' <a '.$class_id.' href="' . $url . '' . $total_pages . '' . ( $url_panel || '' ) . '"> | ... ' . $total_pages . ' | </a>'; next; } if ( $page_number < $cuttent_page - 3 ) { $page .= ' <a '.$class_id.' href="' . $url . '' . $page_number . '' . ( $url_panel || '' ) . '"> | 1... | </a>'; next; } if ( $page_number != $cuttent_page ) { $page .= ' <a '.$class_id.' href="' . $url . '' . $page_number . '' . ( $url_panel || '' ) . '"> | ' . $page_number . ' | </a>'; } else { $page .= ' <a '.$class_id.' href="' . $url . '' . $page_number . '' . ( $url_panel || '' ) . '"> | <b>' . $page_number . '</b> |</a>'; } } return ( $count_limit, $page, $max_page );}
my ( $count_limit, $page, $max_page ) = $c->model('DBI')->build_pages( $url, $count, $id_page, $max_line || undef);# $max_line - default 10
====
еще другой:
#!perluse HTML::Template;use CGI qw(:standard);# имитация загрузки данных из базыmy %data = map { $_, {id => $_, data => time ^ $_} } 0 .. 42;my $total_data = scalar keys %data;# позволим пользователю выбирать кол-во записей на страницу (можно в куки засунуть)my $default_per_page = 20;my $per_page = int url_param('per_page') || $default_per_page;my $offset = int url_param('offset') || 0;# вывести последнюю страницу, на случай, если у кого ручки шаловливые окажутся)$per_page = $default_per_page if $per_page > $total_data;$offset = $total_data - $per_page if $offset > $total_data;# сюда будут выбраны записи для отображения (от текущего смещения до текущеего смещения + кол-во записей на страницу)my $tmpl_data = [];for($offset .. $offset + $per_page) { last unless defined $data{$_}; # на случай, если записей осталось меньше, чем выводится на страницу push @$tmpl_data, delete $data{$_}}# признак наличия следующей страницы: текущее смещение + кол-во записей на страницу должно быть меньше общего кол-ва записейmy $has_next = ($offset + $per_page) < $total_data;my $next_page = $has_next ? $offset + $per_page : '';# признак наличия предыдущей страницы: смещение больше нуля (т.е. мы не в начале)my $has_prev = $offset > 0;my $prev_page = $has_prev ? $offset - $per_page : '';# запишем сюда все страницы для того, чтобы можно было перескакивать на любую страницу# page - номер страницы (+1 для того, чтобы нумерация не начиналась с нуля)# offset = кол-во записей на страницу * на номер текущей страницы# per_page надо указывать для того, чтобы сохранялось нестандартное значениеmy $all_pages = [ map +{page => $_+1, offset => $per_page*$_, per_page => $per_page}, 0 .. int($total_data / $per_page) # кол-во страниц = общее число записей / кол-во записей на страницу];my $tmpl = HTML::Template->new(filename => 'pager.html');$tmpl->param( tmpl_data => $tmpl_data, all_pages => $all_pages, has_next => $has_next, next_page => $next_page, has_prev => $has_prev, prev_page => $prev_page, per_page => $per_page,);print header(), $tmpl->output
<html><body><table border="1"><TMPL_LOOP NAME="tmpl_data"> <tr> <td><TMPL_VAR NAME="id"></td> <td><TMPL_VAR NAME="data"></td> </tr></TMPL_LOOP></table><br><TMPL_IF NAME="has_prev"> <a href='?offset=<TMPL_VAR NAME="prev_page">&per_page=<TMPL_VAR NAME="per_page">'><< Previous</a> </TMPL_IF><TMPL_LOOP NAME="all_pages"> <a href='?offset=<TMPL_VAR NAME="offset">&per_page=<TMPL_VAR NAME="per_page">'><TMPL_VAR NAME="page"></a></TMPL_LOOP><TMPL_IF NAME="has_next"> <a href='?offset=<TMPL_VAR NAME="next_page">&per_page=<TMPL_VAR NAME="per_page">'>Next >></a></TMPL_IF></body></html>
никто так и не подтвержил и не опровергнул:
1) так можно пить безалкогольное пиво на улице?
2) видел ли кто-то что пьет кто-то со большого сткана или без этикетки? или в бумажном пакете (как написал автор топика) ? и зачем нужен бумажный пакет, туда пиво положить?
я это не видел нигде, я это как раз сейчас хотел сделать :)
в принципе не сверх сложно, так средненько, просто геморойно с sql запросами, jquery и т.д.
я не пью и не курю где-то пол год... по крайней мере 3 раз за пол года, мне нравиться пить пиво на улице на свежем воздухе... поздно вечером или бываю сам рано утром... кайф...
...просто стремно если бобик приедит :) если выйдишь раз в год выпить пиво :)
я не люблю сидеть в тупой компании где куча народа, лучше вообще не буду пить и курить!!!
где эта поправка?
автор топика, написал что пиво продают без этикетки сейчас в Киеве....
и в новостях везде за 28 число написано что можно безалкогольное...
http://www.google.com.ua/#hl=uk&q=%D0%BF%D0%B8%D1%82%D1%8C+%D0%BF%D0%B8%D0%B2%D0%BE+%D0%B2+%D1%83%D0%BA%D1%80%D0%B0%D0%B8%D0%BD%D0%B5+%D0%BF%D0%BE%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D1%83+%D0%B2+%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D0%B5&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=a1e4a221592c4a20
коротко:
полностью:
Товарищи, так безалкогольное пиво можно же пить везде?
вы покупаете бутылку, выливаете все в большой пластиковый стакан и пьете...?
в чем вопрос? или этикетку можно отодрать, они его разве чем-то проверят алкогольное оно или безалкогольное?
безалкогольное пиво на вкус такое же не много горькое...