Val Petruchek

подписывайтесь, а то хуже будет!  

ПОДПИСЫВАЙТЕСЬ НА RSS

PHP послать письмо через gmail

05.06.08 @ 09:56 — PHP, Google

Задача: средствами PHP отправить письмо через smtp.gmail.com. Не просто с указанием адреса @gmail.com в поле From:, а именно через гугловский сервер.

Зачем это нужно? Во-первых, на многих хостингах существуют всяческие ограничения по использованию почты. Во-вторых, такое письмо должно выглядеть “белее” письма, отправленного локальным smtp: меньше шансов, что оно попадёт в junk folder.

Основная проблема, которая возникает при отправке письма через smtp.gmail.com и не возникает при отправке писем по smtp через другие, более обычные сервера, состоит в необходимости использования TLS соединения на 465 порт.

Отправить письмо из PHP напрямую через SMTP сервер (а не через mail() или sendmail) можно давно с помощью LGPL библиотеки PHPMailer.

Оказывается, начиная со второй версии, разработчики библиотеки добавили поддержку отправки почты по SMTP по безопасному соединению. Вот code snippet, формирующий правильный вызов метода отправки письма при использовании гугловского smtp:

     $mail->Mailer “smtp”;  
     $mail->SMTPAuth true;  
     $mail->SMTPSecure “tls”;
     $mail->Host “smtp.domain.com”;  
     $mail->Port “465″;  
     $mail->Username “email.address@gmail.com”;  
     $mail->Password “1W0N’T_t3ll-U”;  

Разработчики библиотеки не волшебники: для отправки писем по безопасному SMTP-соединению необходим PHP с поддержкой OpenSSL.

PHP — 3 notes

04.03.08 @ 16:21 — JavaScript, PHP

Три коротких заметки про PHP.

1. Kevin van Zonneveld разрабатывает библиотеку php.js — стандартные php функции, портированные на JavaScript. Естественно, не все функции портированы, на данный момент их 114. Не рекомендуется к просмотру людям, не знающим, как передать переменную из JavaScript в PHP — окончательное разжижение мозга (до состояния “каша в голове”) гарантированно.

2. Каким, по вашему, будет результат вызова in_array(”68_105″,array(68,16,123))? Оказывается, у функции in_array() есть третий параметр — [bool strict]. С его помощью можно включить поиск в массиве не только по значению, но и по типу.

3. Только начиная с версий 4.4.0 и 5.0.2 PHP функция sort() умеет использовать установки локали (с помощью флага SORT_LOCALE_STRING). Для более ранних версий (хотя пора уже проапгрейдиться) можно использовать костылик usort($array, “strcoll”)

HTTPS запросы в Curl PHP не работают

25.01.08 @ 07:57 — PHP

Не в первый раз сталкиваюсь, и всё время забываю: не срабатывает curl при https запросе из php4 на win32 (в стандартной установке). HTTP запросы отрабатываются нормально, а HTTPS — нет.

Помогает выключение опции CURLOPT_SSL_VERIFYPEER:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

Update: я не сильно разбираюсь в настройках Curlа, но по-моему эта же проблема может возникать и на не-windows серверах.

PHP (ссылки)

30.10.07 @ 06:06 — Links, PHP

Несколько PHP-ссылок:

Украинские ИНН

29.10.07 @ 14:20 — Programming, PHP, Ukraine

Встретил у Болка запись о том, как формируются номера российских ИНН. Стало интересно, как с этим обстоит дело у нас.

Итак, украинский ИНН (индивидуальный налоговый номер) состоит из 10 цифр. В нём зашифрованы:

  • дата рождения (первые пять цифр образуют число, равное количеству дней от 01.01.1900 до даты рождения владельца ИНН);
  • пол (чётность девятой цифры: четная цифра – женский, нечетная – мужской);
  • checksum, т.е. контрольное число (последняя цифра)

Как считается контрольная цифра я пока что не знаю. Здесь можно проверить, как работает большой брат, исходники большого брата — под катом.

Забавные факты про украинский ИНН:

  • физическим лицам, которые из-за своих религиозных или других убеждений отказываются от принятия идентификационного номера, официально сообщили об этом соответствующим органам государственной власти и имеют соответствующую отметку в паспорте, предоставляется идентификационный номер в виде номера и серии паспорта таких лиц (src);
  • иностранцы не могут отказаться от кодов, даже если они имеют соответствующие религиозные убеждения. Причина: украинские власти не могут внести соответствующую отметку в их паспорт (см. предыдущий пункт) и присвоить ИНН по номеру паспорта. Зачем нужен украинский ИНН иностранцу? Чтобы иметь возможность стать учредителем юрлица или заниматься предпринимательской деятельностью на территории Украины (src);
  • я не смог найти в сети информацию о том, какие ИНН присваиваются гражданам, родившимся в 19 веке (т.е. до 01.01.1900 года).

Отдельно хочется процитировать каких-то религиозных маразматиков (орфография и пунктуация сохранены):

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

Понятно, что не сложно написать программу, которая к 1 января 1900 года прибавит число и получит дату рождения. Так что, милые дамы, со старинным правилом этикета, согласно которого о Вашем возрасте спрашивать было не принято, придется расстаться. У технотронного века свой жесткий и далекий от условностей приличия “этикет”.

