За последние 24 часа нас посетили 17633 программиста и 1672 робота. Сейчас ищет 1461 программист ...

Прошу помочь с задачей по информатике :) С меня пивко ;)

Тема в разделе "Сделайте за меня", создана пользователем CherryStudent, 29 мар 2015.

  1. CherryStudent

    CherryStudent Новичок

    С нами с:
    29 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Добрый вечер!

    Я совершенно не разбираюсь в PHP, но мне задали задачу по информатике, и я не в силах ее решить :) А тот мальчик, который всегда мне решал такие задачки за борщ - уехал и в онлайне не появится неделю :( А мне надо через три-четыре дня сдавать ее :)

    Ну не мое это ^_^ программирование и прочее :) Поэтому я решила попросить помощи у людей, которые гораздо умнее меня и точно в этом разбираются :-* Надеюсь, что найдется человек, благородный и во всех отношениях замечательный, который поможет мне с этой проблемой :)

    Задача:

    Нужно написать скрипт.

    На адрес вида [адрес сайта]/[файл скрипта].php отправляется GET запрос вида ?id=[идентификатор]&value=[число]. Для каждого идентификатора рядом со скриптом создается файл, вида [идентификатор].txt, где сохраняется значение value. При этом, новые запросы с тем же идентификатором суммируют "старое" и новое значение value. Допустимо сохранять все значения идентификаторов в одном файле в виде [идентификатор]=[value]

    Данные, возвращаемые в ответе на запрос скрипта должны содержать хеш md5 строки, которая составляется так:
    в скрипте определена константа-строка, к которой добавляется дата вида ДД.ММ.ГГГГ, т.е. имеет вид [строка]+[дата]

    Вторая константа определяет, какая именно дата будет добавлена: 1 - Вчерашняя, 2 - Сегодняшняя, 3 - Завтрашняя.

    Я надеюсь, что задача не очень сложная :) Тем более, для таких гуру, обитающих на этом форуме :-* Готова отправить небольшую сумму с небольшой стипендии на пивко в качестве небольшой благодарности от чистого сердца :) Если что-то не очень подробно или ясно написала - напишу подробнее и яснее :)

    Очень важным условием для меня является наличие комментариев по коду, иначе я не разберусь в нем и не смогу ответить на вопрос преподавателя "А это что такое?" :) И тогда явка будет провалена :)
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Халявить не хорошо, но не могу не помочь девушке :)))
    Код (PHP):
    1. <?php
    2. define("CONST1", "value");
    3. define("WHAT_DAY", "3");
    4. // В php ecть функция strtotime, которая понимает по английски. Сделаем массив, 
    5. // который будет преобразовывать константу WHAT_DAY в
    6. // today, tomorrow или yesterday
    7.  
    8. $a = array (1=>"yesterday", 2=>"today", 3=>"tomorrow");
    9. // Если не заданы входные данные послать всех нафиг
    10. if (!isset($_GET["id"]) || !isset($_GET["value"]))
    11.     die("Error in data");
    12.  
    13. // Файлы лучше создавать в отдельном каталоге, чтоб не потерять среди них скрипт
    14. // Папку надо создать, и на unix-машине поставить права 777
    15. $dir = __DIR__ . "/files";
    16. // Мы не хотим, чтоб нам взломали сервер, убираем лишнее из ID (например, ../.../etc/чего-нибудь важное)
    17. $_GET["id"] = basename($_GET["id"]);
    18.  
    19. // Получили имя файла
    20. $fname = "{$dir}/$_GET[id]";
    21.  
    22. // Если файл существует, читаем старое значение, иначе записываем в переменную 0
    23. $old_val = file_exists($fname) ? file_get_contents($fname) : 0;
    24.  
    25. // Считаем новое значение
    26. $new_val = $old_val + $_GET["value"];
    27.  
    28. // пишем в файл
    29. file_put_contents($fname, $new_val);
    30.  
    31. echo md5(CONST1 . date("d.m.Y", strtotime($a[WHAT_DAY])));
    P.S. А какая у вас специальность?
     
  3. CherryStudent

    CherryStudent Новичок

    С нами с:
    29 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Спасибо большое! А я не халявлю, моей специальности не нужна информатика, она идет "в нагрузку". Как Вас отблагодарить? ^_^ Могу положить 100-200 рублей на телефон или кошелек какой-нибудь :)

    Добавлено спустя 1 минуту 29 секунд:
    Забавные комментарии по коду ^_^

    Добавлено спустя 5 минут 11 секунд:
    Вроде более менее разобралась, объяснить смогу, только вот это не поняла:

    Код (Text):
    1. // Мы не хотим, чтоб нам взломали сервер, убираем лишнее из ID (например, ../.../etc/чего-нибудь важное)
    2. $_GET["id"] = basename($_GET["id"]);
    :)
     
  4. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    если в $_GET["id"] передаётся путь, т.е. ссылка, то basename обрежет всё, кроме имени конечного файла.