ВСЕ СТАТЬИ
Блог начинающего программиста
Регистрация
Создание крупного проекта на Java с Нуля

Создание крупного проекта на Java с нуля

Посмотри, как с нуля создаётся сложный проект на Java

Получить видеоуроки

Работа с файлами

Опубликовано: 2016-10-10
Условие задачи.
1)Сделайте форму со следующими полями "Имя" и "Комментарий". 2)Обработайте форму, записав введенные данные в файл с комментариями. 3)На этой же странице выведите все текущие комментарии в таблице(1 комментарий -1 строка).

Примечание: Вы должны подумать, в каком виде надо сохранять комментарии в файл, и чем разделять сами комментарии, чтобы затем было легко разобрать этот файл и вывести необходимую информацию на страницу.

Решение:

<?php
    $fil = fopen ("com.txt", "a+t");
    if (isset ($_POST[name]) && isset ($_POST[comment]))
    {
        fwrite ($fil, $_POST[name] . "\n");
        fwrite ($fil, $_POST[comment] . "\n");
    }
    fclose ($fil);
    $lines = file ('com.txt');
?>
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<form method="post">
  Имя:
  <input type="text" name="name">
  Комментарий: 
        <textarea name="comment">
        </textarea>
  <input type="submit">
</form>
<table border="1">
  <tr>
    <td>Имя</td>
    <td>Комментарий</td>
  </tr>
  <?php
            if (isset ($_POST[name]) && isset ($_POST[comment]))
            {
                $n = count ($lines);
                for ($i = 0; $i < $n; $i +=2)
                {
                    echo '<tr>';
  echo '<td>' . $lines[$i + 0] . '</td>';
  echo '<td>' . $lines[$i + 1] . '</td>';
  echo '</tr>';
  }
  }
  ?>
</table>
</body>
</html>

Дополнено 27.09.2017

Задание урока 9 из книги Д. Ляпина А. Никитина "PHP - это просто"
Изготовить галерею фотографий.
Возможности:

  • при загрузке фото на сервер проверка типа файла, автоматическое создание уменьшенной копии (не более 200 пикселей на наибольшей стороне);
  • просмотр всех уменьшенных фото на одной странице;
  • при щелчке по маленькой фотографии - переход на другую страницу с крупной фотографией.
Подсказки:
  • создать два каталога - для больших и маленьких фото;
  • механизм обхода каталога - для получения списка фотографий

Решение.

Создадим 2 каталога:

  • img_big - для больших изображений
  • img_small - для уменьшенных изображений
Создадим 3 файла:
  • index.php - главная страница нашего сайта галереи фотографий с выводом загруженных фото и с формой для загрузки фото на сервер;
  • function.php - библиотека функций сайта;
  • upload.php - файл-обработчик загрузки файлов, уменьшения изображения, вывода информации о результатах загрузки.


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Галерея фото</title>
    </head>
    <body>
        <h1>Галерея фотографий</h1>
        <?php
        require_once ('function.php');
        //вывод изображений
        $dir = "img_small"; // Путь к директории, в которой лежат малые изображения
        $dir_big = "img_big"; // Путь к директории, в которой лежат большые изображения
        $files = scandir($dir); // Получаем список файлов из этой директории
        $files = excess($files); // Удаляем лишние файлы c '.' ...
        /* Дальше происходит вывод изображений на страницу сайта */
        for ($i = 0; $i < count($files); $i++)
        {
        ?>
        <!-- Делаем ссылку на большую картинку, вывод малых картинок -->
            <a href="<?=$dir_big . "/" . $files[$i]?>" target="_blank"><img src="<?=$dir."/".$files[$i]?>" alt="Фото галереи" /></a>
        <?php
        }
        ?>
        <h2>Загрузить фотографию</h2>
        <form action="upload.php" method="post" enctype="multipart/form-data">
            <p><input type="file" name="file"></p>
            <p><input type="submit" name="load" value="Загрузить файл"></p>
            <br>
        </form>
    </body>
</html>
        

