PHP определить https или http используется при подключении

Заголовок вышел немного корявый, но суть следующая — как на PHP определить по какому протоколу http или https выполняется текущее подключение к сайту. Это необходимо для тех скриптов, которые используют в своей работе тег <base>, тогда все относительные ссылки будут подключатся по нужным протоколам.

Хотя в документации указано что можно проверять $_SERVER[‘HTTPS’] — все оказалось немного сложнее.

Вот полный сниппет, который у меня получился (точнее сниппет не совсем мой — когда я уже написал свой аналогичный, я нашел немного более красивый у разработчиков OkayCMS) и чуть ниже я расскажу почему именно так.

	// Протокол
        $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http';
        if($_SERVER["SERVER_PORT"] == 443)
            $protocol = 'https';
        elseif (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1')))
            $protocol = 'https';
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on')
            $protocol = 'https';

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

В первой строке определяется протокол $_SERVER[«SERVER_PROTOCOL»] , эта строка заполнена всегда, но в зависимости от конфига сервера там может быть http даже если подключение выполняется по https (да, бывает и такое), поэтому начальное значение берется оттуда.

Далее проверяем порт, если это 443, то это точно https.

Далее если порт не такой, но в конфиге сервера указана переменная $_SERVER[‘HTTPS’], то будем надеяться что он таки не соврал и это таки https (тут есть один ньюанс, которого в сниппете нету для такого экзотического конфига как ISAPI + IIS, значение  $_SERVER[‘HTTPS’] будет равно ‘off’, в случае обычного подключения, а что будет в случае https — я не знаю, т.к. проверить это не могу, просто учтите)

Ну и вишенка на тортике, это предпоследняя строка, если используются reverse proxy аля Cloudflare или хитро настроенный nginx, то все предыдущие строки будут бодро рапортовать о 80 порте и обычном подключении, а оказывается на самом деле все идет по защищенному протоколу, ибо $_SERVER[‘HTTP_X_FORWARDED_PROTO’] == ‘https’.

На это все, как видите определить http или https на php, не особо сложно, главное учесть все детали.

PHP: Что такое PHP? — Manual

Что такое PHP?

PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) — это распространенный язык программирования общего назначения с открытым исходным кодом. PHP специально сконструирован для веб-разработок и его код может внедряться непосредственно в HTML.

Простой ответ, но что он может означать? Вот пример кода:

Пример #1 Пример программирования на PHP

<!DOCTYPE html>
<html>
    <head>
        <title>Пример</title>
    </head>
    <body>

        <?php
        echo "Привет, я - скрипт PHP!";
        ?>

    </body>
</html>

Вместо рутинного вывода HTML-кода командами языка (как это происходит, например, в Perl или C), скрипт PHP содержит HTML с встроенным кодом (в нашем случае, это вывод текста «Привет, я — скрипт PHP!»). Код PHP отделяется специальными начальным и конечным тегами <?php и ?>, которые позволяют «переключаться» в «PHP-режим» и выходить из него.

PHP отличается от JavaScript тем, что PHP-скрипты выполняются на сервере и генерируют HTML, который посылается клиенту. Если бы у вас на сервере был размещен скрипт, подобный вышеприведенному, клиент получил бы только результат его выполнения, но не смог бы выяснить, какой именно код его произвел. Вы даже можете настроить свой сервер таким образом, чтобы обычные HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта.

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

Хотя PHP, главным образом, предназначен для работы в среде веб-серверов, область его применения не ограничивается только этим. Читайте дальше и не пропустите главу Возможности PHP либо, начните непосредственно с Вводного руководства, если вас интересует исключительно веб-программирование.

Пошаговая настройка Apache с выбором версий php + Nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.04

В интернете кучу статей по настройке сервера, настройки Apache, Nginx и т.п. В данной статье будет пошагово настроен простой shared хостинг. Все операции производятся через консоль.

В посте будут решены и описаны следующий задачи:

1. Установка Apache + PHP
2. Возможность выбора версий PHP

3. Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.
4. Установка Nginx с модулем pagespeed от google
5. Настройка Nginx как reverse proxy

Все этапы будут содержать описание и пояснения. Сам пост писался больше для себя, чтобы не потерять порядок настройки, но будет очень полезным для новичков, которые начинают разбираться в администрировании сервера. В качестве сервера установлен Ubuntu 16.0.4 только с SSH.

ЭТАП 1 (Установка Apache + PHP)

Запускаем оболочку с root правами:

sudo -i

Устанавливаем apache:
apt install -y apache2

Ключ
 -y 
