Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вывод последних загруженных изображений
Форумы портала PHP.SU » » Вопросы новичков » Вывод последних загруженных изображений

Страниц (2): [1] 2 »
 

1. foozzi - 16 Февраля, 2012 - 21:07:33 - перейти к сообщению
В общем очень надо осуществить вывод последних загруженных на сервер изображений из папки.
Пробовал колдовать через filemtime но ничего не вышло....
Подскажите плиз
2. Okula - 16 Февраля, 2012 - 22:44:24 - перейти к сообщению
Нужно писать информацию о загруженном файле в базу.
3. foozzi - 16 Февраля, 2012 - 22:46:05 - перейти к сообщению
Okula пишет:
Нужно писать информацию о загруженном файле в базу.

а на файлах как то можно?
4. Okula - 16 Февраля, 2012 - 23:02:08 - перейти к сообщению
Используй базу данных SQLite3 если хочешь на файлах.
5. Bio man - 16 Февраля, 2012 - 23:10:52 - перейти к сообщению
зачем БД по пустякам трогать? вот на filemtime, все очень просто.
PHP:
скопировать код в буфер обмена
  1. //$rgFileNames = array();
  2. $iMinutes = 5;
  3. foreach(glob("{*.jpg,*.gif,*.png}", GLOB_BRACE) as $filename){
  4.         if(filemtime($filename) >= time()-$iMinutes*60)
  5.                 //$rgFileNames[] = $filename;
  6.                 echo "<img src=\"$filename\">";
  7. }

Okula пишет:
Используй базу данных SQLite3 если хочешь на файлах.

MySQL тоже на файлах и что теперь считать работу с БД тем же самым, что и с файлами?
Не путайте понятия БД и работы с файлами и ФС
6. Okula - 16 Февраля, 2012 - 23:19:02 - перейти к сообщению
Bio man пишет:
MySQL тоже на файлах и что теперь считать работу с БД тем же самым, что и с файлами?
Не путайте понятия БД и работы с файлами и ФС

Не сравнивай MySQl и SQLite это два разных вида баз данных. SQLite не использует модель клиент-сервер, это обычный бинарный файл, который можно разместить в файловой системе на одном уровне со скриптом.
В отличии от твоего примера, который будет сканировать всю папку в целом и возвращать в массиве данные всех имеющихся данных, тем самым нагружая проект сильнее, использование базы данных сделает работу скрипта менее ресурсоёмкой.
Так что твой код проигрывает. Подумай прежде чем советовать Улыбка
7. Bio man - 16 Февраля, 2012 - 23:36:19 - перейти к сообщению
при чем тут клиент-сервер? ТС имел ввиду на файлах вместо БД а ты ему опять БД советуешь.
Okula пишет:
твой код проигрывает
а вот и нет.
во первых мой код проще. не нужно каждый раз обращатся к БД и при добавлении записывать новые строки в БД.
во вторых БД тоже сканирует все записи и выбирает по условию, и зависит от БД сколько времени ей понадобится что бы выбрать нужные данные, и быстрее это или нет тоже зависит от БД. конечно выборка из SQLite быстрее чем из MySQL.
в третьих - отпадает лишний код который будет совершать действия над БД.
(Добавление)
тем более можно ограничить чтение до, например, 20 файлов.
8. Bio man - 16 Февраля, 2012 - 23:43:27 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. //$rgFileNames = array();
  2. $iMinutes = 5;
  3. $iCounter = 0;
  4. foreach(glob("{*.jpg,*.gif,*.png}", GLOB_BRACE) as $filename){
  5.        if($iCounter == 20) break;
  6.        if(filemtime($filename) >= time()-$iMinutes*60){
  7.              //$rgFileNames[] = $filename;
  8.              echo "<img src=\"$filename\">";
  9.              $iCounter++;
  10.        }
  11.    
  12. }
9. Okula - 16 Февраля, 2012 - 23:47:16 - перейти к сообщению
Bio man пишет:
во вторых БД тоже сканирует все записи и выбирает по условию

ты не прав, SQL запрос отсортирует данные и возьмёт только указанное кол-во строк (используя LIMIT и DESC для сортировки по убыванию), это не поиск по LIKE.
К тому же база данных использует кеширование, что значительно ускоряет работу с ней.
Bio man пишет:
во первых мой код проще. не нужно каждый раз обращатся к БД и при добавлении записывать новые строки в БД.

причём тут это? речь идёт не о записи в базу, а о выводе. Да и SQL запрос много времени и ресурсов не занимает.
(Добавление)
Bio man пишет:
тем более можно ограничить чтение до, например, 20 файлов.

Хаха, Радость ты не ограничиваешь чтение, ты ограничеваешь только работу цикла.
К тому же в твоём примере будет выводиться 20 ПЕРВЫХ записей из массива, а в массиве они лежат в неотсортированном по времени изменения виде.
Так что уже код будет работать неверно Улыбка
10. Bio man - 16 Февраля, 2012 - 23:53:49 - перейти к сообщению
а сортировка не сканирует таблицу?
11. Panoptik - 16 Февраля, 2012 - 23:54:01 - перейти к сообщению
запись в обычный текстовый файл images.txt
PHP:
скопировать код в буфер обмена
  1.  
  2. copy($image,$image_place.$image_name);
  3. $fp = fopen('images.txt','a');
  4. fputs($fp,$image_name.' '.time());
  5. fclose($fp);
  6. //reading
  7. $img_arr = file('images.txt');
  8. foreach($img_arr as $key => $val) {
  9.   $img = explode(' ',$val);
  10.   $arr_res[$img[1]] = $img[0];
  11. }
  12. $res = krsort($arr_res);
  13. $i = 0;
  14. foreach($res as $val) {
  15. if(++$i >=5) break;
  16. echo $val;
  17. }
  18.  
12. Bio man - 16 Февраля, 2012 - 23:55:38 - перейти к сообщению
Okula пишет:
К тому же в твоём примере будет выводиться 20 ПЕРВЫХ записей из массива
в массиве всего 20 записей. ну можно ведь и массив отсортировать!
13. Okula - 16 Февраля, 2012 - 23:59:14 - перейти к сообщению
Вобщем, я высказал своё мнение по поводу реализации данной задачи. Выбор за автором.
14. Bio man - 17 Февраля, 2012 - 00:00:30 - перейти к сообщению
Okula, хочешь еще проще?
просто сохраняем файл имя которого будет состоять из метки UNIX TIMESTAMP и брать файлы по имени. по умолчанию файлы сортируются по имени.
15. Okula - 17 Февраля, 2012 - 00:10:45 - перейти к сообщению
Bio man, а если автор хочет сохранить оригинальные имена файлов? Улыбка
Короче, хватит велосипеды придумывать Радость

 

Powered by ExBB FM 1.0 RC1