1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

[PHP]простой вывод скриншотов на сайт

Тема в разделе 'PHP', создана пользователем BEILEC, 6 авг 2013.

  1. TopicStarter Overlay

    BEILEC Пользователи

    Сообщения:
    31
    Лайки:
    12
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    beilec's
    привет!
    Проблема:
    Имеется скрипт "карусели" изображений.
    Изображения вызываются следующий кодом
    HTML:
    <a href="img/shots/1.jpg"><img src="img/shots/1.jpg" width="100" height="100"></A>
    Т.к. на сайте не имеется cms, то нужно вручную редактировать код, чтобы добавить изображение, а добавляем мы тот же код, меняя только имя скриншота.
    (неудобно, особенно человеку, который не знаком с html, да и знакомому с ним хотелось бы облегчить работу)
    Этим то и возможно воспользоваться для решения задачи.

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

    Решение:
    Для того, чтобы добавлять один и тот же код, меняя всего одно значение воспользуемся циклом while на php
    Но, как узнать сколько раз вставлять этот один и тот же код, т.е. сколько картинок загружено в папку img?
    Воспользуемся следующим кодом, который опять же использует while:
    PHP:

    $dir 
    opendir('img/shots');/*Открываем директорию с изображениям*/
    $count 0;/*Изначально значение кол-ва - 0 (для цикла while)*/
    while($file readdir($dir)){/*Условие для цикла*/
        
    if($file == '.' || $file == '..' || $file == 'watermark.png' || $file == 'watermark.php' ||$file == 'original.jpg' || is_dir('img/shots' $file)){/*Исключаем из счёта те файлы, которые нам не нужны*/
            
    continue;
        }
        
    $count++;/*Прибавляем к нулю один, и так пока цикл не выполнится то кол-во раз, сколько файлов обнаружено*/
    Теперь мы имеем кол-во файлов в директории, исключая ненужные.
    Переменная count, выводит это кол-во.
    Используем эту переменную для следующего цикла, который будет вставлять на страницу код вывода изображения столько раз, сколько потребуется(это число определит переменная count)

    PHP:
    $i 1;
      while(
    $i <= $count) {/*Условие цикла, выполнять до тех пор, пока переменная i не будет меньше или равна переменной count*/
        
    echo "<li>
                    <A href=\"img/shots/
    $i.jpg\"><img src=\"img/shots/$i.jpg\" width=\"100\" height=\"100\"></A>
                </li>"
    ;/*Вывести код, обратите внимание на название изображения*/
        
    $i++; /*Увеличить переменную i на один (была 1 стала 2, и цикл дальше повторяется, пока выполняется условие i <=count)*/
      
    }
    $i - это название изображения, если в директории изображений будет 6, то цикл будет выводить этот код, пока $i не станет равным 6, таким образом цикл выведет 6 кодов с разным значением имени изображения.

    В связи с таким решением потребовалось ввести правило для загрузки изображения на сервер в директорию:
    При загрузке изображения, посмотрите какое имя имеет последнее загруженное изображение, имя должно соответствовать порядковому номеру, если изображений 6, то последнее загруженное изображение имеет имя 6.jpg, поэтому требуется присвоить имя 7.jpg изображению, которое Вы собираетесь загрузить на сервер в директорию.

    Тогда первый цикл проверит кол-во изображений в директории, поймёт, что их уже 7, и даст знать второму циклу, что нужно вывести код уже не 6 раз, а 7, с соответственным именем.

    Полный код:




    P.S. За помощью в настройке обращаться в скайп - beilec
    Скрипт не грамотен, но работает на ура.
    пока.
    10000 и dimon4ik1995 нравится это.
  2. Эджектпух Пользователи

    Сообщения:
    16
    Лайки:
    9
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    Втф тим
    Блять ты уже достал свой говнокод лепить
    PHP:
                $dir opendir('img/shots');
    $count 0;
    while(
    $file readdir($dir)){
        if(
    $file == '.' || $file == '..' || $file == 'watermark.png' || $file == 'watermark.php' ||$file == 'original.jpg' || is_dir('img/shots' $file)){
            continue;
        }
        
    $count++;
    }
      
    $i 1;
      while(
    $i <= $count) {
        echo 
    "<li>
                    <A href=\"img/shots/
    $i.jpg\"><img src=\"img/shots/$i.jpg\" width=\"100\" height=\"100\"></A>
                </li>"
    ;
        
    $i++;
      }
    Все конечно заебись - у тебя тут пара файлов и норм
    PHP:
    if($file == '.' || $file == '..' || $file == 'watermark.png' || $file == 'watermark.php' ||$file == 'original.jpg' || is_dir('img/shots' $file))
    А если у меня их 70? Не нужных? Ты про регулярки не слышал?
    PHP:
     while($i <= $count
    Про цикл for тоже нет?
    вес. твой код можно было сократить до
    PHP:
     <?php
    $dir 
    opendir('img/shots');
    while(
    $file readdir($dir))
    {
    if(
    preg_match("([0-9]+\.jpg)",$file  && !is_dir("img/shots/$file")) echo
    <<<HTML
    <li>
                    <A href="img/shots/
    $file"><img src="img/shots/$file" width="100" height="100"></A>
    </li>
    HTML;
    }
  3. abba1 Пользователи

    Сообщения:
    28
    Лайки:
    1
    Репутация:
    0
    Да нормально. Человек старается пишет. Опыт придет со временем.
  4. Эджектпух Пользователи

    Сообщения:
    16
    Лайки:
    9
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    Втф тим
    Чем так - пусть лучше в шару пока ничего не пишет. Те, кто учатся, будут думать, что это правильно и заранее привыкать к такому говнокоду
  5. abba1 Пользователи

    Сообщения:
    28
    Лайки:
    1
    Репутация:
    0
    Ты не видел говнокод.
    Код:
    if ( strlen( $string ) > 3 ) echo "Имя должно содержать не больше 3-х символов";
    elseif ( strlen( $string ) < 3 ) echo "Имя должно содержать не менее 3-х символов";
    else echo "Вы корректно ввели имя"
  6. pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.409
    Лайки:
    1.407
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Пусть пишет, может найдутся более адекватные и менее озлобленные на жизнь критики.
    За мат в посте #2 - неделя воздержания. Не на долго у тебя хватило выдержки не оскорблять людей.
  7. TopicStarter Overlay

    BEILEC Пользователи

    Сообщения:
    31
    Лайки:
    12
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    beilec's
    Все мои темы осмотрел, вот говнюк, и не поленился же.
    Хорошо, объясни мне, пожалуйста, почему мой код не будет работать? Как я понял из твоих сообщений мой код категорически не верен.
    И об этом тоже ссылка.
    А так же посмотри вот эту тему и расскажи об ошибках в ней ссылка
  8. Электроша Пользователи

    Сообщения:
    27
    Лайки:
    18
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    El Dev
    Кто сказал, что он не будет работать? Просто написан через жопу. Неудобен, не оптимизирован и не функционален. Я кажется все разжевал - если у меня в директории 100 лишних файлов, то сколько мне условий надо вписать?! Да и юзать while, когда можно for тоже смысла нет. Я тебе пример написал - там условие (Если не папка и принадлежит регулярному выражению Число.jpg то выводим)
    Вот тебе код, который выглядит намного лучше
    PHP:
    date_default_timezone_set('Europe/Moscow');
    $daydate(w);
    switch(
    $day)
    {
      case 
    1: echo "Самый ужасный день"; break;
      case 
    5: echo "Лучший день на неделе"; break;
      default: echo 
    "Не хороший день";
    }
    Ты доволен?
  9. Электроша Пользователи

    Сообщения:
    27
    Лайки:
    18
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    El Dev
    И еще - никогда не делай вот так c кучей \"
    PHP:
     echo "<li>
                    <A href=\"img/shots/
    $i.jpg\"><img src=\"img/shots/$i.jpg\" width=\"100\" height=\"100\"></A>
                </li>"
    ;/*Вывести код, обратите внимание на название изображения*/
    Для этого есть
    PHP:
    echo
    <<<HTML
    <li><a href="img/shots/$i.jpg"><img src="img/shots/$i.jpg" width="100" height="100"></a>/li>
    HTML;
  10. Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    Вы оба не правы) '
    Одного за двойные ковычки отправить искать алмазы в горы на север, второго вообще отправить подметать ломом пол в армии.
    Алмазы на север искать, так как в любой строке с двойными ковычками пхп ищет спецсимволы и переменные, и я не про конкат посредине строки. И это также ресурсоёмко как искать алмазы в горах на сервере.
    Ломом подметать так как использовать хёр это ЕЩЁ Б.Ь хуже чем предыдущее.
    $a = 'Виталик';
    echo 'Пишите правильно '.$a.'!)';

    Еслиж у вас что-то большое то юзайте нативку или шаблонизатор
  11. TopicStarter Overlay

    BEILEC Пользователи

    Сообщения:
    31
    Лайки:
    12
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    beilec's
    Читал об этом способе вывода, но нигде не вычитал про их различия.. до этого поста. Спасибо
  12. Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    Впринципе строки
    $str = 'abc';
    $str1 = "abc";
    Практически одинаковые, но при интерпритации скрипта переменная $str это просто байты и всё, пхп записывает в переменную и всё. А вот в "abc" пхп будет проверять на наличие 1) \r \n \r \t \s итп. 2) на $[a-z0-9] 3) { и } так как это по синтаксису пхп возможные вставки в строку переменных, делается это функцией проверки вхождения в строку, и не важно на чём написан пхп, это всёравно цикл по байтам в строке как минимум. Так вот если строка не большая, то не беда, но если у вас строчка более нескольких десятков букв всётаки советаю одинарные ковычки.
Черновик сохранён Черновик удалён

Поделиться этой страницей