нужен для того чтобы в процессе установки, автоматически на все вопросы отвечал положительно. К примеру если выполнить:
 apt install apache2 

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

Устанавливаем php (как mod_php)

 apt install -y php libapache2-mod-php 

На данном этапе у нас установиться php версии 7 как модуль apache.

ЭТАП 2 (Возможность выбора версий PHP)

На первом этапе мы установили сервер Apache + PHP при чем PHP у нас работает как модуль Apache. Существует несколько режимов работы PHP подробную информацию можно прочитать по ссылке «Коротко о CGI, FastCGI, PHP-FPM и mod_php».

Если вам лень читать, то объясню проще:

1. mod_php — сам Apache выполняет php скрипт.

Плюсы: работает быстро, требует минимум настроек и знаний
Минусы: скрипты выполняются от пользователя apache (как правило www-data)

2. CGI/FastCGI — Сервер Apache запускает прикладной скрипт интерпретатора php-cgi, который в свою очередь выполняет php скрипт

Плюсы: скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx + PHP), конфигурацию PHP можно сделать индивидуальной
Минусы: скорость работы, дополнительная настройка

3.PHP-FPM — это модернизированный fast-cgi сервер который постоянно держит готовые для работы пул-процессов.

Плюсы: скорость работы, скрипты выполняются от произвольного пользователя, можно использовать в связке с другими приложениями (Nginx + PHP-FPM — самая распространная реализация)
Минусы: дополнительная настройка, занимает порт, на каждого пользователя открывается свой порт.

Мы остановимся на CGI/FastCGI. На самом деле многие может испугать, что он самый медленный, но на большинстве shared хостингов, именно этот режим работы (ispmanager использует именно этот режим работы). Нам потребуется собрать из исходников версии php которые нам необходимы.

2.1 Сборка php из исходников

Обновляем репозиторий:

apt update

Устанавливаем необходимые для сборки пакеты:
apt install -y make \
git autoconf \
lynx \
wget \
build-essential \
libxml2-dev \
libssl-dev \
libbz2-dev \
libcurl4-openssl-dev \
libpng12-dev \
libfreetype6-dev \
libxpm-dev \
libmcrypt-dev \
libmhash-dev \
libmysqlclient-dev \
libjpeg62-dev \
freetds-dev \
libjson-c-dev \
re2c \
zlib1g-dev \
libpcre3 \
libpcre3-dev \
unzip \
libxslt1-dev

Символ \ используется как перенос строки, для удобства чтения.

Создаем папки для php:

mkdir -p /opt/source/php
mkdir -p /opt/php/

Переходим в директорию в которой будут храниться исходники php
cd /opt/source/php

Скачиваем необходимую версию php и распаковываем ёё:
wget -c http://php.net/get/php-5.6.18.tar.bz2/from/this/mirror -O php-5.6.18.tar.bz2 tar xvjf php-5.6.18.tar.bz2

В последней команде мы скачали по ссылке php-5.6.18 и сохранили как php-5.6.18.tar.bz2
После чего распаковали архив.

Переходим в директория скаченного и распакованного php

cd /opt/source/php/php-5.6.18

Конфигурируем php
./configure --enable-cli \
 --prefix=/opt/php/php-5.6.18		\
 --disable-rpath		\
 --enable-calendar		\
 --enable-discard-path 		\
 --enable-fastcgi		\
 --enable-force-cgi-redirect		\
 --enable-fpm		\
 --enable-ftp		\
 --enable-gd-native-ttf		\
 --enable-inline-optimization		\
 --enable-mbregex		\
 --enable-mbstring		\
 --enable-pcntl		\
 --enable-soap		\
 --enable-sockets		\
 --enable-sysvsem		\
 --enable-sysvshm		\
 --enable-zip		\
 --with-bz2		\
 --with-curl		\
 --with-curl 		\
 --with-freetype-dir		\
 --with-gd		\
 --with-gd 		\
 --with-gettext		\
 --with-jpeg-dir 		\
 --with-jpeg-dir=/usr/lib/		\
 --with-libdir=/lib/x86_64-linux-gnu		\
 --with-libxml-dir=/usr		\
 --with-mcrypt		\
 --with-mhash		\
 --with-mysql		\
 --with-mysql 		\
 --with-mysqli		\
 --with-mysqli 		\
 --with-openssl		\
 --with-pcre-regex		\
 --with-pdo-mysql		\
 --with-png-dir=/usr		\
 --with-zlib		\
 --with-zlib-dir

