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 :: Версия для печати :: Очень медленный вывод с scandir()
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Очень медленный вывод с scandir()

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

1. usernew - 21 Мая, 2014 - 19:28:55 - перейти к сообщению
У меня жутко медленно выводятся файлы по средствами функции 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>

Прошу, подскажите как решить эту беду. Буду премного благодарен!
2. 3d_killer - 22 Мая, 2014 - 11:36:27 - перейти к сообщению
сохранять пути к файлам в БД, а не сканировать каждый раз директорию
3. usernew - 22 Мая, 2014 - 12:47:14 - перейти к сообщению
Вариант очень даже хороший, но в эту директорию картинки попадают не только через php-формы. Любой пользователь хостинга может добавить туда картинки. Но всем раздавать логин и пароль базы данных не хочется.
Есть какой-нибудь другой способ?
4. esterio - 22 Мая, 2014 - 13:50:46 - перейти к сообщению
админка для этого и сушествует чтобы пользователи не лезли в базу и на сервер, а тупо загружали файлики через формочку
5. Ch_chov - 22 Мая, 2014 - 14:54:29 - перейти к сообщению
usernew пишет:
if ($value != "." & $value != "..")
6. usernew - 23 Мая, 2014 - 04:50:01 - перейти к сообщению
Цитата:
админка для этого и сушествует чтобы пользователи не лезли в базу и на сервер, а тупо загружали файлики через формочку

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

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

Если этого не сделать, то $valuse[0] == . $value[1] == ..
7. Ch_chov - 23 Мая, 2014 - 06:14:13 - перейти к сообщению
usernew пишет:
Если этого не сделать

Обратите внимание на подсветку синтаксиса в вашем коде. Почему пловина строки выделена синим, а другая половина жёлтым?
8. usernew - 23 Мая, 2014 - 19:24:44 - перейти к сообщению
Да, я увидел ошибку и исправил её.
CODE (htmlphp):
скопировать код в буфер обмена
  1. if ($value != "." || $value != "..")

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

usernew пишет:
Я пробовал без php, только на html вывести картинки и все получилось очень быстро.
Интересно, как это вы на html папки сканируете.
10. LIME - 23 Мая, 2014 - 20:03:00 - перейти к сообщению
нуууу....
какой ||
&&
(Добавление)
лазить по всей фс))
так и сломать ссистему недолго
аккуратно))
11. DelphinPRO - 23 Мая, 2014 - 23:56:26 - перейти к сообщению
scandir по директории из 30 файлов отработает мгновенно. Пукнуть не успеете. Проблема в другом месте. Однозначно.
12. LIME - 24 Мая, 2014 - 07:44:03 - перейти к сообщению
люди!
не издеваетесь надо мной
автор гуляет в родительские диры
читайте чтоли
13. Ch_chov - 24 Мая, 2014 - 08:30:47 - перейти к сообщению
LIME пишет:
люди!
не издеваетесь надо мной
автор гуляет в родительские диры
читайте чтоли

usernew пишет:
$allFiles = scandir("./image/data", 1);
14. LIME - 24 Мая, 2014 - 08:35:36 - перейти к сообщению
usernew пишет:
Вот немножко укороченный код программы.
хотя наверное scandir и в Африке scandir
ну тогда
DelphinPRO пишет:
Проблема в другом месте. Однозначно.
15. usernew - 24 Мая, 2014 - 19:50:54 - перейти к сообщению
Это не родительские диры, ./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 фотографий, то уже время совершения скрипты заканчивается и выводит что не может отобразить страницу.
Что можно сделать?

 

Powered by ExBB FM 1.0 RC1