<?php
/**
 * Функция загрузки файла (аплоадер)
 * @param  int    $max_file_size    максимальный размер файла в мегабайтах
 * @param  array  $valid_extensions массив допустимых расширений
 * @param  string $upload_dir       директория загрузки
 * @return array                    сообщение о ходе выполнения
 */
/* В php скрипте реализованы две проверки:
так как хостер ограничивает размер загружаемого файла (на момент написания данного материала у меня на хостинге стоит ограничение в 8 Mb), то проверка максимального размера необходима;
проверка расширения файла позволяет отсеять ненужные файлы до загрузки.
URL фотографии - $destination.  return $destination  А далее вставляете URL фото куда вам надо */
function upload($max_file_size, $valid_extensions, $upload_dir)
{
    setlocale(LC_ALL, 'ru_RU . UTF8');
    $error = null;
    $info  = null;
    $max_file_size *= 1048576;  // перевод размера файла в b
    if ($_FILES['file']['error'] === UPLOAD_ERR_OK)
    {
        // проверяем расширение файла
        $file_extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
        if (in_array(strtolower($file_extension), $valid_extensions))
        {
            // проверяем размер файла
            if ($_FILES['file']['size'] < $max_file_size)
            {
                $file_name = time() . $_FILES['file']['name'];  // к имени файла добавляем метку времени, чтобы исключить одинаковые имена
                $destination = $upload_dir .'/' . $file_name;

                if (move_uploaded_file($_FILES['file']['tmp_name'], $destination))//Перемещает загруженный файл в новое место.
                    $info = 'Файл успешно загружен';
                else
                    $error = 'Не удалось загрузить файл';
            }
            else
                $error = 'Размер файла больше допустимого';
        }
        else
            $error = 'У файла недопустимое расширение';
    }
    else
    {
        // массив ошибок
        $error_values = [

            UPLOAD_ERR_INI_SIZE   => 'Размер файла больше разрешенного директивой upload_max_filesize в php.ini',
            UPLOAD_ERR_FORM_SIZE  => 'Размер файла превышает указанное значение в MAX_FILE_SIZE',
            UPLOAD_ERR_PARTIAL    => 'Файл был загружен только частично',
            UPLOAD_ERR_NO_FILE    => 'Не был выбран файл для загрузки',
            UPLOAD_ERR_NO_TMP_DIR => 'Не найдена папка для временных файлов',
            UPLOAD_ERR_CANT_WRITE => 'Ошибка записи файла на диск'

        ];

        $error_code = $_FILES['file']['error'];

        if (!empty($error_values[$error_code]))
            $error = $error_values[$error_code];
        else
            $error = 'Случилось что-то непонятное';
    }

    return ['info' => $info, 'error' => $error, 'destination'=>$destination];
}

/*
Функция img_resize(): генерация thumbnails
Параметры:
$src             - имя исходного файла
$dest            - имя генерируемого файла
$width, $height  - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
$rgb             - цвет фона, по умолчанию - белый
$quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
*/

function img_resize($src, $dest, $width, $height, $rgb = 0xFFFFFF, $quality = 100)
{
    if (!file_exists($src)) // Проверить наличие указанного файла или каталога.
        return false;
    $size = getimagesize($src);

    if ($size === false)
        return false;
    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
    $icfunc = 'imagecreatefrom' . $format;

    if (!function_exists($icfunc))
        return false;

    $x_ratio = $width  / $size[0];
    $y_ratio = $height / $size[1];

    if ($height == 0)
    {
        $y_ratio = $x_ratio;
        $height  = $y_ratio * $size[1];
    }
    elseif ($width == 0)
    {
        $x_ratio = $y_ratio;
        $width   = $x_ratio * $size[0];
    }

    $ratio       = min($x_ratio, $y_ratio);
    $use_x_ratio = ($x_ratio == $ratio);

    $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
    $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
    $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width)   / 2);
    $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

    // если не нужно увеличивать маленькую картинку до указанного размера
    if ($size[0]<$new_width && $size[1]<$new_height)
    {
        $width = $new_width = $size[0];
        $height = $new_height = $size[1];
    }

    $isrc  = $icfunc($src);
    $idest = imagecreatetruecolor($width, $height);

    imagefill($idest, 0, 0, $rgb);
    imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);

    $i = strrpos($dest,'.');
    if (!$i) return '';
    $l = strlen($dest) - $i;
    $ext = substr($dest,$i+1,$l);

    switch ($ext)
    {
        case 'jpeg':
        case 'jpg':
            imagejpeg($idest,$dest,$quality);
            break;
        case 'gif':
            imagegif($idest,$dest);
            break;
        case 'png':
            imagepng($idest,$dest);
            break;
    }

    imagedestroy($isrc);
    imagedestroy($idest);

    return true;
}
/* Функция для удаления лишних файлов: Текущий каталог и родительский пропускаем, не выводим файлы Thumbs.db */
function excess($files)
{
    $result = [];
    for ($i = 0; $i < count($files); $i++)
    {
        if ($files[$i] != "." && $files[$i] != ".."  && $files[$i] != "Thumbs.db")
            $result[] = $files[$i];
    }
    return $result;
}
?>
        

  <?php
