Сервис Интернет Объявлений

 
21
Ноябрь
2013

Переезд на другой хостинг. Возможные проблемы.




Хостинг проблемы переезда

Тема не нова. Но, так как сам наступил на эти грабли, не упущу возможности поделиться «впечатлениями». Все началось с того, что мой текущий хостер отрубил ВСЕ мои сайты, потом что я конкретно превысил лимиты потребления процессора. Конечно, открытыми остаются ряд вопросов: почему не ограничить мое потребление, почему не прислать предупреждение, почему не вводить временные остановки и т.д. Но факт остается фактом: доступа к аккаунту нет, саппорт предлагает перейти на ВПС или Дедикейтед и даже предлагает свою помощь в настройке. Это дорогое удовольствие и пришлось договариваться.

Утром я увидел свои сайты: их включили, когда я пообещал разобраться в ситуации и сделать все возможное, чтобы уменьшить аппетиты своих сайтецов. Разумеется, первым делом я решил спасать небольшие, малопосещаемые сайты, но, тем не менее, представляющие собой кладезь ценной информации. Вторым делом я начал разбираться с основными потребителями ресурсов: что-то отключил, что-то переписал для уменьшения обращения к БД.

Так вот, не вдаваясь во все переживания и грустные мысли, я расскажу с наиболее яркими проблемами совместимости после переезда. Замечу, что все сайты построены на WordPress разных версий. Итак:

  • Кириллические имена файлов — это зло. После переноса они превратились из «крокозябр» в HTML-сущности. Само собой, ссылки на них потеряны, названия не прочесть. Грядет большая работа по ручной переименовке постов за 3 года. Под Вордпресс есть плагин Filenames to latin. почему его не включают в базовую поставку, вместе Hello, Dolly?
  • Версия PHP. Не сразу понял, в чем беда. Раньше была 5.3. На новом месте phpinfo() показывает 5.2. Результат — отвалившиеся всякие функции по всему сайту. Кстати, этот блог пребывал без хедера, сайдбара пару дней именно из-за версии PHP.
  • Настройки безопасности PHP. С прошлыми хозяевами договорился о разрешении функции exec(), о полноценной работе CURL, о произвольной настройке файла php.ini. Теперь все по новой и не сразу было ясно, что работает, а что нет.
  • Смена айпи = новая проблема безопасности. Особенно это сказалось на мерчанте Приват24. Не сразу въехал, что он упал из-за смены айпи-адреса сайта.
  • Не забыть перенести все последние файлы и БД на новое место. Например, я переехал и залил БД паручасовой давности. вобщем, она оказалась неактуальной и я не сразу понял в чем дело.

Благо, саппорт адекватный и на мои просьбы отзывался благосклонно. За что им отдельное «Thank you!». Жили бы они где-то рядом, я бы с удовольствием преподнес бы в качестве подарка сувенир лягушка из янтаря и бронзы. Но кто знает, может этот саппорт находится у меня за стенкой? :)

21
Май
2013

Как проверить, открыл ли адресат ваш е-мейл. Аудит-пиксель своими руками

аудит-пиксель. статистика открываемости писемСитуация: Вы отправляете е-мейл получателю. Или делаете рассылку своим подписчикам. И хотите знать, открывалось ли письмо вообще? Опустим функцию принудительного уведомления, т.к. с ней все ясно, и она не всегда работает.

Обратим внимание на реальные способы, которые используются системами рассылки писем. А их аж два:

  1. регистрация активности (мониторинг кликов по ссылкам внутри письма);
  2. использование аудит-пикселя.

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

А теперь расскажу подробнее об аудит-пикселе.  Это такая картинка в один пиксель. Работает как счетчик. Когда она загружается с вашего сервера, происходит регистрация ее загрузки: значит письмо открыто! У этого способа есть недостаток: если получатель предпочел не загружать картинки, то счетчик не сработает. Вы можете либо в текстовом варианте попросить юзера загрузить картинки, либо через картинки показать все письмо. И тогда его открытие без картинок равносильно отсутствию открытия вообще. Ведь пользователь ничего не увидел и не узнал о вас.  Зачем он такой нужен в статистике открываемости?

