Destio

PHP

Критичные ошибки в PHP, fatal errors

PHP Fatal error: Cannot redeclare class Это значит данный класс уже объявлялся ранее. Самое простое это включать файлы с классами как include_once()/require_once(). Если не помогает, то можно проверять наличие класса: if (class_exists(«Database») == false) { class Database { … } }

Читать дальше

,

PHP Parse error

Тут буду собирать php parsing errors. syntax error, unexpected '' PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) Это значит PHP не нравится интерполировать элементы массива с ключами в одиночных кавычках. $foo = «upupu $issue[‘article’]» // плохо $foo = «upupu {$issue[‘article’]}» // хорошо

Читать дальше

,

Перенаправления в PHP

Всякие 301 редиректы лучше редиректить через .htaccess, оно так эффективнее. Но если надо перенаправить в PHP, то это вроде несложно: header(«Location: /foo/tuda/»); exit; Редиректы на 404 немного по-другому: header(«HTTP/1.1 404 Not Found»); include(«/404.php»); exit; exit нужен, без него выходит какое-то дерьмо.

Читать дальше

Строгий режим в PHP, PHP Notice

error_reporting(-1); позволяет PHP писать в лог о всех мелочах, наподобие аналогичным use warnings; или «use strict»;. Вот какие сообщения я уже получал: PHP Notice: Use of undefined constant Так ПХП требует кавычки вокруг ключей в ассоциативных массивах. Ключ это строка, а строки должны быть в кавычках: $_GET[n]; // плохо $_GET[«n»]; // хорошо PHP Notice: Undefined […]

Читать дальше

,

Простое ведение логов в PHP

Чтобы не сильно заморачиваясь вести логи каких-нибудь событий, часто хватает простого error_log(). И не нужно морочиться с записью в файлы и базы данных. Формат очень свободный, поэтому даты и переносов строк не будет, все самому. error_log(date(«c») . » cookies eggog\n», 3, «/var/dataLogs/loginLog.log»); Файл создастся сам. Также можно писать и в общий error_log, с параметром 0: […]

Читать дальше

PDO prepated statements и кириллица

Как-то я бугнул и в названии колонки таблицы в MySQL (на самом деле Percona Server) появилась буква с. Буква кириллицей, из названия колонки расплодилась в соответствующие переменные PHP и параметры PDO (копипаста вперде!). Все участники спокойно пережевывали слово Сorrelation, пока execute() не порадовал меня ошибкой в параметре: PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter […]

Читать дальше

, ,

Включить HTML файл в HTML файл

Напрямую инклюдить HTML в HTML нельзя. Возможно в полуреализованных спецификациях уже есть различные наработки на эту тему, однако они с заморочками и результат скорее походит на страницу внутри страницы. А гладкое бесшовное включение, как какой-нибудь include или require нам в чистом HTML не получить. PHP include требует расширения .php и все равно чистый HTML инклюдить […]

Читать дальше

Invalid argument supplied for foreach()

Когда пхп кормят данными сомнительной чистоты и они проходят через какой-нибудь foreach внутри, то логи пхп заполняются предупреждениями следующего вида: PHP Warning: Invalid argument supplied for foreach() in /script.php on line 146 Если нет возможности убедиться что во входящих данных будет действительно array, то для очистки лога и душевного спокойствия можно заворачивать foreach в условие […]

Читать дальше

,

Пример использования PHPMailer для Яндекс-почты

Я правда не помню, как его устанавливать, но как-то нетривиально, напишу потом. Вот пример конфигурации PHPMailer, которая может посылать письма с почты Яндекса (почта для домена), аутентифицируясь по SMTP (не знаю, можно ли еще как-нибудь). $mail = new PHPMailer; $mail->CharSet = ‘UTF-8’; // $mail->SMTPDebug = 1; // Если что-то не работает $mail->isSMTP(); $mail->Host = ‘smtp.yandex.com’; […]

Читать дальше

, , ,

eval() в input, PHP

Рекомендации не эвалить пользовательский инпут пишут на каждом заборе, что уже и неинтересно. Но мне как-то стало интересно, почему нигде не упоминается возможность вписать eval() с кодом внутри прямо в input, а уж там то наверное при работе с $_POST все сразу и отэвалится. Наверное, раз нигде не упоминается, это и не работает, а то […]

Читать дальше

,