Стоить обратить внимание на строку —prefix=/opt/php/php-5.6.18. Именно в эту директорию будет собран проект. Также вы самостоятельно можете добавлять или удалять необходимые модуль и компоненты php. Но при конфигурации обязательно должны быть —enable-fastcgi и —enable-force-cgi-redirect. После конфигурации собираем php
make
make install

Процесс сборки непривычно долгий, поэтому не стоит переживать по этому поводу. По завершению сборки можно проверить командой:
/opt/php/php-5.6.18/bin/php -v

В результате будет что то вроде:

PHP 5.6.18 (cli) (built: Jun 8 2017 15:59:20)
Copyright © 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies

2.2 Настройка Apache

Далее нам потребуется чтобы Apache вызывал php скрипт через режим fastcgi. Устанавливаем и активируем mod_fcgi

apt install libapache2-mod-fcgid
a2enmod cgi fcgid actions

перезапустим сервис Apache
service apache2 restart

2.3 Создание CGI скрипта

Создадим обертку для запуска PHP-FastCGI

mkdir -p /opt/php/php-5.6.18/fcgi-bin

В данной папке создадим скрипт с именем php со следующим содержимом
#!/opt/php/php-5.6.18/bin/php-cgi. Лично я использую редактор nano.
nano /opt/php/php-5.6.18/fcgi-bin/php

Вставляем код, выходим CTRL+X и подтверждаем изменения.

Делаем файл испольняемым:

chmod +x /opt/php/php-5.6.18/fcgi-bin/php

В той же директории создаем файл php.ini () можно скопировать /opt/source/php/php-5.6.18/php.ini-production.

2.4 Настройка хоста для Apache

В примере будет показана настройка виртуального хоста по умолчанию:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        <IfModule mod_fcgid.c>
            IPCCommTimeout 7200
            FcgidConnectTimeout 320
            MaxRequestLen 25728640
            FcgidMaxRequestsPerProcess 0
            FcgidBusyTimeout 3600
            FcgidOutputBufferSize 0
        </IfModule>

        <FilesMatch "\.ph(p[3-5]?|tml)$">
                SetHandler fcgid-script
                FCGIWrapper /opt/php/php-5.6.18/fcgi-bin/php
        </FilesMatch>
        ErrorLog /var/www/html/error.log
        CustomLog /var/www/html/access.log combined
</VirtualHost>
<Directory /var/www/html>
        Options +Includes +ExecCGI
</Directory>

Перезапускаем настройки Apache:
service apache2 reload

ЭТАП 3 ( Возможность работы сайтов от разных пользователей, с ограничением на чтение директорий других сайтов.)

Для разграничения прав по пользователям у Apache есть 2 разных модуля suEXEC и ITK.

Рассмотрим как работает каждый из них:

ITK — При поступлении запроса, apache создает процесс-обработчик, который наследует права корневого процесса, но после проверки контекста меняет свои права на указанного пользователя.

suEXEC -При поступлении запроса apache запускает CGI и аналогичные собственные или сторонних разработчиков скрипты/программы внутри веб-папки домена от имени указанного пользователя.

suEXEC в нашем варианте предпочтительней из-за особенности архитектуры работы. Устанавливаем suEXEC

apt install apache2-suexec-custom
a2enmod suexec

Важно, для правильной работы suexec необходимы правильно выставить права на директории.
Как располагать директории вы должны определиться сами, в примере приведется пример, и он не является оптимальным.

Иерархия папок следующая:

|--/var/www/ - Корневая папка, права 751 владелец root
|----/php-bin - Папка храннения дефолтных настроек для php
|------/php-5.6.18 - Папка храннения дефолтных настроек для php-5.6.18
|--------php - Исполняемый файл для php-5.6.18
|--------php.ini - Дефольный файл настроке
|--------php.ini - Дефольный файл настроке
|----/apache-cert - папка хранения сертификатов для apache

Создаем папки для пользователя:

mkdir -p /var/www/users/admin
mkdir -p /var/www/users/admin/domain.ru
mkdir -p /var/www/users/admin/apache-log
mkdir -p /var/www/users/admin/php-bin
mkdir -p /var/www/users/admin/temp
mkdir -p /var/www/users/admin/temp/php-session

Копируем файлы настроек для php:
cp /opt/php/php-5.6.18/fcgi-bin/php /var/www/users/admin/php-bin/php
cp /opt/php/php-5.6.18/fcgi-bin/php.ini /var/www/users/admin/php-bin/php.ini