Поэтому я не считаю аудит-пиксель большим недостатком. Других инструментов пока не изобрели. Поэтому расскажу, как сделать самый простой на языке PHP. Мне это необходимо было для собственных писем в Сервисе Интернет Объявлений onboard.net.ua, над которым я активно работаю последние полгода.

Так вот, о пикселе… Фактически это не картинка, а PHP-код, возвращающий картинку и получающий GET-запрос. Код такого пикселя выглядит следующим образом:

counter.php

<?php

header('Content-Type: image/gif');
echo base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw==');

if ($_GET[counter_id]){

//тут идет действие при открывании картинки
//например, запись в БД или файл параметра counter_id

}

?>

Строка base64_decode(…) как раз рисует прозрачную гифку 1х1.

Использовать этот файл очень просто. В письме, где хотим вставить картинку, пишем код:

<img src="counter.php?counter_id=ВАШ_АЙДИ">

Все просто: При вызове этой картинки срабатывает counter.php и делает все секретные делишки.

 

 

Кстати, если Вы не хотите, чтобы кто-либо из окружающих заметил Вас в процессе написание подобных счетчиков, тогда поставьте наконец-то межкомнатные двери недорого. Множество расцветок, фактур и фурнитур. Есть даже стальные, крепкие. А также все сопроводительные услуги по установке.

04
Май
2013

Templatemonster — шаблоны из прошлого

Волей-неволей пришлось иметь дело с несколькими покупными шаблонами для WordPress от Templatemonster. Цена их была порядка 50 евро за штуку. Цена довольно высока и сравнима со стоимостью изготовления плохенького сайта целиком.

Разумеется, многие из них можно скачать.  Или найти подобные задаром.

Но клиент сказал «Хочу это!» и покупка состоялась. Под восторженные фанфары внутреннего спокойствия Вы получаете письмо от именитого бренда. В письме, кроме благодарностей,  ссылка на архив и пароль. Сразу скажу ,что ссылка не постоянная и не долгоживущая. Поэтому выкачивайте и делайте резервные копии.

В архиве мы можем найти сам шаблон и исходник в psd. Начну с исходника: спасибо, что он послойный! Что, в принципе, ним можно пользоваться. Но в нем нет слайсов. Иными словами, я не могу быстро и с разбега изменить надпись на кнопке или картинку в шапке. Для этих процедур нужно вручную копировать и подрезать «на глаз» по оригиналу. Но это не главная неприятность.

Что меня убило, так это полная олдскульность и неряшливость. Например, шаблоны, которые попались мне, не имели настраиваемого главного меню. А формировалось оно в порядке следования активных страниц. Значительные участки тектстовой области шаблонов на самом деле были только иллюстрациями в gif-формате. На просьбу клиента «подправить буквы в тексте на главной» первым делом открываю Фотошоп и устанавливаю нужные фонты.

Если, уважаемый читатель, Вы считаете это нормой, то взгляните на темы от YooThemes, WooThemes и  ElegantThemes. При этом, цена на них часто оказывается ниже!

Но, несомненно, бренд дороже денег, и раскрутка сделала свое. Это «свое» заключается в том, что перед разработкой сайта первым делом выбирается дизайн на сайте сабжа, а затем формируется устное техзадание в духе «Хочу отакое. И чтоб работало и было красиво.»  И после покупки «отакого» начинается болезненная работа, борьба и трата времени на доработку того, что должно было быть сделано как положено.

А для автовладельцев и автолюбителей рекомендую сайт по ремонту бамперов http://www.77professional.ru/remont-bamperov/. На сайте Вы найдете рекомендации, советы, пошаговые инструкции и примеры качественного ремонта.

29
Январь
2013

Параллельные (фоновые) процессы в PHP

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

Второе применение — системные ответы платежным системам об успешности операции. В данном случае при длительной обработке запроса (записи в БД, отправка письма, СМС…), удаленный сервер может и не дождаться своевременного ответа (в виде сгенерированной страницы) и свалиться в таймаут.

