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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Очень медленный вывод с scandir()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помогите пожалуйста решить проблему с медленным выводом картинок на сайт
usernew
Отправлено: 21 Мая, 2014 - 19:28:55
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




У меня жутко медленно выводятся файлы по средствами функции scandir(), иногда бывало превышало лимит выполнения скрипты.
Долго грузит именно когда перебирается массив и выводится картинкой. Всего файлов в директории - 14, все в jpg форматах. PHP 5-ой версии, ошибок не каких не выдается.
Вот немножко укороченный код программы.


<?php
$allFiles = scandir("./image/data", 1);
?>
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="./css/file.css">
<meta charset="UTF-8">
<title>Files</title>
</head>
<body>
<div class="contant">
<?php
echo("<div class=\"img\">");
foreach ($allFiles as $value) {
if ($value != "." & $value != "..") {
echo("<img src=\"./image/data/$value\" alt=\"\">");
}
}
echo("</div>");
?>
</div>
</body>
</html>

Прошу, подскажите как решить эту беду. Буду премного благодарен!
 
 Top
3d_killer
Отправлено: 22 Мая, 2014 - 11:36:27
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




сохранять пути к файлам в БД, а не сканировать каждый раз директорию
 
My status
 Top
usernew
Отправлено: 22 Мая, 2014 - 12:47:14
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Вариант очень даже хороший, но в эту директорию картинки попадают не только через php-формы. Любой пользователь хостинга может добавить туда картинки. Но всем раздавать логин и пароль базы данных не хочется.
Есть какой-нибудь другой способ?
 
 Top
esterio
Отправлено: 22 Мая, 2014 - 13:50:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




админка для этого и сушествует чтобы пользователи не лезли в базу и на сервер, а тупо загружали файлики через формочку
 
 Top
Ch_chov
Отправлено: 22 Мая, 2014 - 14:54:29
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




usernew пишет:
if ($value != "." & $value != "..")
 
 Top
usernew
Отправлено: 23 Мая, 2014 - 04:50:01
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Цитата:
админка для этого и сушествует чтобы пользователи не лезли в базу и на сервер, а тупо загружали файлики через формочку

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

CODE (htmlphp):
скопировать код в буфер обмена
  1. if ($value != "." & $value != "..")

Если этого не сделать, то $valuse[0] == . $value[1] == ..
 
 Top
Ch_chov
Отправлено: 23 Мая, 2014 - 06:14:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




usernew пишет:
Если этого не сделать

Обратите внимание на подсветку синтаксиса в вашем коде. Почему пловина строки выделена синим, а другая половина жёлтым?
 
 Top
usernew
Отправлено: 23 Мая, 2014 - 19:24:44
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Да, я увидел ошибку и исправил её.
CODE (htmlphp):
скопировать код в буфер обмена
  1. if ($value != "." || $value != "..")

Но и это не сильно помогло. Сейчас у меня в папке около 20-30 картинок и скрипт часто их не успевает загрузить до окончания времени выполнения. Я пробовал без php, только на html вывести картинки и все получилось очень быстро. В чем еще может быть проблема?
 
 Top
Ch_chov
Отправлено: 23 Мая, 2014 - 19:55:07
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




scandir для директории с 30 файлами должен выполнятся мгновенно. Профилируйте скрипт и определите где именно "тормозит".

usernew пишет:
Я пробовал без php, только на html вывести картинки и все получилось очень быстро.
Интересно, как это вы на html папки сканируете.
 
 Top
LIME
Отправлено: 23 Мая, 2014 - 20:03:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




нуууу....
какой ||
&&
(Добавление)
лазить по всей фс))
так и сломать ссистему недолго
аккуратно))
 
 Top
DelphinPRO
Отправлено: 23 Мая, 2014 - 23:56:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




scandir по директории из 30 файлов отработает мгновенно. Пукнуть не успеете. Проблема в другом месте. Однозначно.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LIME
Отправлено: 24 Мая, 2014 - 07:44:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