Создаем юзера (важно помнить что все пользователи в группе admin имеют доступ на запуск программ из sudo, поэтому при выборе имени admin он автоматически будет иметь права на выполнения sudo. В данном примере это не критично, но вам следует помнить об этом при создании пользователя).
useradd -m -s /bin/bash admin
passwd admin

Выставляем владельца папки:
chown admin:admin -R /var/www/users/admin

Выставляем корневую директорию для пользователя:
usermod -d /var/www/users/admin admin

Настраиваем виртуальные хосты в apache:
<VirtualHost *:8080>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/users/admin/domain.ru

	SuexecUserGroup admin admin	

	<IfModule mod_remoteip.c>
	      RemoteIPHeader X-Forwarded-For
	      RemoteIPHeader X-Real-IP
	      RemoteIPInternalProxy 127.0.0.1
	</IfModule>

	<ifmodule mod_rewrite.c>
		RewriteEngine On
		RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
	</ifmodule>


	<IfModule mod_fcgid.c>
	    IPCCommTimeout 7200
	    FcgidConnectTimeout 320
	    MaxRequestLen 25728640
	    FcgidMaxRequestsPerProcess 0
	    FcgidBusyTimeout 3600
	    FcgidOutputBufferSize 0
	</IfModule>

	<FilesMatch "\.ph(p[3-5]?|tml)$">
		SetHandler fcgid-script
		FCGIWrapper /var/www/users/admin/php-bin/php
	</FilesMatch>

	ErrorLog /var/www/users/admin/apache-log/error.log
	CustomLog /var/www/users/admin/apache-log/access.log combined
</VirtualHost>
<Directory /var/www/users/admin/www>
	AllowOverride All
	Options +Includes +ExecCGI
</Directory>

В настройках php.ini пользователя меняем session.save_path
session.save_path = /var/www/users/admin/temp/php-session

Перезапускаем apache:

service apache2 restart

ЭТАП 4 (Установка Nginx с модулем pagespeed от google)

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

/etc/apache2/ports.conf
+ Ваши созданные виртуальные хосты

Перезапускаем Apache:
service apache2 restart

Устанавливаем ngnix:
apt-get install nginx

Собираем Nginx с pagespeed

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

apt install -y build-essential zlib1g-dev libpcre3 libpcre3-dev unzip libxslt1-dev libgd-dev libgeoip-dev

Создаем папки для исходников nginx:
mkdir -p /opt/source/nginx
cd /opt/source/nginx

Скачиваем и распаковываем pagespeed и psol. Yt cnjbn g
wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.11.33.4-beta.zip
unzip v1.11.33.4-beta.zip
cd ngx_pagespeed-1.11.33.4-beta
wget https://dl.google.com/dl/page-speed/psol/1.11.33.4.tar.gz
tar -xzvf 1.11.33.4.tar.gz

Сам psol скачивается и распаковывается в директории с ngx_pagespeed. Переходим в папку с Ngnix
cd /opt/source/nginx

Проверяем версию ngnix (по умолчанию в ubuntu 16.0.4 устанавливается 1.10.0):
nginx -V

Загружаем т версию NGINX:
wget https://nginx.ru/download/nginx-1.10.0.tar.gz
tar -xvzf nginx-1.10.0.tar.gz

Собираем nginx с теми же параметрами что и установленный, но в конце добавляем дополнительные модули:
cd /opt/source/nginx/nginx-1.10.0
./configure \
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads \
--add-module=/opt/source/nginx/ngx_pagespeed-1.11.33.4-beta \
--with-http_mp4_module

Собираем Nginx:
make
make install

Собранный бинарный файл Nginx располагается в директории /opt/source/nginx/nginx-1.10.0/objs/nginx. Для того чтобы установить, требуется просто заменить текущий испоняемый файл Nginx на собранный.

Остановим Nginx, заменим файл, и перезапустим его.

service nginx stop

#Переименовываем (на всякий случай) текущий nginx в nginx_backup:
mv /usr/sbin/nginx /usr/sbin/nginx_backup

# Перемещаем на его место новый собранный бинарник:
mv /opt/source/nginx/nginx-1.10.0/objs/nginx /usr/sbin/nginx

перезапускаем Nginx:
service nginx start

Создаем папку хранения кэша для pagespeed:
/var/www/temp/
/var/www/temp/page-speed/

Добавим /etc/nginx/nginx.conf в секцию http:
pagespeed on;
pagespeed FileCachePath "/var/www/temp/page-speed/";
pagespeed EnableFilters combine_css,combine_javascript,rewrite_images,rewrite_css,rewrite_javascript,inline_images,recompress_jpeg,recompress_png,resize_images;
pagespeed JpegRecompressionQuality 85;
pagespeed ImageRecompressionQuality 85;
pagespeed ImageInlineMaxBytes 2048;
pagespeed LowercaseHtmlNames on;

