«Прокидывание» параметра через все ссылки

Задача: добавить параметр ко всем ссылкам, генерируемые Symfony UrlGenerator`ом, если он был в текущем запросе.
Например, у вас есть особой шаблон, на тот случай, если модуль отображается в iframe другого модуля.
Если знаете как это сделать средствами Symfony, то расскажите. Я такого способа не нашел, поэтому сделал свою реализацию. Читать далее ««Прокидывание» параметра через все ссылки»

Работа с часовыми поясами(таймзонами) в php и mysql

Сложности работы с часовыми поясами, думаю, возникают у каждого кто сталкивается с этим впервые. Для примера рассмотрим создание планировщика: пользователь составляет расписание с заданиями — указывает время когда задание начинается и когда заканчивается.
Но, т.к. пользователи находятся в разных странах и, соответственно, в разных часовых поясах, возникает вопросы: “А как хранить время?” и “И как искать задачи, которые надо запустить/остановить сейчас?”
Читать далее «Работа с часовыми поясами(таймзонами) в php и mysql»

Curl, многомерные массивы и передача файлов

Задача: из кода на PHP передать веб-службе файл с помощью curl.

Решение: Curl, многомерные массивы и передача файлов

upd: начиная с php 5.5 работа с файлами изменилась:

1
2
3
4
5
6
7
  if ((version_compare(PHP_VERSION, '5.5') >= 0)) {
    foreach ($requestVars AS $k=>$v) {
      if (strpos($v, '@') === 0) {
        $requestVars[$k] = new \CURLFile(str_replace('@', '', $v));
      }
    }
  }

ZF2 .htaccess in built-in PHP server

ZF2 .htaccess in built-in PHP server

Для нормального функционирования zf2-приложения требуется наличие модуля mod_rewrite. В .htaccess все запросы через mod_rewrite зарулены на public/index.php

В документации запуск встроенного сервера описан так:

$ cd public
$ php -S localhost:80

Но т.к. .htaccess не подхватится, то при вызове, например, каптчи «http://localhost/user/captcha/ad291fb77e7c0cca7c3bd1f47aa2964e.png» сервер, вместо того, что бы отправить запрос в index.php попытается найти такой файл и выдаст 404-ю ошибку.

Решение простое. При запуске нужно явно указать вызов index.php при любых запросах. Так:

$ cd public
$ php -S localhost:80 index.php

PHP sendmail в Windows

PHP sendmail в Windows

Для отправки почты php использует утилиту sendmail. Те кто работает в linux, уже готов к этому. А вот у windows-пользователей возникают проблемы, потому как они ни как не ожидают, что нужно что то настроить. Опишу по шагам:

1) Скачать sendmail отсюда и распакуйте, например, в папку с:\sendmail

2) Откройте sendmail.ini и укажите smtp_server(почтовый сервер), auth_username, auth_password и force_sender(будет подставляться в поле from). Обратите внимание на error_logfile=error.log — сюда будут писаться ошибки, если что то пойдет не так(например, если укажите неправильный пароль)

3) Откройте ваш php.ini и укажите sendmail_path = «[путь_до_папки]\sendmail\sendmail.exe -t». Проверьте, значение SMTP = localhost и smtp_port = 25

4) Перезапустите apache или другой используемый вами сервер

Exception’ы в PHP

Exception’ы в PHP

Если вы еще не используете исключения, то читать статью «Правильное использование Exception’ов в PHP» обязательно! А если уже используете — тем более. Вот содержание:

Почему мы не умеем пользоваться эксепшенами
Преимущества эксепшенов
    Контекстная логика
    Упрощение логики и архитектуры приложения
    Использование объектов
    Обработчик по умолчанию, логирование
    Невозможность не заметить и перепутать
    Прекращение ошибочной операции
Когда следует вызывать эксепшены
Эксепшн vs возврат null
Технические эксепшены
Эксепшены утверждений
Изменение логики для избегания эксепшна
Собачки