Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - SysBox

Страницы: [1]
1
Создание среды разработки (локальный веб-сервер)

1. Локальный веб-сервер можно быстро установить автоматически

XAMPP
DENWER
OPEN-SERVER
и т.п. но понимания, как все работает, не будет.



2. Ниже инструкция как сделать локальный веб-сервер вручную

Нас ждет установка и настройка Apache + PHP + MySql на Windows.
По сути, мы создадим домашний хостинг. Использовать его вместо платного можно, настроив, но так никто не делает по причинам:

* 24 часа в сутки шумит компьютер
* не рациональный расход электричества
* железо изнашивается быстрее
* железо сломалось, нет электричества, нет интернета - сайты пропали на Х времени
* нужно организовывать резервирование
* нужно отдельно заниматься безопасностью
* желательно оплачивать постоянный IP адрес
* возможна не стабильная скорость ответа

В общем делать из ПК боевой сервер это все равно, что не покупать готовое молоко в пакете, а завести корову, выделить помещение, завозить корма, вывозить навоз, убирать, лечить, доить. Да молоко свое, но какой ценой?

Если хотите реальный хостинг, то купите его. Или купите виртуальный сервер DigitalOcean, IHOR и поставьте туда VESTA.



3. Необходимое ПО

Все нужное - бесплатное. Не скачивайте сверхновые программы с пометкой Альфа (Alpha), Бета (Beta) и т.д. - это не стабильные версии. Скачивайте только стабильные (Stable) версии.