ЭТАП 5 (Настройка Nginx как reverse proxy )

Скажу скажу что в интернете кучу статей для настройки Nginx как reverse proxy. Я лиш приведу ознакомительный вариант настройки.

server { 

	listen 80; 
	server_name domain.ru; 
	access_log /var/log/nginx.access_log;


	location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { 
		root /var/www/users/admin/domain.ru; 
		index index.html index.php; 
		access_log off; 
		expires 30d; 
		error_page 404 = @prox;
	} 

	location @prox{
		proxy_pass 127.0.0.1:8880; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_set_header X-Forwarded-for $remote_addr; 
		proxy_set_header Host $host; 
		proxy_connect_timeout 60; 
		proxy_send_timeout 90; 
		proxy_read_timeout 90; 
		proxy_redirect off; 
		proxy_set_header Connection close; 
		proxy_pass_header Content-Type; 
		proxy_pass_header Content-Disposition; 
		proxy_pass_header Content-Length;
	}


	location ~ /\.ht { 
		deny all; 
	} 


	location / { 
		proxy_pass 127.0.0.1:8880; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_set_header X-Forwarded-for $remote_addr; 
		proxy_set_header Host $host; 
		proxy_connect_timeout 60; 
		proxy_send_timeout 90; 
		proxy_read_timeout 90; 
		proxy_redirect off; 
		proxy_set_header Connection close; 
		proxy_pass_header Content-Type; 
		proxy_pass_header Content-Disposition; 
		proxy_pass_header Content-Length; 
	} 
} 


HTML, DHTML, JavaScript, PHP, MySQL, XML+XLST, Ajax, Api

Что такое HTML?

Всемирная паутина соткана из Web-страниц (Web-pages), а эти страницы создаются при помощи языка разметки гипертекста (HyperТext Markup Language, HTML). HTML — это язык разметки. Вы используете HTML для разметки текстового документа, точно так же, как это делает редактор при помощи жирного красного карандаша. Эти пометки служат для определения формата (или стиля), который будет использован при выводе текста на экран монитора. читать дальше…

Что такое DHTML?

DHTML (динамический HTML) — это набор средств, которые позволяют создавать интерактивные Web-страницы без увеличения загрузки сервера.

DHTML построен на объектной модели документа (Document Object Model, DOM), которая расширяет традиционный статический HTML-документ. DOM обеспечивает динамический доступ к содержимому документа, его структуре и стилям. В DOM каждый элемент Web-страницы является объектом, который можно изменять. DOM не определяет новых тэгов и атрибутов, а просто обеспечивает возможность программного управления всеми тэгами, атрибутами и каскадными листами стилей (CSS). читать дальше…

Что такое JavaScript?

JavaScript предназначен для написания сценариев для активных HTML-страниц. JavaScript не предназначен для создания автономных приложений. Программа на JavaScript встраивается непосредственно в исходный текст HTML-документа и интерпретируется брaузером по мере загрузки документа. С помощью JavaScript можно динамически изменять текст загружаемого HTML-документа и реагировать на события, связанные с действиями посетителя или изменениями состояния документа или окна.

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

Что такое PHP?

PHP (Personal Home Page) — серверный язык создания сценариев. Первая версия PHP была создана Расмусом Лердорфом в 1994 г. и представляла собой набор инструментов для отслеживания посетителей Web-страницы. Сегодня это полноценный мощный язык программирования, его название было изменено как рекурсивное образование PHP HyperText Preprocessor (препроцессор гипертекста PHP).

Конструкции PHP, вставленные в HTML-текст, выполняются сервером при каждом посещении страницы. Результат их обработки вместе с обычным HTML-текстом передается браузеру. читать дальше…

Что такое XML?

XML (eXtensible Markup Language) — расширяемый язык разметки. Основное внимание в XML сосредоточено на данных. В XML структурная разметка данных и представление данных строго разделены. читать дальше…

Что такое XSLT?

XSLT (eXtensible Stylesheet Language Transformations) — расширяемый язык преобразования листов стилей.

Язык XSLT служит транслятором, с помощью которого можно свободно модифицировать исходный текст. XLST играет решающую роль в утверждении XML в качестве универсального языка хранения и передачи данных. Область применения XSLT широка — от электронной коммерции до беспроводного Web. читать дальше…

Что такое AJAX?

