Рубрика: PHP

  • Php урок 10. Использование цикла foreach

    Использование цикла foreach:

    Конструкция foreach предоставляет простой способ перебора массивов. foreach работает только с массивами и объектами, и будет генерировать ошибку при попытке использования с переменными других типов или неинициализированными переменными. Существует два вида синтаксиса:

    1. foreach (array_expression as $value) statement
    2. foreach (array_expression as $key => $value) statement

    Первый цикл перебирает массив, задаваемый с помощью array_expression. На каждой итерации значение текущего элемента присваивается переменной $value и внутренний указатель массива увеличивается на единицу (таким образом, на следующей итерации цикла работа будет происходить со следующим элементом).

    Второй цикл будет дополнительно соотносить ключ текущего элемента с переменной $key на каждой итерации.

    Примеры работы с циклом:

    <?
    $names = ["Александр", "Алексей", "Артур", "Кирилл"];
    $names_with_keys = ["Александр" =>"HTML Верстальщик", "Алексей" => "Программист", "Константин" => "Дизайнер", "Кирилл" => "SEO Специалист"];
    foreach ($names as $name) {
      echo $name."<br>";
    }
    echo "<hr>";
    foreach ($names_with_keys as $name => $who) {
      echo $name." - ".$who."<br>";
    }
    ?>

     

     

    Простой поисковик

    <?
    /*$str=file_get_contents("https://yandex.kz/search/?lr=164&msid=1482499324.38647.22901.11213&text=%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0");
    echo $str;
    $text=explode(">",$str); 
    foreach($text as $domain)
    {
      $d1=explode("<",$domain); 
      if(strpos($d1[0],".kz")>0)
      {
        if(filter_var("http://".$d1[0], FILTER_VALIDATE_URL))
          echo $d1[0]."<br>";
      }
    }*/
    $url="https://www.google.com/search?hl=en&site=imghp&tbm=isch&source=hp&biw=1024&bih=667&q=%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0&oq=%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0&gs_l=img.3..0l10.3851.7313.0.7490.17.11.3.2.2.0.187.1093.7j3.10.0....0...1ac.1.64.img..2.15.1115.MosgDsalpas";
    $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_URL,$url);
    $result=curl_exec($ch);
    //echo $result;
    ?>
    <?
    /*$str=file_get_contents("https://yandex.kz/search/?lr=164&msid=1482499324.38647.22901.11213&text=%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0");
    echo $str;
    $text=explode(">",$str); 
    foreach($text as $domain)
    {
      $d1=explode("<",$domain); 
      if(strpos($d1[0],".kz")>0)
      {
        if(filter_var("http://".$d1[0], FILTER_VALIDATE_URL))
          echo $d1[0]."<br>";
      }
    }*/
    mysql_connect("localhost","root","");
    mysql_select_db("google");
    $t=mysql_query("select * from domain where status=0 limit 1");
    $r=mysql_fetch_array($t);
    $start=rand(0,5)*20;
    if(isset($r['domain']))
      {
      $url=$r['domain'];
      mysql_query("update domain set status=1 where status=0 limit 1");
      }
    else
      $url="https://www.google.com/search?q=одежда&hl=en&biw=1024&bih=667&site=imghp&tbm=isch&ei=LTNdWIbzIYysswHGqZtI&start={$start}&sa=N";
    
    $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
    echo "Обрабатываем домен: ".$url;
    echo "<hr>";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_URL,$url);
    $result=curl_exec($ch);
    $title=explode("</title>",explode("<title>",$result)[1])[0];
    echo "<h1>".$title."</h1>";
    $text=explode(">",$result); 
    foreach($text as $domain)
    {
      $d1=explode("<",$domain); 
      if(strpos($d1[0],"@")>0)continue;
      if(strpos($d1[0],".kz")>0 or  strpos($d1[0],".ru")>0 or strpos($d1[0],".com")>0 )
      {
        if(filter_var("http://".$d1[0], FILTER_VALIDATE_URL))
        {
          echo $d1[0]."<br>";
          mysql_query("insert into domain (domain) values ('{$d1[0]}')");
        }
      }
    }
    ?>

     

  • Php урок 12. Функция замены строк.

    Функция замены строк str_replace()

    str_replace Заменяет все вхождения строки поиска на строку замены.

    Описание функции:

    mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

    Эта функция возвращает строку или массив, в котором все вхождения search в subject заменены на replace.

    search

    Искомое значение, также известное как needle (иголка). Для множества искомых значений можно использовать массив.

    replace

    Значение замены, будет использовано для замены искомых значений search. Для множества значений можно использовать массив.

    subject

    Строка или массив, в котором производится поиск и замена, также известный как haystack (стог сена).

    Если subject является массивом, то поиск с заменой будет осуществляться над каждым элементом subject, а результатом функции также будет являться массив.

    count

    Если передан, то будет установлен в количество произведенных замен.

    Возвращаемые значения

    Эта функция возвращает строку или массив с замененными значениями.

    Примеры использования функции:

    <?
    $name = "Александр";
    $str = "Здравствуйте &n. Спешим вас обрадовать что ваш заказ был успешно оформлен.<br> &n, если вы хотите учавствовать в акции нашего магазина пройдите по <a href=''>ссылке</a>.<br> &n, мы всегда рады вам в нашем магазине, ждем вашего визита :)";
    echo str_replace('&n', $name, $str);
    ?>

    Этот код выведет:

    Здравствуйте Александр. Спешим вас обрадовать что ваш заказ был успешно оформлен.
    Александр, если вы хотите учавствовать в акции нашего магазина пройдите по ссылке.
    Александр, мы всегда рады вам в нашем магазине, ждем вашего визита :)

    Создание поискового робота

     

    <?php
    mysql_connect("localhost","root","");
    mysql_select_db("google");
    
    $doc = new DOMDocument();
    
    $doc->loadHTMLFile("http://personal24.kz/karaganda/");
    //Навигация по аттрибутам
    $elements=$doc->getElementsByTagName('a');
    
    if(!is_null($elements))
    {
      foreach($elements as $element){
        
      echo $href=$element->getAttribute("href");
      if(strpos($href,"#")===false)
        mysql_query("insert into `links` (`link`) values ('{$href}');");
      }
    }
    
    $table=mysql_query("select * from `links`");
    
    while($r=mysql_fetch_array($table))
    {
    $doc->loadHTMLFile($r['link']);
    //Навигация по аттрибутам
    $elements=$doc->getElementsByTagName('a');
    
    if(!is_null($elements))
    {
      foreach($elements as $element){
        echo $href=$element->getAttribute("href");
        if(strpos($href,"#")===false)
          mysql_query("insert into `links` (`link`) values ('{$href}');");
      }
    }
    
    
    $elements = $doc->getElementsByTagName('title');
    $title="";
    if(!is_null($elements))
    {
      foreach($elements as $element){
        $nodes=$element->childNodes;
        foreach ($nodes as $node){
          echo $title.=$node->nodeValue;
        }
      }
    }	
    $elements = $doc->getElementsByTagName('h1');
    
    $h1="";
    if(!is_null($elements))
    {
      foreach($elements as $element){
        $nodes=$element->childNodes;
        foreach ($nodes as $node){
          echo $h1.=$node->nodeValue;
        }
      }
    }	
    
      
    mysql_query("update `links` set `h1`='{$h1}',
    `title`='{$title}',`status`='1' where `id`='{$r['id']}'");
    
    }
    
    
    ?>
    

     

     

  • Php урок 9. Сжатие изображений

    PHP и GD library — работа с графикой

    В этой статье рассмотрены вопросы работы в PHP c графической библиотекой GD library — открытие, вывод на экран и сохранение изображений.

    Вступление

    Обработка изображений сейчас очень востребована в скриптах языка программирования PHP. Рассмотрим наиболее частые случаи работы с графическими файлами.

    Для начала убедитесь, что у вас установлена библиотека GD library — просто запустите скрипт с функцией phpinfo(); В результате выполнения скрипта будет выведена информация об этой библиотеке (содержится в блоке gd):

    Чтение изображений

    Нашими первыми функциями будут создание нового изображения или открытие уже существующего. Пока рассмотрим лишь открытие существующего изображения:

    // переменная, которая указывает на путь к нашему изображению
    $im = @imagecreatefromjpeg('test.jpg'); 
    if ($im === false) {   
     die ('Не удается открыть изображение');
    }
    echo 'Изображение успешно открыто';

    Как видите, функция imagecreatefromjpeg() используется просто для открытия изображения типа JPEG, но не вывода его на дисплей. Переменная $im содержит путь к изображению. Если указанного файла не существует, то выдается сообщение «Не удается открыть изображение».

    Если же вы хотите открыть изображение не JPEG, а, к примеру, GIF, то нужно вызвать другую функцию:

    // переменная, которая указывает на путь к нашему изображению
    $im = @imagecreategif('test_gif.gif'); 
    if ($im === false) {
        die ('Не удается открыть изображение');
    }
    echo 'Изображение успешно открыто';

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

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

    Открытие файлов разных типов

    Наша универсальная функция может открывать разные типы графических файлов путем определения расширения файла:

    $image = open_image('test_jpg.jpg'); 
    if ($image === false) {
        die ('Не удается открыть изображение');
    }
    echo 'Изображение успешно открыто'; 
    function open_image ($file) {
        // Получаем информацию об расширении файла
        $extension = strrchr($file, '.');
        $extension = strtolower($extension);
        switch($extension) {
            case '.jpg':
            case '.jpeg':
                $im = @imagecreatefromjpeg($file);
                break;
            case '.gif':
                $im = @imagecreategif($file);
                break;
             // ... и так далее
             default:
                $im = false;
                break;
        }
        return $im;
    }

    Но даже это решение не решает всех проблем: а что делать, если у файла расширение задано неправильно? Ведь JPG картинке можно запросто дать расширение GIF (test_jpg.gif) или GIF картинку назвать ‘test_gif.txt’.

    Решение будет следующее — перебор возможных способов открытия файл функциейimagecreate(). Ведь типов графических файлов (наиболее распространенных) не так и много, что позволяет довольно быстро точно определить этот самый тип.

    Вот пример такого скрипта:

    $image = open_image('test_jpg.jpg'); 
    echo 'Изображение успешно открыто'; 
    function open_image ($file) {
        # JPEG:
        $im = @imagecreatefromjpeg($file);
        if ($im !== false) { return $im; }
        # GIF:
        $im = @imagecreategif($file);
        if ($im !== false) { return $im; }
        # PNG:
        $im = @imagecreatepng($file);
        if ($im !== false) { return $im; }
        # GD File:
        $im = @imagecreategd($file);
        if ($im !== false) { return $im; }
        # GD2 File:
        $im = @imagecreategd2($file);
        if ($im !== false) { return $im; }
        # WBMP:
        $im = @imagecreatewbmp($file);
        if ($im !== false) { return $im; }
        # XBM:
        $im = @imagecreatexbm($file);
        if ($im !== false) { return $im; }
        # XPM:
        $im = @imagecreatexpm($file);
        if ($im !== false) { return $im; }
        # Попытка открыть со строки:
        $im = @imagecreatestring(file_get_contents($file));
        if ($im !== false) { return $im; }
        return false;
    }

    Как видите, идея довольно просто — мы просто по очереди вызываем функциюimagecreate() до тех пор, пока не определим тип графического файла.

    Еще можно определить тип файла через функцию getimagesize() — она возвращает массив, который содержит информацию о файле — [width, height, imageType] (ширина, высота, тип файла) — более подробно об этой функции — getimagesize.

    Теперь, когда мы знаем как правильно открыть изображение, рассмотрим функции его обработки.

    Вывод на экран и сохранение изображения

    После того, как вы откроете изображение и произведете с ним манипуляции, естественно есть желание посмотреть результаты работы. Для этого существуют специальные функции, такие как imagegif() и imagejpeg().

    Вот пример их использования:

    // Открываем изображение
    $image = open_image('test_jpg.jpg');
    // Некоторые манипуляции с изображением (изменение размера, цвета и т.п.) 
    // Вывод изображения на экран
    imagejpeg($image); 
    function open_image ($file) {
        // полный листинг функции приведен выше
    }

    Если вы выполните этот скрипт по указанной выше ссылке, то результат вас удивит: вместо изображения вы можете увидеть лишь набор непонятных символов — это будет в браузере Opera и Mozilla Firefox, браузеры на движке IE (cам Internet Explorer, Avant и Maxton) умеют корректно определять тип открываемого файла.

    Происходит это по той простой причине, что мы не отправили в браузер корректного поля заголовка Content-Type header. Ведь по умолчанию стоит тип ‘text/html‘, вот поэтому браузеры неправильно определили тип файла — вместо изображения вывели на экран текстовый файл. Что из этого получилось, вы уже видели.

    Для решения этой проблемы необходимо задать формат данных явно с помощью поля заголовка Content-Type:

    // Открываем изображение
    $image = open_image('test_jpg.jpg'); 
    // Некоторые манипуляции с изображением (изменение размера, цвета и т.п.) 
    // Отправляем поле заголовкаheader ('Content-Type: image/jpeg'); 
    // Выводим изображение на экранimagejpeg($image); 
    function open_image ($file) {
        // полный листинг функции приведен выше
    }

    Если вы теперь запустите этот скрипт, то увидите, что изображение отображается корректно во всех браузерах. Также есть возможность сохранить картинку на жесткий диск. Еще можно явно задать имя сохраняемой картинки — для этого используется второй аргумент в функции imagejpeg().

    Вот как это выглядит:

    // Открываем изображение
    $image = open_image('test_jpg.jpg');
    if ($image === false) {
     die ('Не удается открыть изображение'); 
    } 
    // Некоторые манипуляции с изображением (изменение размера, цвета и т.п.) 
    // Сохранение изображения в той же папке, что и файл test_jpg.jpg
    imagejpeg($image, 'my_image.jpg'); 
    function open_image ($file) {
        // полный листинг функции приведен выше
    }

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

    Вот еще несколько практических примеров использования библиотеки GD library

    Рисование полигонов

    С помощью функции imagepolygon() можно создавать полигон (многоугольник).

    Описание функции

    bool imagepolygon (resource image, array points, int num_points, int color)

    imagepolygon() создаёт многоугольник на изображении.

    image — указывает на изображение, на котором будет нарисован многоугольник

    points — это PHP-массив, содержащий вершины полигона, т.е. points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, и т.д.

    num_points это общее количество вершин.

    color — цвет линий многоугольника, задается функцией imagecolorallocate()

    Также нам потребуется использовать функцию imagecreate () для создания изображения, задать координаты многоугольника в виде массива, количество координат и цвет линий многоугольника.

    Вот сам скрипт:

    // создаем холст (чистое изображение)
    $image = imagecreate(200, 110); 
    // цвет фона
    $bg = imagecolorallocate($image, 10, 129, 239); 
    // цвет линий
    $color = imagecolorallocate($image, 255, 255, 255); 
    // рисуем многоугольник (полигон)
    imagepolygon($image,array (0, 0,100, 90,180, 100,100,10 ),4,$color);
    // выводим изображение на экран
    header("Content-type: image/gif");
    imagegif($image);

    Поворот изображения

    Используя библиотеку GD Library с помощью функции imagerotate () можно вращать изображение на заданный угол.

    Описание функции

    resource imagerotate (resource src_im, float angle, int bgd_color)

    Осуществляет поворот изображение src_im на угол angle.

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

    // Изображение, которое мы будем переворачивать
    $image = 'ice_age.jpg'; 
    // На какое количество градусов
    // (положительные числа - против часовой, отрицательные - против нее)
    $degrees = 90; 
    // Указываем поле заголовка для типа файлов .jpg,
    // если используются другие типы заменяем на png или gif
    header('Content-type: image/jpeg'); 
    // Создаем холст (пустую картинку)
    $source = imagecreatefromjpeg($image); 
    // Поворачиваем изображение
    $rotate = imagerotate($source, $degrees, 0); 
    // Выводим повернутое изображение в браузер
    imagejpeg($rotate);

    Конвертирование изображения в серый цвет (полутоновое)

    Немного теории, чтобы были понятными алгоритмы преобразования изображения из цветного (RGB) в серое (YIQ):

    Цветовая модель – Способ распределения и задания цвета в конкретной программе или системе. Наиболее используемые в компьютерной графике и видео цветовые модели: RGB (красный, зелёный, синий), YUV (Y – сигнал, определяющий полутон или яркость, U и V – сигналы, определяющие цветность) и YIQ (цветовая модель, применяемая в видеосигналах NTSC).

    YIQ цветовая модель (YIQ color model)

    Каждый цвет в модели YIQ задается с помощью установки значений трех параметров: Y — интенсивности (luminance,) и двух цветностей I и Q, позволяющих совместно управлять созданием цвета с помощью зеленого, синего, желтого и пурпурного цветов.

    Так установка минимальных значений I и Q (0, 0) приводит к получению зеленого цвета, а установка их максимальных значений (255,255) дает пурпурный цвет. Каждая из компонент YIQ модели может изменяться в диапазоне от 0 до 255.

    Подготавливаем холст

    Первая часть скрипта выполняет функции подготовки изображения к конвертированию цвета:

    //Файл, который мы будет конвертировать
    $file = 'cat_1.jpg'; 
    // Поле заголовка
    header('Content-type: image/jpeg'); 
    // Размеры изображения
    list($width, $height) = getimagesize($file); 
    // Создаем изображение JPEG из файла
    $source = imagecreatefromjpeg($file); 
    // Создаем холст
    $bwimage= imagecreate($width, $height); 
    // Создаем 256-цветную палитру
    for ($c=0;$c<256;$c++){
      $palette[$c] = imagecolorallocate($bwimage,$c,$c,$c);
    } 
    //Функция yiq для преобразования в серый цвет
    function yiq($r,$g,$b){
      return (($r*0.299)+($g*0.587)+($b*0.114));
    }

    Генерация черно-белой картинки

    В коде присутствует два цикла for для обхода всего изображения по координатам Y и X.

    С помощью функции imagecolorat () возвращаем индекс цвета пикселя в цветовой палитре, который находится на изображении (переменная $source) в точке с координатамиxy (переменные $x$y).

    Далее идет вызов функции yiq() для преобразования цветов изображения в серые тона. В самом конце используется функция imagesetpixel() для рисования пикселя заданным цветом в точке с координатами xy на изображении image.

    // Считываем оригинальное изображение по пикселям
    for ($y=0;$y<$height;$y++){
      for ($x=0;$x<$width;$x++){
        $rgb = imagecolorat($source,$x,$y);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF; 
        // Используем функцию yiq для изменения rgb-палитры
        // нашего цветного изображения, чтобы преобразовать его в серое
        $gs = yiq($r,$g,$b);
        imagesetpixel($bwimage,$x,$y,$palette[$gs]);
      }
    } 
    // Выводим в браузер преобразованное изображение
    imagejpeg($bwimage);

    И на последок  сжатие изображений

     

    <?
    function compress($path,$file)
    {
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    //error_reporting(0);
    ini_set('memory_limit', '512M');
    if($ext=='jpg' || $ext=='jpeg'|| $ext=='png')
    {
     $sfile=$path."s_".$file;
     $lfile=$path."l_".$file;
     $fullfile=$path.$file;
     if(!($im = imagecreatefromjpeg($fullfile)))
     $im = imagecreatefrompng($fullfile);
     if($im)
     {
     $iw = imagesx($im); $ih = imagesy($im);
     $k = 650 / $iw;
     if($k>1)$k=1;
     $sx = floor($iw * $k); $sy = floor($ih * $k);
     $im_m = imagecreatetruecolor($sx, $sy);
     imagealphablending( $im_m, false );
     imagesavealpha( $im_m, true );
     $transparent = imagecolorallocatealpha($im_m, 255, 255, 255,255);
    
     imagefilledrectangle($im_m, 0, 0, $sx, $sy, $transparent); 
     imagecopyresampled($im_m, $im, 0, 0, 0, 0, $sx, $sy, $iw, $ih);
     $r_l = imagejpeg($im_m,$lfile);
    
     $iw = imagesx($im); $ih = imagesy($im);
     $k = 100 / $iw;
     if($k>1)$k=1;
     $sx = floor($iw * $k); $sy = floor($ih * $k);
     $im_m = imagecreatetruecolor($sx, $sy);
     imagealphablending( $im_m, false );
     imagesavealpha( $im_m, true );
     $transparent = imagecolorallocatealpha($im_m, 255, 255, 255, 127);
     imagefilledrectangle($im_m, 0, 0, $sx, $sy, $transparent); 
     imagecopyresampled($im_m, $im, 0, 0, 0, 0, $sx, $sy, $iw, $ih);
     $r_s = imagejpeg($im_m,$sfile);
     }
    else
     {
     copy($fullfile, $lfile);
     copy($fullfile, $sfile);
     }
    }
    error_reporting(1);
    }
    ?>

    ссылка для закачки проекта. http://ikurs.kz/alexey.zip

     

  • Php урок 7. .htaccess и $_SERVER

    .htaccess

    htaccess (с точкой в начале имени) – это файл, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок.

    Как известно, конфигурационные директивы сервера Apache находятся в файлe httpd.conf. Но далеко не всегда у Вас будут права доступа к этому файлу. Например, если Вы используете для хостинга виртуальный сервер, когда один сервер Apache обслуживает множество сайтов, то, естественно, Вам никто не позволит менять его конфигурацию. Но, тем не менее, вы можете конфигурировать работу сервера в своих директориях. И делать вы это можете с помощью файлов .htaccess.

    Файл .htaccess может быть размещен в любом каталоге. Директивы этого файла действует на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).

    Изменения, вносимые в файлы .htaccess, вступают в силу немедленно и не требуют перезагрузки сервера, в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.

    Настройки httpd.conf, разрешающие применение файлов .htaccess

    Для того, что бы эти файлы .htaccess можно было использовать — необходимы соответствующие настройки главного конфигурационного файла. В файле httpd.conf должны быть прописаны директивы, которые разрешат файлу .htaccess переопределять конфигурацию web-сервера в каталоге. Эта директива называется AllowOverride. Она может быть установлена как для всего сервера (глобально), так и для отдельного каталога.

    Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: All, None, AuthConfig, FileInfo, Indexes, Limit, Options.

    Для того чтобы дать директивам файлов .htaccess максимальные права следует прописать в httpd.conf:

    AllowOverride All

    Примечание

    При желании название конфигурационного файла можно изменить, и например, назвать его не .htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Но все же рекомендуется этого не делать.

    Синтаксис .htaccess

    Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах .htaccess.

    Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/

    Если вы не знаете путь от корня сервера, то Вы можете его узнать, спросив у администратора сервера, либо можете посмотреть сами, запустив на сайте функцию PHP — phpinfo(). Она выведет на экран конфигурацию PHP в виде фиолетовых таблиц. В них Вам необходимо найти переменную doc_root и посмотреть ее значение — это будет путь от корня сервера до Вашей основной директории.

    • В именах доменов обязательно должны быть указаны протоколы, например:

    Redirect / http://www.newsite.ru

    Примеры использования .htaccess

    Глобальное перенаправление (редирект) на другой адрес:

    Redirect / http://www.newsite.ru

    Перенаправление (редирект) только при запросе определенных страниц:

    redirect /company http://www.newsite.com/newcompany 
    redirect /forum http://www.newsite.com/newforum

    При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.

    Перенаправление (редирект) только посетителей с определенным IP-адресом:

    SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir" 
    RewriteCond %{REDIR} redir 
    RewriteRule ^/$ /only_for_you.html

    Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.html.

    Изменение названия индексной страницы:

    DirectoryIndex index.html index.php index.shtml

    Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

    Выполнять код PHP в файлах HTML

    RemoveHandler .html .htm 
    AddType application/x-httpd-php .php .htm .html .phtml

    Добавив эти строки в .htaccess вы дадите директиву серверу выполнять инструкции PHP не только в файлах с расширением *.php и *.phtml, но и в файлах с расширением *.htm и *.html.

    Обработка ошибок Apache

    ErrorDocument 401 /401.html 
    ErrorDocument 403 /403.html 
    ErrorDocument 404 /404.html 
    ErrorDocument 500 /500.html

    При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.

    401 ошибка — Требуется авторизация (Authorization Required).

    403 ошибка — пользователь не прошел аутентификацию, доступ запрещен (Forbided).

    404 ошибка — Документ не найден (Not Found).

    500 ошибка — Внутренняя ошибка сервера (Internal Server Error).

    Запрет на отображение содержимого каталога при отсутствии индексного файла

    Options –Indexes

    Определение кодировки, в которой сервер «отдает» файлы

    AddDefaultCharset windows-1251

    Определение кодировки на загружаемые файлы

    CharsetSourceEnc windows-1251

    Запрет доступа ко всем файлам

    deny from all

    Запрещен доступ ко всем файлам и каталогам в текущей директории.

    Разрешить доступ только с определенного IP-адреса

    order deny,allow 
    deny from all 
    allow from 195.135.232.70

    Строка order deny,allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 195.135.232.70. Если в первой строке поменять порядок следования директив на order allow,deny, то доступ для данного IP-адреса не будет открыт, так как директива deny, выполняемая последней перекроет действия директивы allow.

    Запретить доступ с определенного IP-адреса

    deny from 195.135.232.70

    Запретить доступ к определенному файлу

    <Files config.php> 
      deny from all 
    </Files>

    Запрещен доступ посетителей к файлам config.php. Этот запрет не действует на скрипты web-сервера. Они по прежнему будут иметь доступ к этому файлу.

    Запретить доступ к файлам с определенным расширением

    <Files "*.conf"> 
      deny from all 
    </Files>

    Здесь запрещен доступ к файлам с расширением *.conf. Директива , при указании имени файлов, позволяет использовать подстановочные символы.

    ? — любой одиночный символ
    * — любая последовательность символов, исключая символ / (слеш)

    Запретить доступа к файлам с несколькими типа расширений

    <Files ~ "\.(inc|conf|cfg)$"> 
      deny from all 
    </Files>

    Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива , по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий:
    [тильда] [пробел] [далее_все_без_пробелов]

    Установка пароля на директорию

    <Files>
    AuthName "Admin page" 
    AuthType Basic 
    AuthUserFile /pub/home/server/.pass 
    require valid-user 
    </Files>
    

     

     

    • Перенаправление с www на http://
    • RewriteEngine On
    • RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
    • RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]

     

     

    • Обработка ошибки 404 файл не найден
    • ErrorDocument 404 /404.html

     

    • Динамически создаваемые странички
    • RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ /index.php?id=$1 [NC,L,QSA]

     

     

     

     

     

     

     

    $_SERVER

    $HTTP_SERVER_VARS [удалено]

    (PHP 4 >= 4.1.0, PHP 5)

    $_SERVER — $HTTP_SERVER_VARS [удалено] — Информация о сервере и среде исполнения

    Описание

    Переменная $_SERVER — это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Тем не менее, многие эти переменные присутствуют в » спецификации CGI/1.1, так что вы можете их ожидать их реализации и в конкретном веб-сервере.

    Переменная $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что$HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно). Также учтите, что «длинные массивы» были удалены в версии PHP 5.4.0, поэтому $HTTP_SERVER_VARS больше не существует.

    Индексы

    Вы можете найти (а можете и не найти) любой из следующих элементов в массиве $_SERVER. Заметьте, что немногие элементы, если вобще такие найдутся, будут доступны (или действительно будут иметь значение), если PHP запущен в командной строке.

    ‘PHP_SELF’

    Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например,$_SERVER[‘PHP_SELF’] в скрипте по адресу http://example.com/foo/bar.php будет /foo/bar.php. Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна.

    argv

    Массив агрументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса.

    argc

    Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке).

    ‘GATEWAY_INTERFACE’

    Содержит используемую сервером версию спецификации CGI; к примеру’CGI/1.1‘.

    ‘SERVER_ADDR’

    IP адрес сервера, на котором выполняется текущий скрипт.

    ‘SERVER_NAME’

    Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.

    ‘SERVER_SOFTWARE’

    Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.

    ‘SERVER_PROTOCOL’

    Имя и версия информационного протокола, через который была запрошена страница; к примеру ‘HTTP/1.0‘;

    ‘REQUEST_METHOD’

    Какой метод был использован для запроса страницы; к примеру ‘GET‘, ‘HEAD‘, ‘POST‘, ‘PUT‘.

    Замечание:

    PHP скрипт завершается после посылки заголовков (тоесть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.

    ‘REQUEST_TIME’

    Временная метка начала запроса. Доступна, начиная с PHP 5.1.0.

    ‘REQUEST_TIME_FLOAT’

    Временная метка начала запроса с точностью до микросекунд. Доступна, начиная с PHP 5.4.0.

    ‘QUERY_STRING’

    Строка запросов, если есть, с помощью которой была получена страница.

    ‘DOCUMENT_ROOT’

    Директория корня документов, в которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.

    ‘HTTP_ACCEPT’

    Содержимое заголовка Accept: из текущего запроса, если он есть.

    ‘HTTP_ACCEPT_CHARSET’

    Содержимое заголовка Accept-Charset: из текущего запроса, если он есть. Например: ‘iso-8859-1,*,utf-8‘.

    ‘HTTP_ACCEPT_ENCODING’

    Содержимое заголовка Accept-Encoding: из текущего запроса, если он есть. Например: ‘gzip‘.

    ‘HTTP_ACCEPT_LANGUAGE’

    Содержимое заголовка Accept-Language: из текущего запроса, если он есть. Например: ‘en‘.

    ‘HTTP_CONNECTION’

    Содержимое заголовка Connection: из текущего запроса, если он есть. Например: ‘Keep-Alive‘.

    ‘HTTP_HOST’

    Содержимое заголовка Host: из текущего запроса, если он есть.

    ‘HTTP_REFERER’

    Адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.

    ‘HTTP_USER_AGENT’

    Содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Среди прочего, вы можете использовать это значение с функцией get_browser() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя

    ‘HTTPS’

    Принимает непустое значение, если запрос был произведен через протокол HTTPS.

    Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.

    ‘REMOTE_ADDR’

    IP-адрес, с которого пользователь просматривает текущую страницу.

    ‘REMOTE_HOST’

    Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR.

    Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. такжеgethostbyaddr().

    ‘REMOTE_PORT’

    Порт на удаленной машине, который используется для связи с веб-сервером.

    ‘REMOTE_USER’

    Аутентифицированный пользователь.

    ‘REDIRECT_REMOTE_USER’

    Аутентифицированный пользователь, если запрос был перенаправлен изнутри.

    ‘SCRIPT_FILENAME’

    Абсолютный путь к скрипту, который в данный момент исполняется.

    Замечание:

    Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER[‘SCRIPT_FILENAME’] будет содержать относительный путь, указанный пользователем.

    ‘SERVER_ADMIN’

    Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.

    ‘SERVER_PORT’

    Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет ‘80‘; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.

    Замечание: Чтобы получить физический (реальный) порт в Apache 2, необходимо установить UseCanonicalName = On иUseCanonicalPhysicalPort = On, иначе это значение может быть подменено и не вернуть реальной значение физического порта. Полагаться на это значение небезопасно в контексте приложений, требующих усиленной безопасности.

    ‘SERVER_SIGNATURE’

    Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.

    ‘PATH_TRANSLATED’

    Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping.

    Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменнаяPATH_TRANSLATED должна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директиву AcceptPathInfo = On в конфигурационном файле httpd.conf для задания переменной PATH_INFO.

    ‘SCRIPT_NAME’

    Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.

    ‘REQUEST_URI’

    URI, который был передан для того, чтобы получить доступ к этой странице. Например, ‘/index.html‘.

    ‘PHP_AUTH_DIGEST’

    При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок ‘Authorization’, который присылается клиентом (его необходимо потом использовать для соответствующей валидации).

    ‘PHP_AUTH_USER’

    Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.

    ‘PHP_AUTH_PW’

    Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.

    ‘AUTH_TYPE’

    Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.

    ‘PATH_INFO’

    Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER[‘PATH_INFO’] будет содержать /some/stuff.

    ‘ORIG_PATH_INFO’

    Исходное значение переменной ‘PATH_INFO’ до начала обработки PHP.

    Список изменений ¶

    Версия Описание
    5.4.0 Массив $HTTP_SERVER_VARS больше не доступен в связи с удалением «длинных массивов».
    5.3.0 Директива register_long_arrays, которая приводила к заполнению $HTTP_SERVER_VARS помечена как устаревшая.
    4.1.0 Введена переменная $_SERVER вместо старой $HTTP_SERVER_VARS.

    Примеры ¶

    Пример #1 Пример использования $_SERVER

    <?php
    echo $_SERVER['SERVER_NAME'];
    ?>

    Результатом выполнения данного примера будет что-то подобное:

    www.example.com

    Примечания

    Замечание:

    Это ‘суперглобальная’ или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта. Нет необходимости выполнять global  $variable; для доступа к ней внутри метода или функции.

    Смотрите также

     

     

    Для проверки правильных настроек сжатия и кэширования используйте

    https://developers.google.com/speed/pagespeed/insights/?url=ipage.com&tab=mobile

     

     

    Включаем сжатие

    <IfModule mod_deflate.c>
    
        #The following line is enough for .js and .css
    
        AddOutputFilter DEFLATE js css
    
        AddOutputFilterByType DEFLATE text/plain text/xml application/xhtml+xml text/css   application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php application/x-httpd-fastphp text/html
    
    
    
        #The following lines are to avoid bugs with some browsers
    
        BrowserMatch ^Mozilla/4 gzip-only-text/html
    
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
    
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    
    </IfModule>

    Настраиваем и включаем кэширование.

    ExpiresActive On

    ExpiresDefault A0

     

    # 1 YEAR - doesn't change often
    
    <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
    
    ExpiresDefault A31536000
    
    </FilesMatch>

     

    # 1 WEEK - possible to be changed, unlikely
    
    <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
    
    ExpiresDefault A604800
    
    </FilesMatch>

     

    # 3 HOUR - core content, changes quickly
    
    <FilesMatch "\.(txt|xml|js|css)$">
    
    ExpiresDefault A10800
    
    </FilesMatch>

     

     

     

    <?
    mysql_connect("localhost","root","");//соединились с базой данных
    mysql_select_db("users");//выбрали базу данных с которой будем работать
    $param=explode("/",$_GET['id']);
    echo "<meta charset='utf-8'>";
    if($param[2]>0)//выводим статью
    {
    $table=mysql_query(
    "select * from posts where `id`='{$param[2]}'");
    while($r=mysql_fetch_array($table))
    {
    $text=str_replace("<"," <",$r['text']);
    $text=strip_tags($text);
    mb_internal_encoding("utf-8");
    $text=mb_substr($text,0,100);
    $text=trim($text);
    $text=str_replace(" ","-",$text);
    $text=str_replace("--","-",$text);
    $text=str_replace("--","-",$text);
    $text=str_replace("--","-",$text);
    echo "
    <img src='http://alexey/images/{$r['img']}' height='300px'>";
    echo "<div style='height:155px;overflow:hidden;text-overflow:ellipsis;'>{$r['text']}</div>";
    }
      
      
    }//выводим категорию
    else 
    {
    echo "<h1>Вы находитесь в категории ".$_GET['id'].".</h1><hr>";
    
    
    $table=mysql_query(
    "select * from posts where `h1`='{$_GET['id']}'");
    
    while($r=mysql_fetch_array($table))
    {
    $text=str_replace("<"," <",$r['text']);
    $text=strip_tags($text);
    mb_internal_encoding("utf-8");
    $text=mb_substr($text,0,100);
    $text=trim($text);
    $text=str_replace(" ","-",$text);
    $text=str_replace("--","-",$text);
    $text=str_replace("--","-",$text);
    $text=str_replace("--","-",$text);
    echo "<a href='http:/{$_GET['id']}/{$text}/{$r['id']}'><img src='../images/{$r['img']}' height='300px'>";
    echo "<div style='height:155px;overflow:hidden;text-overflow:ellipsis;'>{$r['text']}</div><hr><br><br>";
    }
    }
    ?>

     

  • PHP урок 1

    Подготавливаемся к написанию первой программы на PHP

    Скачайте и установите OPEN SERVER пройдя по ссылке
    http://open-server.ru/download/

    Скачайте и установите Notepad++ к себе на компьютер пройдя по ссылке
    https://notepad-plus-plus.org/download/

     

    После того, как вы загрузите обе программы и установите можно приступать к написанию первой программы.

    1. Для запуска OPEN SERVER вам необходимо приостановить работу антивируса и запустить программу от имени администратора. Выбираем «Запуск от имени администратора» в меню которое откроется когда мы щелкнем правой кнопкой по ярлыку.

    у1-1

    рис 1 у1-2   рис 2

    2. Далее щелчком по значку флажок (рисунок 2) и в выпадающем меню и выбираем пункт меню “Папка с сайтами” и создаем папку для своих сайтов, назовите ее своим именем. Там же в меню выбираем пункт “запустить” и запускаем сервер. После запуска значок  становится зеленым.

    3. Далее запускаем программу Notepad++. Выбираем пункт Файл->Сохранить как, в графе “папка” выбираем папку  OpenServer-> domains  (папка находится на диске на который вы установили Openserver) в ней находится недавно созданная вами папка с нашим  будущим сайтом. Выбираем ее и сохраняем файл. Подпишем его как index1 и выберем тип файла php. Если выбрать html  программа работать не  будет.

    у1-3

    рис 3

    Код PHP встраивается в html разметку страницы. Весь код PHP должны содержаться в следующих тегах:
    1-ый вариант:

     

    <?php
    //Ваш код тут
    ?>

    2-ой вариант

    <?
    //Ваш код тут
    ?>

    Если вы не хотите проблем, то пишете по стандартной форме (т.е. 1-ый вариант), а не в сокращенном виде. Это гарантирует, что ваши скрипты будут работать на серверах с разными настройками.

    Создадим простую html страницу с PHP кодом

    Вы можете брать ее за основу для своих проектов:

     <html>
         <head>
             <meta charset='utf-8'>
             <title>
                  Моя первая программа
             </title>
         </head>
         <body>
              <?
              echo "Моя первая программа на PHP";
              ?>
         </body>
    </html>

    Перед тем как сохранить меняем кодировку, преобразуем в UTF -8 без BOM. Обратите внимание на третью строчку кода, ее нужно обязательно указать иначе в браузере вместо страницы отразится массив символов.

    у1-4

    рис 4

    И смотрим результат. Для этого:
    1. Выбираем значек (рис 2), пункт меню Мои сайты-> Ваше имя

    у1-5

    рис 5

    2. И смотрим результат.

    у1-7

    рис 6

    Точка с запятой!

    Точка с запятой означает конец операции в PHP и должна стоять после каждой строчки!

    Скопируйте код echo «Моя первая программа на PHP!»; Несколько раз.

     <html>
         <head>
             <meta charset='utf-8'>
             <title>
                  Моя первая программа
             </title>
         </head>
         <body>
              <?
              echo "Моя первая программа на PHP";
              echo "Моя первая программа на PHP";
              echo "Моя первая программа на PHP";
              ?>
         </body>
    </html>

    Обновите страницу в браузере и посмотрите результат.у1-8

    рис 7

    Переменные в PHP

    Если вы еще никогда не писали программ, не встречались с булевой алгеброй или еще чем, то понятие переменная может быть для вас новой.
    Переменная является средством хранения значения, например такого как текстовая строка «Моя первая программа!» или целое значение 4.

    $peremennaya = «Моя первая программа»;
    $chislo=4;

    Как вы видите, любая переменная начинается со знака доллара. Нельзя о нем забывать, иначе ничего работать не будет. Это распространенная ошибка начинающих программистов PHP! Кроме того, имена переменных чувствительны к регистру, так что используйте тоже самое написание при использовании переменной, что и при объявлении. Переменные $a_number и $A_number различные переменные в глазах PHP.
    Итак, чтобы использовать переменные в языке php, мы должны сначала ее объявить (для этого придумать имя) и задать ей значение. Вот как это правильно сделать:

    <?php
    $hello = "Привет мир!";
    $a_number = 4;
    $anotherNumber = 8;
    ?>

    Разрешенные названия переменных
    Есть несколько правил, которые нужно соблюдать при выборе имени для ваших PHP переменных. PHP переменные должны начинаться с буквы или символа подчеркивания «_». PHP переменные могут состоять только из буквенно-цифровых знаков и символов подчеркивания. a-z, A-Z, 0-9, или _. Переменные из более чем одного слова могут быть разделены подчеркиванием или регистром. $my_variable или $myVariable.
    Теперь объявим фразу «Моя первая программа на PHP!» как переменную и выведем ее значение на экран при помощи echo, код получится такой:

    $a= "Моя первая программа на PHP!";
    echo $a;

    Добавим его в нашу программу и в результате добавится еще одна фраза:

    у1-9

    рис 8

    Echo используется для вывода строки. С ее помощью можно выводить текст в кавычках, значения переменных и т.д. Добавим еще одну строчку в наш код, чтобы фразу Моя первая программа на PHP! Сделать заголовком.

    $a= "Моя первая программа на PHP!";
    Echo $a;
    echo "<h1> Моя первая программа на PHP! </h1>";

    Команда echo, как вы видите, содержит html тег. Использовать html теги не запрещается, ведь php дает нам динамику, а статика и оформление страницы все еще во власти обычного html.

    Результат:

    у1-10

    рис 9

    Осторожно, двойные кавычки!

    Это очень здорово, что вы можете выводить HTML внутри PHP. Тем не менее, вы должны быть осторожны при использовании HTML-кода или любой другой строки, содержащей кавычки! В Эхо используются кавычки, чтобы определить начало и конец строки, поэтому вы должны использовать один из следующих вариантов, если хотите использовать кавычки внутри echo:

    Не используйте кавычки внутри строки.
    Экранируйте внутренние кавычки через слеш. Чтобы избежать обработки внутренних кавычек, просто поставьте обратную косую черту прямо перед ними, то есть \».
    Используйте одинарные кавычки (апострофы) на внутри строки.
    Сделаем заголовок красным цветом:

    echo "<h1 style=\"color: red;\"> Моя первая программа на PHP! </h1>";

    Добавим строчку в код смотрим результат:

    у1-11

    рис 10

    Если вы хотите вывести строку, содержащую цитаты, либо используйте апостроф (‘), либо экранируйте кавычки поставив слеш перед ними (\»). Обратная косая черта скажет PHP, что вы хотите, чтобы символ после нее не был обработан интерпретатором!
    Одновременный вывод переменных и текстовых строк.
    Вы также можете выводить переменные в двойных кавычках (например, «текст текст $variable»). Поставив переменную внутри кавычек («») вы говорите PHP, что вы хотите, чтобы он взял ее значение, преобразовал его к строковому типу и вывел. Пример ниже показывает как правильно сделать такой трюк 🙂

    echo "$a <br />";
    echo " Вы также можете выводить переменные в двойных кавычках $a <br />";

    Добавим эти строки в код программы и результат:

    у1-12

    рис 11

    Размещая переменные внутри строки, вы можете сэкономить время и сделать код более удобным для чтения, но к этому надо привыкнуть. Не забывайте использовать кавычки, одинарные кавычки не будут выводить значения переменных. Одинарные кавычки просто выведут имя переменной в строку, т.е. $ а, а не «Моя первая программа на PHP!».

    Echo не является функцией!
    Echo является не функцией, а языковой конструкцией. При использовании функции в PHP, они имеют очень конкретную форму, которую мы обязательно рассмотрим чуть позже.
    Конкатенация строк PHP
    Самая, пожалуй, распространенная операция со строками — это их конкатенация, или присоединение к одной строке другой. Для конкатенации строк ввели специальный оператор «.» (точка).

    Пример:

    $b= "Широка";
    $c= $b." страна";
    $c.=" моя родная!";
    echo $c;

    На выходе получаем строку целиком: «Широка страна моя родная!».

    у1-13

    рис 12

    Операторы PHP

    Во всех языках программирования, операторы используются для манипулирования или выполнения операций над переменными и их значениями. Вы уже видели оператор конкатенации «.» В уроке Echo и оператор присваивания «=» в тех же начальных уроках. Теперь поговорим о других операторах.

    Есть много операторов, используемых в PHP, поэтому мы разделили их на категории для простоты изучения.

    Операторы присваивания.
    Арифметические операторы.
    Операторы сравнения.
    Строковые операторы.
    Арифметические операторы совместно с операторами присваивания.
    Операторы присваивания используются для задания конкретного значения переменной или присвоения переменной значения другой переменной. Присвоение осуществляется с помощью символа «=». Пример:

    $my_var = 4;
    $another_var = $my_var;

    Теперь и $my_var и $another_var содержат значение 4.
    Присваивание может быть использовано в сочетании с арифметическими операторами.

    Арифметические операторы

    Код для примера:

    echo "<br />";
    echo "<br />"; //Для двух пустых строк
    $addition = 2 + 4;
    $subtraction = 6 - 2;
    $multiplication = 5 * 3;
    $division = 15 / 3;
    echo "Пример сложения: 2 + 4 = ".$addition."<br />";
    echo "Пример вычитания: 6 - 2 = ".$subtraction."<br />";
    echo "Пример умножения: 5 * 3 = ".$multiplication."<br />";
    echo "Пример деления нацело: 15 / 3 = ".$division."<br />";

    Смотрим результат:

    у1-14

    рис 13

    На самом деле все просто, не так ли? 🙂

    Операторы сравнения
    Сравнения используются, чтобы проверить связь между переменными или их значениями. Операторы сравнения используются внутри условных операторов и могут принимать значения истина или лож. Вот наиболее важные из операторов сравнения PHP.

    Строковые операторы

    Как мы уже видели в уроке про Echo, оператор «.» используется, чтобы соединить две строки (или более) вместе, как в примере:

    Конечно же пример:

    $a_string = " Строковые ";
    $another_string = " операторы ";
    $new_string = $a_string . $another_string;
    echo $new_string . "!";

    Результат:

    Строковые операторы!

    Арифметические операторы совместно с операторами присваивания

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

    $counter = $counter + 3;
    Однако, можно сократить запись.

    $counter += 3;
    Эта комбинация операторов будет выполнять ту же задачу. Недостатком такой конструкции является то, что она снижает читаемость кода для тех программистов, которые не привыкли к такому оператору. В общем, «+=» и «-=» являются наиболее широко используемыми операторами.

    Пред, Пост — инкремент и Пред, Пост — декремент
    Это может показаться немного абсурдным, но есть даже короткая запись для общей задачи добавления единицы и вычитания единицы из переменной. Чтобы добавить 1 к переменной, можно использовать оператор «++» (инкремент):

    $d++; что эквивалентно $d += 1; или $d = $d + 1;
    Чтобы вычесть 1 из переменной, можно использовать оператор «—» (декремент):

    $d—; что эквивалентно $d -= 1; или $d = $d — 1;
    В дополнение к этому сокращению вы можете указать, хотите ли вы увеличить переменную до вывода или после. Вот пример того, о чем я говорю:

     

    echo "<br />";
    echo "<br />";
    $d = 4;
    echo "Переменная d=4";
    echo "<br />";
    echo "Значение переменной с пост-инкрементом = " . $d++;
    echo "<br /> Значение переменной после выполнения пост-инкремента = " . $d;
    $d = 4;
    echo "<br />Значение переменной с пред-инкрементом = " . ++$d;
    echo "<br /> Значение переменной после пред-инкремента = " . $d;
    
    echo "<br />";
    echo "<br />";
    $d = 4;
    echo "Значение переменной с пост-декремент = " . $d--;
    echo "<br /> Значение переменной после выполнения пост-декремент = " . $d;
    $d = 4;
    echo "<br />Значение переменной с пред-декремент = " . --$d;
    echo "<br /> Значение переменной после пред-декремент = " . $d;

    Посмотрите на результат:

    у1-15

    рис 14

    Как вы можете видеть, значение переменной $d++ и не отражается эхом в тексте, потому что переменная не увеличивается до окончания выполнения кода. Однако, с пред-инкрементом ++$d, переменная будет отражать результат сразу.

    Комментарии в PHP

    Комментарии в PHP аналогичны комментариям, которые используются в HTML. В синтаксисе PHP комментарий начинаются всегда с особой последовательностью символов и весь текст, который появляется между этих спецсимволов, будет проигнорирован интерпретатором.
    В HTML основная цель комментария в том, чтобы служить в качестве примечания разработчикам, которые могут просматривать исходный код вашего сайта. Комментарии РНР отличаются тем, что они не будут отображаться для посетителей. Единственный способ посмотреть PHP комментарии это открыть файл для редактирования. Это делает PHP комментарии полезными только для PHP — программистов.
    В случае, если вы забыли или не знали, как делаются комментарии в HTML, то смотрите пример ниже.

    <!— This is an HTML Comment —>

    Синтаксис php комментариев: однострочный комментарий
    Тогда как в html есть только один вид комментариев, в PHP имеется целых два типа. Первый тип, который мы будем обсуждать, это однострочный комментарий. То есть комментарий, который говорит интерпретатору игнорировать все, что происходит на этой линии справа от комментариев. Для использования этого комментария следует применять символы «//» или «#» и весь текст справа будет игнорироваться интерпретатором PHP.

    <?php
    #echo "Моя первая программа на PHP!";
    $a= "Моя первая программа на PHP!"; // переменная а
    echo $a; // вывод пременной а
    ?>

    Результат:
    Моя первая программа на PHP!
    Обратите внимание на то, что несколько наших команд echo не были обработаны, потому что мы закомментировали их с помощью специальных символов комментирования. Этот тип комментариев часто используется для быстрой записи о сложном и запутанном коде или чтобы временно удалить строку кода PHP (для отладки).
    Синтаксис php комментариев: многострочный комментарий
    Как и HTML — комментарии, многострочные комментарии в PHP могут быть использованы для комментирования больших блоков кода или для записи комментов в несколько строк. Многострочные комментарии в PHP начинается с «/*» и заканчиваются «*/». Все, что находится между этими символами, будет игнорироваться.

    <?php
    /*echo «Моя первая программа на PHP!»;
    echo «Моя первая программа на PHP!»;*/
    #echo «Моя первая программа на PHP!»;
    $a= «Моя первая программа на PHP!«; // переменная а
    echo $a; // вывод пременной а
    ?>
    Результат:
    Моя первая программа на PHP!
    Комментирование это то, что я могу порекомендовать всем начинающим программистам РНР. Комментируйте свой код! Так много людей пишут сложный код на PHP и либо слишком ленивы, чтобы писать хорошие комментарии или считают, что комментарии не нужны. Тем не менее, вы действительно верите, что вы сможете вспомнить, что именно вы думали, когда писали этот код год или более назад?
    Пишите комментарии сегодня и вы скажете себе за это спасибо в будущем! 🙂 Поставить два слеша и черкануть пару слов о коде не составит большого труда, зато очень пригодится, когда вы к нему вернетесь через некоторое время!

     

    у1-16

    рис 15

     Include в PHP

    Если не вдаваться в подробности PHP, то кратко, команда include принимает имя файла и просто вставляет его содержимое в сценарий, который этот include вызвал.
    Почему это круто? Ну, в первую очередь, это означает, что вы можете напечатать общий заголовок или меню, которые должны быть на каждой вашей странице, а потом просто подключить их с помощью include. Затем, когда вы добавляете новую страницу на сайт, то вместо того, чтобы обновлять ссылки на нескольких страницах, вы можете просто изменить файл, который содержит меню.
    Пример использования команды include
    Скажем, мы хотим создать общий файл меню, чтобы все наши страницы его использовали. Так как мы хотим создать общий файл меню, то давайте сохраним его как «menu.php». Вот как он будет выглядеть:

    <a href=»#»>Главная</a><!—вместо решетки будут ваши ссылки—>
    <a href=»#»>О нас</a>
    <a href=»#»>Ссылки</a>
    <a href=»#»>Контакты</a> <br />

    Сохранить файл как «menu.php» в том же каталоге что и «index.php». Здесь мы воспользуемся этой командой include чтобы добавить наше общее меню.

    <?php
    include(«menu.php«); // меню для нашего сайта
    ?>
    <p>Меню для нашего сайта</p>

    Затем, запустив файл index.php мы получим полноценную страничку с подгруженным меню:

    у1-17

    Можно сделать то же самое для «about.php», «links.php» и «contact.php». Подумайте только, как ужасно было бы, если у вас хотя бы 15 страниц с общим меню, и вы решили добавить еще одну запись в это меню. Вы должны были бы пойти и вручную редактировать каждый файл, чтобы добавить эту новую запись, но при использовании include, вы просто должны изменить «menu.php» и все ваши проблемы будут решены. Это ли не чудо? 😀
    Как все это видят посетители?
    Если мы использовали команду include для вставки меню на каждую из наших веб-страниц, что будет видеть посетитель в исходном коде «index.php»? Да ничего, обычный html текст, т.к. инклуд работает просто как копипаст.
    Поведение include
    Он вставляет содержимое одного файла в другой и все. Очень удобная вещь! Include весьма полезен, если вы хотите включить тот же PHP или HTML текст или сегмент сразу в несколько страниц сайта. Команда инклуд широко используется разработчиками PHP, так же как и Echo.

    Задание.
    1. Создадим простую html страницу с PHP кодом
    2. Сделать «моя первая программа на php» переменной и вывести как заголовок <h1>
    3. Задать стиль заголовку
    4. Добавить комментарии в код
    5. Создать меню в menu.php и присоединить к index.php