люди!
не издеваетесь надо мной
автор гуляет в родительские диры
читайте чтоли
 
 Top
Ch_chov
Отправлено: 24 Мая, 2014 - 08:30:47
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




LIME пишет:
люди!
не издеваетесь надо мной
автор гуляет в родительские диры
читайте чтоли

usernew пишет:
$allFiles = scandir("./image/data", 1);
 
 Top
LIME
Отправлено: 24 Мая, 2014 - 08:35:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




usernew пишет:
Вот немножко укороченный код программы.
хотя наверное scandir и в Африке scandir
ну тогда
DelphinPRO пишет:
Проблема в другом месте. Однозначно.
 
 Top
usernew
Отправлено: 24 Мая, 2014 - 19:50:54
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Это не родительские диры, ./image/ примерно тоже самое что и image/
Вот полный код страницы

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
  4.  
  5. include("./script/session.php");
  6. if (addSession()) {
  7.         die(header("Location: ./index.php"));
  8. }
  9. if(isset($_REQUEST['fileAdd'])){
  10.         die(header("Location: ./fileAdd.php"));
  11. }
  12.  
  13. $xhprof_data = xhprof_disable();
  14. include_once "./xhprof_lib/utils/xhprof_lib.php";
  15. include_once "./xhprof_lib/utils/xhprof_runs.php";
  16. $xhprof_runs = new XHProfRuns_Default();
  17. $run_id = $xhprof_runs->save_run($xhprof_data, "test1");
  18. echo "<a href=\"./xhprof_html/index.php?run=$run_id&source=test1\"><h1>Test1</h1></a>";
  19. echo "\n";
  20. ?>
  21. <!doctype html>
  22. <html>
  23. <head>
  24.         <link rel="stylesheet" href="./css/file.css">
  25.         <meta charset="UTF-8">
  26.         <title>Files</title>
  27. </head>
  28. <body>
  29.         <div class="contant">
  30.                 <div class="titlePhoto">
  31.                 <p>Photo</p>
  32.                 </div>
  33.                 <div class="usePhoto">
  34.                         <form action="./file.php" method="post">
  35.                                 <input type="submit" name="fileSave" value="Скачать">
  36.                                 <input type="submit" name="fileAdd" value="Добавить">
  37.                         </form>
  38.                 </div>
  39.                 <div class="img">
  40.                 <?php
  41.                 xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
  42.  
  43.                 $allFiles = scandir("./image/data", 1);
  44.                 foreach ($allFiles as $value) {
  45.                         if ($value != "." && $value != "..") {
  46.                                 echo("<img src=\"./image/data/$value\" alt=\"\">");
  47.                         }
  48.                 }
  49.  
  50.                 $xhprof_data = xhprof_disable();
  51.                 include_once "./xhprof_lib/utils/xhprof_lib.php";
  52.                 include_once "./xhprof_lib/utils/xhprof_runs.php";
  53.                 $xhprof_runs = new XHProfRuns_Default();
  54.                 $run_id = $xhprof_runs->save_run($xhprof_data, "test2");
  55.                 echo "<a href=\"./xhprof_html/index.php? run=$run_id&source=test2\"><h1>Test2</h1></a>";
  56.                 echo "\n";
  57.  
  58.                 ?>
  59.                 </div>
  60.         </div>
  61. </body>
  62. </html>
  63.  


Я прикрепил 2 скриншота, на 1 из них верхняя часть страницы - "Test1" , а на 2 сам вывод картинок - "Test2". Вроде бы как по таблице, то всё нормально, но выводит всё ровно медленно. Сейчас он выводит 30 фотографий, но если туда залить до 40 фотографий, то уже время совершения скрипты заканчивается и выводит что не может отобразить страницу.
Что можно сделать?

(Отредактировано автором: 24 Мая, 2014 - 20:04:04)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB