После установки прокси-сервера перестал работать composer:

Решение: /etc/profile добавить строки:

PHP-CLI запускается несколько раз (дважды). Второй раз не считываются конфигурационные файлы из /etc/php.d.

Запускается дважды из-за того, что Composer обнаруживает подключенное расширение xdebug. Он копирует /etc/php.ini во временную папку /tmp и запускает себя повторно. Но повторно уже не считывает дополнительные конфигурационные файлы.

Как одно из решений не отключать xdebug. В этом случае composer хоть и работает медленней, но работает:

Одновременную работу с разными версиями PHP можно обеспечить, установить два PHP-FPM сервиса. Первый (PHP 7) из родного репозитория, а второй (5.6) из репозитория Remi.

Подключаем репозиторий Remi:

Устанавливаем все необходимое для работы с PHP версии 5.6:

В конфиге PHP-FPM 5.6. комментируем обработчик для PHP-файлов. По умолчанию будет отрабатывать PHP-FPM 7 версии.

В настройках виртуального хоста нужного сайта добавляем обработчик PHP-FPM:

В модуле XDebug для 5.6 устанавливаем порт отличный от порта в 7-й версии, например, 9001

Для увеличения максимального времени исполнения для отладки нужно сделать, как рекомендуют тут:

Сколько типов данных в РНР?

Четыре скалярных типа: boolean, integer, float, string.

Четыре смешанных: array, object, callable (>=5.4), iterable ( >= 7.1, для генераторов yield)

Два специальных: resource и NULL

Что такое конструктор?

Это метод __construct класса, который вызывается при каждом создании объекта.

Обязательно ли писать закрывающий тег ?> в конце скрипта?

Нет. Стандарт PSR даже запрещает его использование.

Поддерживает ли РНР множественное наследование?

Нет, для этого используются interface и trait.

Какая разница между require(), require_once(), include() и include_once()?

require_once и include_once включают файл только один раз. Если файл не найден, require* выдает фатальную ошибку, а include* предупреждение.

Как перевернуть массив? Есть массив array(‘h’, ‘e’, ‘l’, ‘l’, ‘o’), как из него получить array(‘o’, ‘l’, ‘l’, ‘e’, ‘h’)

array_reverse(array(‘h’, ‘e’, ‘l’, ‘l’, ‘o’))

Как перевернуть строку? «Привет» → «тевирП»

 

Есть ли разница между одинарными и двойными кавычками в PHP?

Есть, внутри двойных можно использовать переменные и управляющие последовательности спецсимволов

Нарисуй (напиши) форму для отправки файла + файл-приемник

file_send.html

file_save.php

Сгенерировать 3 случайных числа в диапазоне от 0 до 10. Если сумма этих чисел меньше 14, сгенерировать новую тройку.

Для чего в PHP 5 используется тип данных “указатель“?

Такого типа я не знаю.

Какой будет результат выполнения этого скрипта?

567

Какие магические методы знаешь? Что это вообще такое?

Магические методы вызываются неявным образом при определенных условиях.
__construct – конструктор
__destruct – деструктор
__toString – вызывается при преобразовании в строку
__get – чтение из недоступного свойства
__set – запись в недоступное свойство
__clone – вызывается при клонировании
__invoke – вызывается при обращении к объекту как к функции
__call – вызов недоступного метода
__callStatic – вызов недоступного статического метода
__isset – вызывается при использовании isset()
__unset — вызывается при использовании unset()
__sleep – вызывается при сериализации
__wakeup – вызывается при десериализации

Как можно переадресовать пользователя на другую страницу?

header(‘Location: http://yandex.ru/‘)

Чему равно $b в данном отрезке кода:

304

Что такое первичный ключ?

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

Что такое mysql_pconnect? Чем он отличается от mysql_connect?

mysql_pconnect устанавливает постоянное соединение с базой данных, которое не закрывается после завершения работы скрипта.

Что такое MyISAM и InnoDB?

Это системы хранения данных в MySQL.

Чем они отличаются?

MyISAM – нет транзакций и внешних ключей, каждая таблица в своем файле, при записи блокируется вся таблица. Если только вставка или чтение, то быстрее InnoDB.

InnoDB — есть транзакции, внешние ключи, больше соответствует реляционной модели. Блокировка на уровне строк. Быстрее при смешанных операциях SELECT, INSERT, UPDATE.

Есть две таблицы: users — таблица с пользователями (users_id, name) orders — таблица с заказами (orders_id, users_id, status)

  1. Выбрать всех пользователей из таблицы users, у которых ВСЕ записи в таблице orders имеют status = 0;
  2. Выбрать всех пользователей из таблицы users, у которых больше 5 записей в таблице orders имеют status = 1;

 

Какая разница между LEFT, RIGHT и INNER JOIN

INNER — выбираются только те строки, которые есть одновременно в объединяемых таблицах
LEFT — все из левой, отсутствующие в правой заполняются NULL
RIGHT — все из правой, отсутствующие в левой заполняются NULL

Что делает команда EXPLAIN?

Предоставляет информацию о порядке и методе связывания таблиц.

Как вывести все поля из таблицы my_table

Вывести всех производителей за исключением тех, которые находятся в Китае, Таджикистане и России; табл.: manufacture (id, country, count, date_add, tag)

Мы не помним как точно пишется “Mercedes“ или “Mersedes“, но нужно из таблицы выбрать автобусы именно этой марки. Как быть? табл.: bus (id, name)

Порядок транзакции

Напишите пример процедуры возвращающей конкатенацию входных параметров (2х входных параметров) типа varchar, с проверкой на наличие значений (not null), и сообщением в качестве возвращаемого значения, в случае если один из параметров не прошел проверку.

Что такое триггер? Возможные применения?

Хранимая процедура, которая вызывается при наступлении определенного события (INSERT, UPDATE, DELETE), до или после (BEFORE или AFTER). Применяются чтобы выполнить дополнительные операции. Например, записать в журнал дату изменения записи.

PDO. Что это?

PHP Data Objects — расширение для универсального доступа к различным БД. Для каждой БД используется родной драйвер, а программный интерфейс одинаков. PDO предоставляет объектно-ориентированный подход для работы с БД.

Josh Lockhart в своей книге «Modern PHP» рекомендует использовать Capistrano.

В статье Ansible и Rails — гибкая замена Capistrano с сохранением знакомого комфорта автор рассказывает как заменил Capistrano на Ansible и счастлив. Но в комментариях оппоненты говорят, что преимущества преувеличены, а автор не знает Ansible.

Для Yii есть интересное расширение Project Self Update Extension for Yii 2.

У Мартина Фаулера про процесс непрерывной интеграции.

Для включения профилирования в настройках Xdebug нужно настроить некоторые параметры. В Fedora 25 редактируем файл настроек:

Не запускать профилирование автоматически:

Запускать профилирование по условию, когда установлен GET/POST-параметр XDEBUG_PROFILE=1:

Каталог, куда будет сохранятся статистика:

И перезапускаем апач:

Например, вывести список IP-адресов в сети:

Или если добавить права на исполнение chmod u+x extract_ip.php, то можно вызвать так:

Скачать скрипт