Ajax расшифровывается как Asynchronous Javascript And XML (Асинхронные Javascript И XML) и технологией в строгом смысле слова не является.

Если в стандартном веб-приложении обработкой всей информации занимается сервер, тогда как браузер отвечает только за взаимодействие с пользователем, передачу запросов и вывод поступившего HTML, то в Ajax-приложении между пользователем и сервером появляется еще один посредник — движок Ajax. Он определяет, какие запросы можно обработать «на месте», а за какими необходимо обращаться на сервер. читать дальше…

Домены, Сайты, Хостинг, DNS

Домен — уникальный текстовый идентификатор, позволяющий легко запомнить и однозначно определить сайт. С помощью DNS-сервера доменное имя превращается в IP-адрес, по которому находится сервер, на котором распологается сайт.

Сайт (Web-сайт, Web-узел) — совокупность логически связанных web-страниц. Здесь Вы найдете много материалов о том как создать сайт, как сделать его посещаемым и как научить его приносить Вам деньги.

Хостинг (Hosting, Web-hosting, Collocation) — размещение страниц сайта на сервере, постоянно подключенном к Интернет. Эта статья поможет Вам с выбором хостинга для вашего сайта.

API для работы с доменами.

Создание сайта, CMS

Чтобы сделать хороший сайт, Вам прийдется разобраться в тонкостях HTML-верстки, программировании на PHP, javascript. Чтобы сделать простенький сайт достаточно разобраться в работе CMS.

Статья про создание сайтов проведет Вас пошагово от разработки концепции и до заработка

CMS (Content Management System) — система управления содержанием сайта. CMS иначе ещё называют «движек сайта», т.е. программа с помощью которой вы создаете и изменяете сайт, которая отвечает за его работу и отображение. Эта статья поможет Вам с выбором CMS для вашего сайта.

Здесь Вы найдете подборку шаблонов для вашего сайта.

Сервисы для Сайтов

SEO, Продвижение сайтов

SEO (Search Engines Optimization) — комплекс мер, направленный на улучшение позиций сайта в выдаче поисковой системой по конкретным поисковым запросам.

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

Провести комплексный анализ сайта

Работа с изображениями

Здесь собраны различные сервисы работы с изображениями. Большинство примеров с открытым исходным кодом на PHP.

Шифрация и раскодирование

Здесь Вы найдете множество программ и сервисов, которые помогут Вам прочитать закодированное письмо или самому закодировать часть программы или кода. Большинство примеров с открытым исходным кодом.

Чей домен? Чей IP? Чей телефон?

PHP Примеры



PHP Синтаксис

Запись текста в вывод с помощью PHP
Добавить комментарии PHP
Ключевые слова, классы, функции и определяемые пользователем функции не чувствительны к регистру
Имена переменных чувствительны к регистру

Объяснение


PHP Переменные

Создание различных переменных
Тест глобальной области (переменная вне функции)
Тест локальной области (переменная внутри функции)
Используйте ключевое слово global для доступа к глобальной переменной из функции
Используйте массив $GLOBALS[] для доступа к глобальной переменной из функции
Используйте ключевое слово static, чтобы локальная переменная не удалялась после выполнения функции

Объяснение


PHP Echo и Print

Просмотр строк с командой echo
Просмотр строк и переменных с помощью команды echo
Просмотр строк с командой print
Просмотр строк и переменных с помощью команды print

Объяснение


PHP Тип Данных

PHP строки
PHP целое число
PHP число с точкой
PHP массивы
PHP объекты
PHP значение NULL

Объяснение


PHP Строки

Получить длину строки — strlen()
Подсчет количества слов в строке — str_word_count()
Реверс строки — strrev()
Поиск определенного текста в строке — strpos()
Замена текста в строке — str_replace()

Объяснение


PHP Константы

Регистрозависимое имя константы
Не регистрозависимое имя константы

Объяснение


PHP Операторы