Порывшись в интернетах и перебрав массу вариантов, я пришел к следующему решению.

Берем функцию:

function launchBackgroundProcess($call,$file=false,$errors=false)
{
      if (PHP_OS == 'WINNT' || PHP_OS == 'WIN32')
      {
      $handle=popen('start /MIN '.$call, "r");
      if($handle===false)
      trigger_error("Can't start process $call",E_USER_ERROR);
      else pclose($handle);
      }
      else{
      $add = "";
      if($file===false){
      $file = '/dev/null';
      }
      if($errors!==false){
      $add = " 2> ".$errors;
      }
      exec($cmd = ($call.' > '.$file.$add.' &'));
      }
}

И обращаемся к ней:

launchBackgroundProcess('wget http://yoursite.com/yourfile.php');

В файле http://yoursite.com/yourfile.php находятся все хроноемкие процессы, которые нужно выполнить в фоне, но результат которых уже не будет возвращен в сформированную страницу.
Причем, можно передавать GET-параметры:

launchBackgroundProcess('wget http://yoursite.com/yourfile.php?param1=val1');

Учтите, что функция exec() очень часто пребывает в отключенном состоянии из-за режима безопасности на вашем хостинге. Если не работает — пишите в саппорт.

06
Декабрь
2012

WordPress, PHP и запросы

Столкнулся с одной интересной фишкой, связанной с работой Вордпресса. О которой, собственно, напишу здесь.

1. Имеется сайт на вордпрессе. Например mysite.com
2. Параметры — Постоянные ссылки настроены в режиме /%postname%/ . Это значит ,что страницы на сайте имеют вид mysite.com/samplepage/
3. Установлен плагин Grimp — PHP, позволяющий реализовывать на страницах PHP-код (< ? рhр {code} ? >).
4. Есть обычная страница с PHP-кодом mysite.com/mypage/, которая принимает и GET- ,и POST-запросы.

Но если в корне сайта создать папку mypage, то страница больше не принимает ни GET- ,ни POST-запросы. В отдельных случаях может перестать отображаться контент: Вы увидете index of /mypage и перечень файлов.

Если папку переименовать нельзя (нужны прямые ссылки), то выход можно найти в правке файла .htaccess
Следует добавить:
RewriteCond %{REQUEST_URI} ^/mypage
RewriteRule . /index.php [L]

Но тогда будут недоступны файлы в подкаталогах (css, js), которые могут находиться в mypage

Для этого добавим самый популярный знак вконец имени папки:

RewriteCond %{REQUEST_URI} ^/mypage$
RewriteRule . /index.php [L]

Теперь должно работать!

upd: если POST-запросы все-таки не проходят, посмотрите внимательно на action = в form…. Чтобы адрес четко совпадал!

Не менее актуально: близятся холода, выпадает снег. Чтобы застраховаться от возможных зимних болезней, но при этом выглядеть модно и стильно, рекомендую взглянуть на винтажное пальто лолита. Согласитесь, за свои деньги это пальтишко порадует любую уважающую себя девушку.

04
Декабрь
2012

MYSQL: меняем несколько столбцов местами

Периодически возникает необходимость подвигать столбцы таблицах SQL. Это актуально, когда нужен определенный порядок вывода элементов массива, полученных из таблиц базы данных. Либо Вам просто нужно получить заголовки столбцов в определенном порядке.
В панели управления MySQL вручную перетаскивать столбцы пока невозможно.
Но это можно сделать «ручками» через команды.
Переходим на вкладку SQL и пишем

ALTER TABLE `mytable`
MODIFY COLUMN `name` VARCHAR(255) NOT NULL AFTER `telephone`,
MODIFY COLUMN `surname` VARCHAR(255) NOT NULL AFTER `name`,
MODIFY COLUMN `company` VARCHAR(255) NOT NULL AFTER `surname`;

Эта команда построит вряд столбцы name, surname, company в аккурат после столбца telephone в таблице mytable.