Мой вам совет, милые дамы: если кто-то выспрашивает у вас ваш ИНН, отнеситесь к нему с подозрением!

(more…)

Выборы в Верховную Раду — 2007

30-го сентября вечером начнётся наша прямая трансляция (с сайта ЦВК) распределения мест в украинском парламенте, как в 2006 году.

Синдикация трансляции: rss; трансляция синдикации трансляции в ЖЖ — [info]2006_rss

Кроссворды онлайн

Реанимировал свою старую онлайн-забаву: кроссворды, которые можно разгадывать прямо в браузере.

Программинг (PHP/JavaScript) пришлось переделать полностью, зато теперь кроссворды работают в IE, FF и Opera. Пока что на сайте выложено всего два кроссворда (1, 2), но уже можно подписаться на обновления (или добавить во френды).

Если найдёте ошибку — смело пишите в комментарии. Спасибо!

P.S. Ещё придумал уникальный и оригинальный домен для проекта, ага.

Получить ID после Insert

26.06.07 @ 02:51 — Programming, PHP, SQL

Задача: получить идентификатор только что добавленной в таблицу записи.
Необходимое условие: в таблице должно быть AUTO_INCREMENT поле.

Решение (MySQL): SELECT LAST_INSERT_ID();
Решение (PHP/MySQL): mysql_insert_id();
Решение (MsSQL): SELECT @@IDENTITY AS ID;

Замечания:

  1. Сбросить (поменять) значение Next Autoindex в MySQL: ALTER TABLE `table_name` AUTO_INCREMENT = 238;
  2. При выполнении INSERT запроса на добавление нескольких записей (insert into `table_name` (field1,…,fieldm) values (’value11′,…,’value1m’), …, (’valuen1′,…,’valuenm’);) MySQL в качестве LAST_INSERT_ID возвращает идентификатор первой вставленной записи, а не последней, как можно было бы предположить.
  3. В некоторых версиях MySQL был баг: при неуспешном выполнении команды INSERT IGNORE (если уникальный ключ уже существует и ничего не добавляется) LAST_INSERT_ID возвращает следующее доступное значение для авто-инкремента.
  4. Не использовать LAST_INSERT_ID, когда его надо использовать, нельзя. Вариант “быстренько пишем в базу и мгновенно делаем SELECT максимального значения авто-инкремента” ужасен и нестабилен.

Передать переменную из JavaScript в PHP

25.06.07 @ 22:54 — Programming, JavaScript, PHP

В свете бурного развития AJAX-технологий классический ламо-вопрос начинающего PHP-программиста:

Как передать значение переменной из JavaScript в PHP?

обретает новое звучание.

Программирование на PHP

21.06.07 @ 12:38 — Programming, PHP

Программировать на PHP очень легко, особенно до тех пор, пока сайт находится в разработке.

Когда дело доходит до промышленного использования легко разработанных скриптов, начинаются проблемы.

Например, начинает тормозить база: запросы, мгновенно отрабатывавшие на 100 тестовых записях, начинают подтормаживать уже на 5,000 записей. Using filesort, using temporary, using where.

Увеличивается количество посетителей сайта и начинаются проблемы с flock().

Генерирование всего-на-лету убивает процессор сервера: thumbnailы, pdfы и прочее так и просятся в кеш.

Возникают проблемы с доступом к удалённым ресурсам, которые могут и не ответить.

А при тестировании всё работало нормально: быстро, стабильно, красиво. А тестировать на прочность никто и не пытался.

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

У предпринимателя есть сайт-идея. Он находит дешёвого php-программиста, который ваяет движок, реализующий эту идею. Движок дешёвый, на прочность не испытанный, но тем не менее работает: воплощает идею и позволяет предпринимателю раскручивать сайт. Который пока что работает относительно стабильно. Главное, что обходится предпринимателю он недорого, вкладываясь в бюджет, которым тот готов рискнуть: дизайн, движок, домен, хостинг, немного рекламы + время самого предпринимателя.

Далее, если идея оказывается неудачной, то сайт тихо мирно доживает до окончания регистрации домена и умирает.

Если же идея срабатывает, и предприниматель видит перспективу выхода на окупаемость, сайт продолжает жить, демонстируя всё больше и больше багов, которых изначально не было. Эти баги вылазят под давлением увеличившейся посещаемости и нагрузки на сайт.

Увеличение нагрузки означает повышение доходов. Сайт начинает приносить предпринимателю какие-то деньги, которые он может инвестировать в развитие бизнеса. Для сайта это означает: новый dedicated сервер вместо shared hosting, оптимизация движка, добавление нового функционала, переписывание движка с нуля.

PHP очень дешёв для первичной разработки; низкая цена реализации (по сравнению с более дорогим .NET, JSP) бизнес-идеи увеличивает количество предпринимательских попыток. Сработавшие проекты всё равно перейдут на более дорогой движок (качественный PHP или .NET), а несработавшим всё равно, на какой платформе умирать.

Next Page »   
Реклама :: Полимер песчанная черепица профнастил виды, полимернопесчаная черепица. :: Расчет автострахования КАСКО калькулятором на сайте all-casko.ru (страхового агентства КАСКО).

 
Реклама :: прокат лимузинов :: каско автомобиля, услуги страхового брокера