Арифметический оператор: Дополнение (+)
Арифметический оператор: Вычитание (-)
Арифметический оператор: Умножение (*)
Арифметический оператор: Разделение (/)
Арифметический оператор: Модуль (%)
Оператор присваивания: x = y
Оператор присваивания: x += y
Оператор присваивания: x -= y
Оператор присваивания: x *= y
Оператор присваивания: x /= y
Оператор присваивания: x %= y
Оператор сравнения: Равный (==)
Оператор сравнения: Идентичный (===)
Оператор сравнения: Не равный (!=)
Оператор сравнения: Не равный (<>)
Оператор сравнения: Не идентичный (!==)
Оператор сравнения: Более чем (>)
Оператор сравнения: Менее чем (<)
Оператор сравнения: Больше или равно (>=)
Оператор сравнения: Меньше или равно (<=)
Оператор инкремента: ++$x
Оператор инкремента: $x++
Оператор декремента: —$x
Оператор декремента: $x—
Логический оператор: И
Логический оператор: ИЛИ
Логический оператор: исключающее ИЛИ
Логический оператор: && (И)
Логический оператор: || (ИЛИ)
Логический оператор: НЕТ
Строковый оператор: Конкатенация $txt1 и $txt2
Строковый оператор: Добавляет $txt2 в $txt1
Оператр массива: Объединение (+)
Оператр массива: Равенство (==)
Оператр массива: Идентичность (===)
Оператр массива: Неравенство (!=)
Оператр массива: Неравенство (<>)
Оператр массива: Неидентичность (!==)

Объяснение


PHP If…Else и Switch Заявления

if заявление
if…else заявление
if…elseif…else заявление
switch заявление

Объяснение


PHP While и For Циклы

while цикл
do…while цикл
Другой do…while цикл
for цикл
foreach цикл

Объяснение


PHP Функции

Создание функции
Функция с одним аргументом
Функция с двумя аргументами
Функция со значением аргумента по умолчанию
Функция возвращающая значение

Объяснение


PHP Массивы

Индексный массив
count() — Возвращает длину массива
Цикл по индексированному массиву
Ассоциативный массив
Цикл по ассоциативному массиву

Объяснение


PHP Сортировка Массивов

sort() — Сортировать массив по возрастанию в алфавитном порядке
sort() — Сортировать массив по возрастанию
rsort() — Сортировать массив по убыванию в алфавитном порядке
rsort() — Сортировать массив по убыванию чисел
asort() — Сортировать массив по возрастанию в соответствии со значением
ksort() — Сортировать массив по возрастанию, в соответствии с ключом
arsort() — Сортировать массив по убыванию в соответствии со значением
krsort() — Сортировать массив по убыванию, в соответствии с ключом

Объяснение


PHP Суперглобальные Массивы

$GLOBAL — Используется для доступа к глобальным переменным из любой точки PHP скрипта
$_SERVER — Содержит сведения о заголовках, путях и расположениях сценариев
$_REQUEST — Используется для сбора данных после отправки HTML формы
$_POST — Используется для сбора данных формы после отправки формы HTML. Также используется для передачи переменных
$_GET — Собрать данные, передаваемые в URL

Объяснение


PHP Проверка Формы

PHP Проверка Формы

Объяснение


PHP Многомерный Массив

Вывод элементов из многомерного массива
Цикл по многомерному массиву

Объяснение


PHP Дата и Время

Формат сегодняшней даты в нескольких направлениях
Автоматически обновлять год авторских прав на вашем сайте
Вывести текущее время (время сервера)
Установить часовой пояс, затем вывести текущее время
Создание даты и времени из нескольких параметров в mktime()
Создание даты и времени из функции strtotime()
Создать больше дат/времени из strtotime()
Вывод даты в течение следующих шести субботам
Вывод количество дней до 4 июля

Объяснение


PHP Подключить Файл

Использовать include включить «footer.php» в странице
Использовать include включить «menu.php» in a page
Использовать include включить «vars.php» in a page
Использовать include включить несуществующий файл
Использовать require включить несуществующий файл

Объяснение


PHP Обработка Файлов

Использовать readfile() для чтение файла и записи его в выходной буфер

Объяснение


PHP Файл Открыть/Прочитать/Закрыть

Использовать fopen(), fread(), и fclose() для открытия, чтения и закрытие файла
Использовать fgets() для чтения одной строки из файла
Использовать feof() для чтения файла строки за строкой до тех пор, пока не будет достигнут конец файла
Использовать fgetc() для чтения одного символа из файла

Объяснение


PHP Куки

Создание и получение файла cookie
Изменить значение cookie
Удалить куки
Проверьте включены ли файлы cookie

Объяснение


PHP Сессии

Начало сеанса
Получить значения переменных сеанса
Получить все значения переменных сеанса
Изменение переменной сеанса
Удаление сеанс

Объяснение


PHP Фильтры

Использовать filter_list() для перечисления расширения фильтра в PHP
Очистка строки
Проверка целого числа
Проверить целое число, равное 0
Проверка IP-адреса
Очистка и проверка адреса электронной почты
Очистка и проверка URL адреса

Объяснение


PHP Выбрать Данные из MySQL