/*файл–обработчик формы загрузки пользовательского файла.*/
include("function.php"); // подключаем файл с функциями
// Запускаем функцию загрузки
if(!empty($_POST['load'])) // если кнопка "Загрузить файл"  нажата
{
    $valid_extensions = ['jpg', 'jpeg', 'png', 'gif'];
    $upload_dir = 'img_big';  // папка для загрузки (создать на сервере)
    $message = upload(1, $valid_extensions, $upload_dir);
    // Выводим сообщение
    echo $message['error'] ? $message['error'] : $message['info'];
    // Если загрузка файла на сервер успешная
    if(isset($_FILES["file"]))//Определяет, была ли установлена переменная значением отличным от NULL
    {
        ini_set('max_file_uploads', '3'); /*Установить максимальное количество загружаемых на сервер файлов за один раз*/
        $file = $_FILES["file"]["tmp_name"];
        $myfile_name = $_FILES["file"]["name"];
        $file_type = substr($myfile_name, strrpos($myfile_name, '.')+1); //strrpos - Возвращает позицию последнего вхождения символа
        $file_size = $_FILES["file"]["size"];
        $error_flag = $_FILES["file"]["error"];

        // Если ошибок не было
        if($error_flag == 0)
        {
            $f_thum="big/thum_" . $myfile_name;

            print("<br>" . "Имя файла на нашем сервере (во время запроса): " . $file . "<br>");
            print("Имя файла на компьютере пользователя: " . $myfile_name . "<br>");
            print("Имя thumb-файла на сервере: " . $f_thum . "<br>");
            print("MIME-тип файла: " . $file_type . "<br>");
            print("Размер файла: " . $file_size . "<br><br>");
        }
    }
    echo '<br /><br />';
    echo '<a href="index.php">Вернуться на страницу галереи</a>';
    $src = $message['destination'];

/* чтобы изменить размеры фото необходимо запустить функцию img_resize с нужными параметрами ширины и высоты нового изображения. Если нужен только один параметр, например ширина 200px, то высоту задаем равную 0 (ноль). При этом получим пропорциональное фото с шириной 200px.*/

$file_name = time() . $_FILES['file']['name'];
$dest = 'img_small/' . $file_name;

img_resize($src, $dest, 200, 0);
}
?>
        

Проверить работу галереи фотографий в новом окне.


Кипящий чайник с выхлопом клубов пара из носика

Интенсив «Основы программирования»

Бесплатный курс по программированию

Начать обучение

Бесплатный курс по основам PHP

Бесплатный Видеокурс по PHP!

Пример создания PHP-сайта!

Подробнее

Комментарии

Пока комментарий нет

Оставить свой комментарий:

Важно! Только у зарегистрированных пользователей имеется защита оригинального имени. Поэтому посторонние пользователи не имеют возможности комментировать от их имени. Зарегистрироваться

Имя:
Электронная почта:
Текст комментария:
Введите код с картинки:
картинка
PHP хостинг ХостиЯ