Учтите: названия таблиц и колонок заключаются в обратную кавычку (расположена на Ё). При больших объёмах перемещений вся процедура может затянуться. При этом БД будет времено недоступна.

Кстати, делать эту процедуру рекомендуется с хорошим настроением и соответствующим внешним видом. Первым делом нужно сделать Глянцевание со скидкой в салоне красоты Онтарио. После такой процедуры — никакие PHP и MySQL не страшны. Точнее, не нужны :)

18
Октябрь
2012

Инициатива наказуема: убираем автоматические абзацы <p></p> в WordPress

Если кому-то также надело это своенравие и вседозволенность, если Вы хотите получать то, что пишете в среде Wprdpress, тогда эта строчка кода для вас:

remove_filter(‘the_content’,’wpautop’);

Прописываете ее в functions.php текущей темы, и все «двойные Ентеры», и прочие провокаторы не будут более инициаторами создания конструкций <p></p>, которые способны разрушить и без того хрупкие дизайны движка WordPress.

15
Октябрь
2012

Будьте внимательны с подсчетом кириллических символов

При работе с Вордпрессом да и вообще с Веб-программированием, нажно учитывать, что некоторые команды не умеют коректно работать с кирилицей.

И когда Вы ставите, например, ограничение строки до n символов — проверяйте, блин, вручную, сколько и каких символов туда войдет. Ведь для кириллицы и прочего юникода ваше n может превратится в n/2. А это уже чревато (в моем случае) непредсказуемыми результатами и, даже, оттоком клиентов.

Будьте внимательны при работе с WordPress-плагинами. А лучше подучите PHP- и Javascript-программирование и оформите вручную ту или иную функцию. В крайнем случае, можно обратитьс к знакомым программерам или фрилансерам.

С уважением.

10
Сентябрь
2012

Выводим имя юзера и прочую инфу на странице Вордпресса

Сначала ставим плагин, включающий РНР в Вордпрессе. Например, grimp-php

Затем добавляем этот код:

<?php global $current_user;
      get_currentuserinfo();

      echo 'Username: ' . $current_user->user_login . "\n";
      echo 'User email: ' . $current_user->user_email . "\n";
      echo 'User first name: ' . $current_user->user_firstname . "\n";
      echo 'User last name: ' . $current_user->user_lastname . "\n";
      echo 'User display name: ' . $current_user->display_name . "\n";
      echo 'User ID: ' . $current_user->ID . "\n";
?>

и радуемся!

27
Август
2012

Masterpiece of Support. SideOffer is here

SideOffer-Wordpress-Plugin

Today I’m gonna tell an interesting story about problems and their solving. I’m gonna tell you the story how SideOffer WordPress Plugin became v.1.0.2.

SideOffer is a useful plugin with very clear settings. It can hide extra information about your site behind page area, leaving only counterfoil. Click on this counterfoil shows all hidden information through the sliding of extra panel.

Once I installed SideOffer and became confused. This plugin didn’t work with eiter my topic or my hosting or with other plugins. I could only see it in action in my admin panel. As I supposed this plugin could be a real thing, I wrote a letter to David Benedetti, the author of SideOffer.

I was very surprised to get an aswer half-an-our later. Dave asked me to provide all necessary information so he could analyze that stuff. I did it.

Dave decided that he did forget to include jquery to load on the front end. …and sent me new 1.0.2 version of SideOffer!

But even tht version failed to work on my site. Dave didn’t give up. During our comunication he noticed additional bug. This time it was with my WordPress Template:
Uncaught TypeError: Object [object Object] has no method ‘placeholder’

So i began to dig. During my experiments I found i final reason. I translated one of widgets and entered Cyrillic symbols in its PHP-file. this caused problems with overall template work. I just resaved that fle in other encoding using Notepad++

P.S. I promised Dave to write a review about plugin. But I wrote this story about excellent free support, about collaboration and willing to help to end-user. So everybody can suppose it is a Recommendation letter for David Benedetti.
If somebody has questions — use Facebook to contact me.

Regards, Oleksandr Demchenko