Выберите данные с MySQLi (Объектно-ориентированный)
Выберите данные с MySQLi (Объектно-ориентированный) и поместить результат в HTML таблицу
Выберите данные с MySQLi (Процессуальный)
Выберите данные с PDO (+ Подготовленное заявление)

Объяснение


PHP SimpleXML Парсер

Использовать simplexml_load_string() для чтения XML данных из строки
Использовать simplexml_load_file() для чтения XML данных из файла
Получить значения узлов
Получение значений узлов определенных элементов
Получить значения узлов — цикла
Получить значения атрибутов
Получить значения атрибутов — цикла

Объяснение


PHP XML Expat Парсер

Инициализируйте анализатор XML Expat, определите некоторые обработчики, затем проанализируйте XML файл

Объяснение


php — Как узнать, используете ли вы HTTPS без $ _SERVER [‘HTTPS’]

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

,

Перенаправление с HTTP на HTTPS с PHP

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

.

PHP: $ _SERVER — Руководство

Руководство по абсолютным путям …

Данные: __FILE__
Тип данных: String
Назначение: Абсолютный путь к запущенному файлу PHP, включая имя файла.
Предостережение: это не тот файл, который вызывается процессором PHP, это то, что выполняется. Так что, если вы находитесь внутри include, это include.
Предостережение: символические ссылки предварительно разрешены, поэтому не доверяйте точному сравнению путей.
Предостережение: не предполагайте, что все операционные системы используют символ «/» в качестве разделителя каталогов.
Работает в веб-режиме: Да
Работает в режиме CLI: Да

Данные: __DIR__
Тип данных: Строка
Цель: Абсолютный путь к запущенному файлу PHP, исключая имя файла
Предостережение: Это не тот файл, который вызывается Процессор PHP, это то, что работает. Так что, если вы находитесь внутри include, это include.
Предостережение: символические ссылки предварительно разрешены, поэтому не доверяйте точному сравнению путей.
Предостережение: не предполагайте, что все операционные системы используют символ «/» в качестве разделителя каталогов.
Работает в веб-режиме: Да
Работает в режиме CLI: Да

Данные: $ _SERVER [‘SCRIPT_FILENAME’]
Тип данных: Строка
Цель: Абсолютный путь к исходному файлу PHP, включая имя файла
Предостережение: не задано во всех средах PHP может потребоваться настройка путем копирования из __FILE__ перед включением других файлов.
Предостережение: символические ссылки не разрешаются заранее, используйте функцию PHP realpath, если вам нужно ее разрешить.
Предостережение: не предполагайте, что все операционные системы используют символ «/» в качестве разделителя каталогов.
Предостережение: «Имя файла» заставляет вас думать, что это просто имя файла, но на самом деле это полный абсолютный путь. Считайте идентификатор как «Имя файловой системы (пути) скрипта».
Работает в веб-режиме: Да
Работает в режиме CLI: Да

Данные: $ _SERVER [‘PATH_TRANSLATED’]
Тип данных: String
Цель: Абсолютный путь к исходному файлу PHP, включая имя файла
Предостережение: вероятно не установлен, лучше просто не использовать. Просто используйте realpath ($ _ SERVER [‘SCRIPT_FILENAME’]) (и имейте в виду, что может потребоваться эмуляция самого файла).
Предостережение: символические ссылки предварительно разрешены, поэтому не доверяйте точному сравнению путей.
Предостережение: не предполагайте, что все операционные системы используют символ «/» в качестве разделителя каталогов.
Работает в веб-режиме: Да
Работает в режиме CLI: Нет

Данные: $ _SERVER [‘DOCUMENT_ROOT’]
Тип данных: Строка
Цель: Получить абсолютный путь к корню документа веб-сервера. Без косой черты в конце.
Предостережение: не доверяйте этой настройке или правильной настройке, если вы не контролируете серверную среду.
Предостережение: символические ссылки могут быть предварительно разрешены или не иметь, используйте функцию PHP ‘realpath’, если вам нужно ее разрешить.
Предостережение: не предполагайте, что все операционные системы используют символ «/» в качестве разделителя каталогов.
Работает в веб-режиме: Да
Работает в режиме CLI: Нет

Обратите внимание, что если что-то не установлено, оно может отсутствовать в $ _SERVER или быть пустым, поэтому используйте для вашего теста функцию PHP «empty».

Обратите внимание, что если вы вызываете «php —info» в командной строке, то, естественно, некоторые из этих настроек будут пустыми, поскольку файл PHP не задействован.

.

PHP Протокол получения URL сайта — http против https

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
,