Сервер Apache
https://www.apachelounge.com/download/
Например: httpd-2.4.29-win64-VC14.zip
(на официальном сайте (http://httpd.apache.org/) нет установщика под windows)

Язык PHP
http://windows.php.net/download/
Например: VC14 x64 Thread Safe
"Thread Safe" означает многопоточность. Если PHP ставится как модуль (мы так и бдуем делать), нужно ставить с Thread Safe.

MySQL сервер
https://dev.mysql.com/downloads/mysql/
Например: mysql-installer-web-community-5.7.20.0.msi
Когда попросят авторизоваться или зарегистрироваться нажмите ниже "No thanks, just start my download." (Нет, спасибо, начать скачку)

Программы для работы с MySQL
Написан на PHP, работает через браузер
https://www.phpmyadmin.net/downloads/
Windows приложение:
https://www.heidisql.com/download.php

Текстовый редактор
https://notepad-plus-plus.org/

Средство разработки (платное)
Это один из лидеров средств разработки веб-ПО вместо обычного текстового редактора.
Ставить не обязательно, но желательно.
Универсальный, под разные языки:
http://www.jetbrains.com/idea/
Изначально настроен под PHP:
http://www.jetbrains.com/phpstorm/

Готовые папки с файлами-тестами вашего локального сервера

Виртуальная машина VirtualBox
https://www.virtualbox.org/
Дает возможность не захломлять свой ПК, а экспериментировать на виртуальном windows.



4. Важно понять принцип работы нашего веб-сервера

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



5. Создаем папки

c:/server/ - тут будет Apache, PHP, Mysql.
с:/server/sendmail/ - нужна для "заглушки" отправки почты
c:/www/test.ru/www/ - тут будут файлы сайта
c:/www/test.ru/log - тут будут логи сайта

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

c:/www/ - Общая папка для всех сайтов
c:/www/test.ru/ - Папка конкретного сайта. На этом уровне располагают файлы которые не видны в интернете, например служебные, пароли, логи, статистика и т.д.
c:/www/test.ru/www/ - Здесь размещаются непосредственно файлы сайта (картинки, HTML, файлы для скачивания и т.д.) Грубо говоря, если в браузере набрать test.ru, то будет "видно" содержимое именно этой папки.



6. Установка Apache

Настройки Apache где-то тут:
c://Program Files (x86)/Apache Software Foundation/Apache2.2/conf/httpd.conf
Для применения изменений в этом файле нужно перезагружать Apache.

----------
Чтобы Apache принимал запросы только с локального компьютера, указываем его неизменный IP адрес и порт: 127.0.0.1:80
Т.е. скачать или запустить что-то на вашем хостинге можете только Вы.

Заменяем
Listen 80
на
Listen 127.0.0.1:80

----------
Модуль mod_rewrite.so нужен для реализации человеку понятных адресов (ЧПУ)
Применяется для создания ссылок на страницы вида: test.ru/news/2020/03/
Убрать знак комментария "#":
LoadModule rewrite_module modules/mod_rewrite.so

----------
Для того, что бы можно было использовать файлы .htaccess
После кода:

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit

Изменяем
AllowOverride None
на
AllowOverride All

----------
При при запросе у сервера папки (http://test.ru/papka/), сервер автоматически будет искать и запускать указанные в этой папке файлы: http://test.ru/papka/index.html и т.п.

Заменяем
DirectoryIndex index.html
на
DirectoryIndex index.html index.htm index.php

----------
Даем доступ к папке "www" и создаем настройки.
После кода:

<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

Добавляем:

<Directory "C:/www">
AllowOverride All
Options Indexes FollowSymLinks Includes
Order allow,deny
Allow from all
</Directory>

Indexes - возвращает клиенту листинг каталога, если в нем нет индексных файлов
FollowSymLinks - Позволяет использовать символические ссылки (нужно для работы mod_rewrite)
Includes - Разрешает выполнение SSI директив в файлах

----------
Указываем расширения файлов для SSI
После кода :
 
 # To parse .shtml files for server-side includes (SSI):
 # (You will also need to add "Includes" to the "Options" directive.)
 
 Вставить:
 
AddType text/html .shtml .html. .htm
AddOutputFilter INCLUDES .shtml .html .htm

----------
Присоединение к основному конфигурационному файлу, файл httpd-vhosts.conf
Тогда при запуске Apache прочитает оба файла.
Убрать знак комментария "#":
Include conf/extra/httpd-vhosts.conf

----------
Далее изменяем в файле
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.conf

Даем понять Apache, что:
Есть виртуальный хост, т.е. сайт.
Его файлы лежат здесь "DocumentRoot"
Показывать именно этот сайт если запрашивают домен "ServerName" или "ServerAlias"
Логи писать сюда "ErrorLog" и сюда "CustomLog"
 
Для этого удаляем старые записи
<virtualhost>
.......
</virtualhost>
и добавляем новые:

<VirtualHost *:80>
DocumentRoot c:/www/test.ru/www
ServerName test.ru
ServerAlias www.test.ru
ErrorLog c:/www/test.ru/error.log
CustomLog c:/www/test.ru/access.log common
</VirtualHost>



7. Установка PHP

PHP - это популярный язык программирования применяемый для создания сайтов.
В установке обычно выбирают эти модули:
GD2 - для работы с изображениями
mysqli - для работы с базой данных

Настройки PHP в файле:
C:\Program Files (x86)\PHP\php.ini

позволит выполнять код PHP в контейнере <? ... ?>
по умолчанию кодом PHP считается все в контейнере <?php ... ?>
short_open_tag = On

максимальное время выполнения программы в секундах
(на реальных хостингах обычно 30)
max_execution_time = 3600

максимальное время получения данных (например загрузки файла) в секундах
(на реальных хостингах обычно 60)
max_input_time = 3600

максимальный объем памяти который может занять Ваш PHP скрипт
(на реальных хостингах обычно 32М)
memory_limit = 256M

выводить на экран ошибки PHP
(на реальных хостингах всегда OFF в целях безопасности)
display_errors = On

выводить на экран ошибки в момент запуска PHP
display_startup_errors = On

если надо подкрасить все ошибки красным разкомментируем эти строки:
error_prepend_string = "<font color=#ff0000>"
error_append_string = "</font>"

максимальный объем, который можно передать PHP скрипту методом POST
(на реальных хостингах обычно 4М)
post_max_size = 1000M

максимальный объем файла, который можно передать PHP скрипту
(на реальных хостингах обычно 2М)
upload_max_filesize = 1000M

Заменяем путь файла ошибок, на более удобный
error_log="C:\WINDOWS\temp\php-errors.log"
заменяем на:
error_log="C:\www\php-errors.log"

Требуется установка времени сервера иначе PHP постоянно будет выдавать предупреждения
изменяем
;date.timezone =
например, на
date.timezone ='Europe/Moscow'

Что бы работала "заглушка" для отправки e-mail после строки
;sendmail_path =
добавляем
sendmail_path = php.exe c:/www/sendmail/sendmail.php
тогда при выполнении функции PHP - mail(); письмо будет сохранено в виде файла в папке
c:/www/sendmail/




8. Установка MySQL

MySQL - это база данных. Т.к. далеко не всю информацию удобно хранить в файлах, наличие базы данных очень часто является необходимостью. При установке обязательно поставьте галочку Include Bin Directory in Windows PATH иначе PHP не сможет найти нужные ему файлы mysql.

(в тестовых файлах PHP, с сайта sysbox.ru, для подключения к базе данных указаны
логин: root
пароль: root
изменить их можно в файле config.php)

Кодировки MySQL это отдельный рассказ, т.к. нюансов множество.
При установке MySQL желательно указать именно UTF-8 (инсталлятор так и рекомендует сделать). Это универсальная, многобайтовая кодировка.

Обычно возникает путаница с кодировками: ошибки при записи в базу данных, читаются иероглифы, появляются вопросики вместо букв и т.д. MySql имеет массу настроек кодировок. Важные для PHP:

character_set_client = кодировка данных отправляемых от PHP
character_set_connection = кодировка, в которую преобразуется информация пришедшая от PHP, перед выполнением запроса на сервере
character_set_results = кодировка данных отправляемых к PHP
collation_connection = кодировка в которой производится сопоставление в базе данных. Используется для сортировки и выборки.

В помощь: если база данных в UTF-8, а на сайте работаете в кодировке windows-1251, то после подключения к базе данных надо выполнить запрос:
SET NAMES cp1251
который равносилен этим трём:
SET character_set_client = cp1251
SET character_set_results = cp1251
SET character_set_connection = cp1251

Настройки MySQL лежат в файле:
c:\Program Files (x86)\MySQL\MySQL Server 5.1\my.ini

Если сам MySQL использует UTF-8 по умолчанию, то лезть в файл настроек как правило не нужно и все проблемы с кодировками можно решить с помощью MySQL менеджера (например программы HeidiSQL) и запросов SQL.



9. Настройка Windows

Что бы при наборе в браузере определенных сайтов браузер искал их не в интернете, а на локальном компьютере,
в файл:
C:\WINDOWS\system32\drivers\etc\hosts
добавляем (для этого вы должны иметь права администратора компьютера):

127.0.0.1 localhost
127.0.0.1 test.ru
127.0.0.1 www.test.ru

Запись "127.0.0.1 localhost" нужна для того, что бы можно было подключаться к MySQL из PHP указывая не IP адрес 127.0.0.1, а зарезервированное имя "localhost". Так правильнее и "localhost" часто используется на реальных хостингах.



10. Перезапуск  Apache

Для Windows Vista и Windows7:
остановить и снова запустить Apache



11. Настройка программы phpMyAdmin

phpMyAdmin - это программа для администрирования базы данных MySQL.
Написана на языке PHP, работает через браузер.
Примечательна тем, что на большинстве реальных хостингах она установлена и рекомендуется для работы с базой данных.

Распаковываем все файлы в какую-нибудь папку на сайте, например в "c:/www/test.ru/www/pma/"
В корне переименовать файл
config.sample.inc.php
в
config.inc.php
и редактируем всего одну строчку (надо указать любой код, например "xxx"):
$cfg['blowfish_secret']='xxx';
После чего запускаем phpMyAdmin, набрав в браузере:
test.ru/pma
Вводим логин и пароль которые указывали при установке MySQL

Остальные настройки менять НЕ нужно и по умолчанию они должны содержать:
$cfg['Servers'][$i]['verbose'] = '';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['nopassword'] = true;

Если в файле
C:\WINDOWS\system32\drivers\etc\hosts
нет строчки
127.0.0.1 localhost
то phpMyAdmin может не работать "зависать" и выдавать ошибки, например:
#2002 - Сервер не отвечает (либо сокет локального MySQL-сервера некорректно настроен)
Эти зависания можно вылечить изменив в настройке phpMyAdmin:
$cfg['Servers'][$i]['host'] = 'localhost';
на
$cfg['Servers'][$i]['host'] = '127.0.0.1';
но правильнее внести строчку
127.0.0.1 localhost
в файл hosts, т.к. на реальных хостингах, в скриптах PHP при подключении к MySQL указывается именно "localhost", а не конкретные IP адреса.


2
SysBox / Документация
« : 03 Ноябрь 2017, 15:46:55 »
SysBox - это простой фреймворк на PHP http://sysbox.ru
Название состоит из двух слов: System (система) и Box (коробка).

------------------
Основные принципы

1. Существуют коробки с системами.
Например коробка с админкой, коробка с библиотеками, коробка с сайтом1, коробка с сайтом2 и т.д.
Весь ваш код можно сложить в одну коробку или наоборот разбить на десятки коробок, как вам удобнее.
Каждая коробка это отдельный мир и может быть полностью автономна, даже со своим подключением к БД если нужно.
Или наоборот коробки могут активно запускать друг у друга методы, как вам удобнее.

2. Весь ваш код находится в методах классов.
Что бы запустить метод в текущей коробке достаточно к нему обратиться через $this. Пример так: $this->название класса->название метода();
При этом класс будет автоматически загружен и проинициализирован. На этом все построено.
Название класса обычно на 100% совпадает с путем до файла с этим классом.

3. Конфигурационный файл един для всех коробок.
Он компактный т.к. содержит общие правила и исключения из этих правил.
Автоматическая загрузка и инициализация классов происходит в соответствие с настройками.

------------------
Файлы двигателя

Box.php - Класс всех коробок
Config.php - Настройки
Action.php - Запуск метода по роут-строке
Engine.php - Двигатель
Error.php - Обработка ошибок
Exception.php - Для создания исключений PHP
Extend.php - Базовый класс для всех классов пользователя
Response.php - Формирует ответ сверверу
View.php - Работа с шаблонами
         
------------------
Файлы, классы

Весь пользовательски код SysBox находится внутри методов классов.
Класс всегда находится в отдельном файле. Один файл - один класс.
Одна коробка имеет свою персональную папку, в которой лежат файлы классов.
Файлы могут находится в корне или в подпапках на любой глубине.

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

(в примерах ниже /www/myBox/ - папка коробки)

/www/myBox/Test.php = Test
/www/myBox/Admin/Test.php = Admin_Test
/www/myBox/Admin/Test/Test.php = Admin_Test_Test

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

/www/myBox/MyTest.php = MyTest
/www/myBox/SuperAdmin/MyTest.php = SuperAdmin_MyTest

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

------------------
Запуск

1. Подключаем файл двигателя sysbox. Нужно только 1 раз за все время работы программы.
require('/www/sysbox/Engine.php');

2. Получаем от двигателя экземпляр коробки "admin". Экземпляров одной и той же коробки невозможно сделать много, он всегда один.
$Admin = \sysbox\engine\engine::getBox('admin');

3. Запускаем любые методы:
$Admin->Test1->myMethod1();
$Admin->Test2->myMethod2();
и т.д.

Для запуска напрямую из браузера:

1. Делаем так, что любые запросы к серверу приводят к запуску например index.php. При этом ему в переменной, например "_r", передается URL запроса к серверу. На сервере Apache для этого в файле .htaccess можно прописать подобное: RewriteRule ^([^?]*) /admin/index.php?_r=$1 [L,QSA]

2. Внутри index.php так же загружаем двигатель и инициализируем нужную коробку:
require('/www/sysbox/Engine.php');
$Admin = \sysbox\engine\engine::getBox('admin');

3.
// Выдаем браузеру результат работы метода в том виде, в котором запрашивали: html или json
$Admin->Response->setOutput(
   // Запуск класс->метод(аргументы) на основе роут-строки и GET данных
   // В данном случае роут-строка это URL запроса из браузера
   $Admin->Action->execute(
      array(
            'route' => $_REQUEST['_r'],
            'isBrowser' => true
        )
   )
);


В нем создается экземпляр класса-ядра SysBox и производится запуск действия $SysBox->action('') где передается строка - роут.
В этой строке указано в каком классе, какой метод, с какими параметрами запустить.
Такая строка формируется обычно на основе URL который запросили из браузера.
Например:

'subDir_fileClass__method__param1_param2'
где:
'subDir_fileClass' - название класса
'method' - метод в классе
'param1_param2' - параметры метода

Класс, метод и параметры разделяются двойным нижним подчеркиванием.
Если не указан метод, то будет запущен метод 'index'.
Если не указан класс, то будет запущен класс по умолчанию (задается в настройках коробки).
Если в строке контроллера последний символ /, то это означает, что передают URL и в нем файл не указан. По этому добавляется файл index (и в нем будет запущен метод index).
Параметры метода отделены друг от друга одним нижним подчеркиванием.
В строке контроллера можно не указывать первые большие буквы в названии класса (SysBox сам это поправит).
В названии класса можно использовать как нижние подчеркивания, так и любые слэши. Это позволяет браузеру "думать", что он запрашивает реальный файл лежащий в папке, а значит во вьюшах допустимо использовать относительные пути к jpg, css, js.
Например:
/subdir1/subdir2/fileClass__method__param1_param2 - $SysBox->Subdir1_Subdir2_FileClass->method(param1, param2);
/fileClass__method - $SysBox->FileClass->method();
/fileClass - $SysBox->FileClass->index();


Настройки
-----------

Все настройки находятся в одном файле /sysbox/config.php
Из себя представляют многомерный массив.
Первый уровень массива содержит глобальные настройки для всей системы в целом.
В элементе 'box' содержатся настройки конкретных коробок.
Зарезервировано название коробки 'default' - это не существующая, виртуальная коробка настройки которой имеют все остальные коробки по умолчанию.
В массиве каждой коробки имеется:



Автозагрузчик
-----------

В SysBox получить экземпляр класса можно 4 способами:

1. $this->initClass('Class', array(param1 => value1, param2 => value2));
Всегда будет создан новый экземпляр класса с указанными параметрами.

2. $this->getClass('Class', array(param1 => value1, param2 => value2));
При первом запросе будет создан и выдан экземпляр, при всех последующих будет выдаватьсь один и тот же экземпляр, причем параметры будут проигнорированы, если их указать. Параметры используются только при первой инициализации.

3. $this->Class(param1, param2);
То же самое, что $this->getClass.

4. $this->Class->myMethod();
То же самое, что $this->getClass, только без возможности явно указать параметры.

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

В настройках коробки настройки классов/алиасов указываются в массиве "initClass". Там настройки по умолчанию которые могут быть проигнорированы если инициализация происходит с явно указанными параметрами. Перед инициализацией класса/алиаса всегда сначала идет проверка наличия настроек. Основная масса реальных классов не требует настроек вообще, а "initClass" используется для создания не большого списка алиасов и задания параметров по умолчанию, когда они нужны.

В настройках каждой коробки есть асоциативный массив "initClass".
Ключ - название класса/алиаса.
Значение - подмассив с настройками класса/алиаса (все не обязательны).

В подмассиве:
box - название коробки откуда взять класс/алиас (если берем не из текущей коробки).
class - название класса/алиаса которое использовать для инициализации.
arguments - аргументы класса по умолчанию.



Алиасы
-----------

При инициализации классов/алиасов вместо $this можно использовать
$this->Box - экземпляр класса текущей коробки.
$this->getBox('otherBox') - любая другая коробка.

Обратиться к классу из другой коробки можно двумя способами:

1. прямое указание нужной коробки:
$this->getBox('otherBox')->Class->Method();

2. в настройках текущего класса создаем алиас указывающий на класс в другой коробке, далее просто инициализируем его как обычный класс:
$this->Class->Method();
Тут "Class" = алиас ведущий в другую коробку.

Коробки - это полноценный "синглтон". Экземпляр коробки всегда создается только один. Создаются экземпляры коробок не заранее, а по первому запросу.




Особенности:
-------------
1. Технических ограничений между контроллером, моделькой и шаблоном нет. Т.е. из любого места есть доступ к чему угодно. Можно писать в жестком MVC стиле, можно в произвольном.
2. Название класса совпадает и с URL и с папками, что позволяет MVC, JS, CSS, JPG и т.д. разместить в одной физической папке. Можно располагать файлы в жестком MVC стиле, а можно групировать в папки по произвольным признакам.
3. Namespace один и тот же у всех классов одной коробки. В названии класса указаны все подпапки и файл класса. Есть алиасы (сокращения названий) для классов текущей и других коробок.
4. Инициализация классов происходит путем обращения к нему $this->Class(); или $this->Class->randomMethod();

3
SysBox / Установка
« : 03 Ноябрь 2017, 15:46:25 »
Закачиваем файлы на сервер.
Делаем какой-нибудь index.php, в нем пишем подобное:

require(__DIR__.'/../sysbox/Engine.php');
$Admin = \sysbox\engine\engine::getBox('admin');

Все. Через $Admin можно работать с SysBox.

SysBox не требует зависимостей и не конфликтует с любым сторонним кодом. По этому \sysbox\engine\engine::getBox('admin'); можно без проблем размещать в любом месте вашего кода.
\sysbox\engine\engine::getBox('admin'); выдает всегда один и тот же экземпляр коробки, по этому эту конструкцию можно без проблем запускать много раз подряд.

4
SysBox / Скачать
« : 03 Ноябрь 2017, 11:32:28 »
2017.11.15 Скачать

Страницы: [1]