Блог Александра Башкирова

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

php

Подписаться на эту метку по RSS

Хабр: чистый код на PHP

Просмотров: 3104Комментарии: 0
Alib.spb.ru

На Хабре очередная классная статья. Про чистый код. Вроде бы "ясно как пень", но зачастую об этих мелочах все забывают. Статья содержит в названии "на PHP", но лично мне кажется, что для большинства современных языков программирования она будет очень и очень актуальна. Потому что там описываются не основы языка, а основы написания кода, которые в общем-то универсальны.

Ссылка: https://habrahabr.ru/company/mailru/blog/336788/

FluentPDO - библиотека для работы с PDO в PHP

Просмотров: 4469Комментарии: 0
Alib.spb.ru

Слйчайно наткнулся на FluentPDO - библиотеку для работы с PDO в PHP. Смысл в том, что библиотека является слоем абстракции между приложением, PDO-расширением PHP и SQL. Потестировав, понял, что удобно. А значит, есть смысл рассказать.

Для начала - ссылки.

  1. FluentPDO на github: https://github.com/envms/fluentpdo
  2. Подробная статья о том, как её использовать: https://www.sitepoint.com/getting-started-fluentpdo/
Ну и - чем "зацепило".

Смысл в том, что от программиста при использовании библиотеки требуется создать PDO-объект для работы с БД, передать его в fluentpdo, и дальше, используя встроенные методы - работать с SQL.

Например:

$pdo = new PDO("mysql:dbname=testdb", "testuser", "testpassword");
$fpdo = new FluentPDO($pdo);

Дальше "всё просто", например, простой select * from mytable where id=$userid будет выглядеть так:

$query = $fpdo->from('mytable')->where('id', $userid);

И чтобы обработать результат:

foreach($query as $row){
    
print $row['field1'] . ' -- ' . $row['field2'] . '<br>';
 }

Если нужны конкретные столбцы, то:

$query = $fpdo->from('mytable')
   ->select(array('field1', 'field3'))->where('id', $userid);

Ну и чисто для иллюстрации - insert:

$values = array('field1' => 'testval1', 
     'field2' => 'testval2', 
     'field3' => 'testval3'); 
     
$query = $fpdo->insertInto('mytable')->values(values); 
  
$insert = $query->execute();

Также поддерживаются все основные операции, включая разнообразные update, join, delete и т.д.

Кстати, по приведенной выше ссылке примеров сильно больше. Скажу, что я попробовал на тесте FluentPDO - мне понравилось. Как-то упрощает жизнь, с точки зрения того, что не надо писать километровый код и запросы выглядят пологичнее. Ну и вся мощь PDO - типа единого синтаксиса работы с разными БД, безопасности (использование placeholder), получается как бы на нашей стороне :)

PHP: библиотека для парсинга wiki-текста

Просмотров: 2458Комментарии: 0
Alib.spb.ru

Для одного из своих проектов написал небольшую библиотечку для парсинга вики-текста, на php.

Возможности и особенности:

  • позволяет парсить wiki-форматирование
  • корректно относится к html - то есть принимает html-разметку наряду с wiki-разметкой
  • за основу взят синтаксис dokuwiki
  • синтаксис облегчен: задача стояла сделать инструмент под конкретные задачи, поэтому, например, библиотека не поддерживает таблицы
  • в полном объеме поддерживаются картинки, включая выравнивание
  • код уникальный. То есть библиотека не "тянута и переписана", а - полнотью своя. По этой же причине - работать может "не так" (я всё-таки не профессиональный программист и писал только под свои задачи)
  • исходя из предыдущего пункта: бибиотека поставляется как есть, без гарантий и претензий. Пользуйтесь на здоровье, но я за результат её работы не отвечаю, хотя и постарался сделать, чтобы она работала корректно.
Скачать: PHP библиотека парсинга wiki-текста

В архиве - пример и описание возможностей форматирования.

Php test online (запуск php кода онлайн)

Просмотров: 20343Комментарии: 2
Alib.spb.ru

Как обычно, случайно натолкнулся: http://writecodeonline.com/php/ - онлайн тестировщик php кода. Проще говоря, пишешь код и можешь его исполнить.

Там же - запуск Javascript и URL encoder.
А вот такого же, но для bash - не нашел (что вообще кажется логично, скрипты на bash сильно зависят от окружения).

Для памяти. Как лечить pcfg_openfile: unable to check htaccess file, ensure it is readable, referer:

Просмотров: 8538Комментарии: 3
Linux

В общем, создавая новый проект, налетел на такую ошибку: pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://site

Причем, не подгружались картинки из /themes/%THEME%/images - то есть выглядело это так: `все работает`, но изображения на странице - отсутствуют.

Лечится достаточно просто.

1) Смотрим лог:

cat ~/WWW/%SITENAME%/error.log | tail -20

Видим в нем следующее безобразие:

[crit] [client 127.0.0.1] (13)Permission denied: /home/alexander/WWW/%SITENAME%/www/themes/ap/images/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable, referer: http://site/

2) Проверяем, что за права на папку

ls -li ~/WWW/%SITENAME%/www/themes/ap/

Получаем что-то типа:

6966642 drwx------ 2 alexander alexander  4096 мая   19 20:40 images

3408302 -rw-r--r-- 1 alexander alexander 15709 мая   19 20:36 index.php

Внимательно рассматривая сию картину, понимаем: читать папку images `никому низя`

3) Меням картин мира

chmod +rx ~/WWW/ap-pavel/www/themes/ap/images/

ls -li ~/WWW/%SITENAME%/www/themes/ap/

Получаем:

6966642 drwxr-xr-x 2 alexander alexander  4096 мая   19 20:40 images

3408302 -rw-r--r-- 1 alexander alexander 15709 мая   19 20:36 index.php

Большой ПС.

Я не разбирался конкретно с тем, нужно ли давать всем +rx, просто сделал - так как локальная машина, доступ к локальным сайтам закрыт на уровне IPTables, сайты повешены на нестандартные порты... и по большому счету - думать, действительно ли нужно запускать скрипты в папке всем, просто не хотелось. На реальном хостинге - скорее всего добавлял бы +rx для группы, и +r для всех.

Linux Mint 16 vs Linux Mint 15

Просмотров: 2736Комментарии: 0
Linux

Поставил Linux Mint 16 (Petra) на домашний неттоп.

И все бы хорошо, но есть несколько "но":

1) Файлы локальных сайтов у меня лежат в домашней директории. Apache 2.4.6 с какого-то перепугу не смог их прочесть (не было доступа для пользователя www-data в директорию пользователя alexander).

Вообще говоря, есть несколько способов решения этой проблемы. Первый, ввести www-data в группу alexander и запускать apache из-под этой группы. Вторй, запускать apache под пользователем alexander, входящего в группу alexander. По идее, так как сайты локальный, и iptables начисто блокирует возможность работы с этими сайтами по локальной сети, то для ленивых второй способ предпочтительнее (минус одно действие).

Итого в файле /etc/apache2/envvars из-под рута вносим правки:

export APACHE_RUN_USER=alexander
export APACHE_RUN_GROUP=alexander

2) От ошибки

PHP Warning: getdate() function.getdate]: It is not safe to rely on the system’s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function спасает явно прописать в /etc/php5/apache2/php.ini (из-под рута), в секции [Date]

date.timezone = Europe/Moscow

И да, не забыть рестартовать апапч:

sudo /etc/init.d/apache2 restart

3) А вот ошибка Deprecated: mysql_pconnect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in %file_name% так просто не лечится. Дело в том, что начиная с php 5.5 поддержка базового расширения mysql из php "начинает убираться" - сначала предупреждающими сообщениями, а затем - и полностью.

В принципе, ничего страшного - переписать класс для работы с БД и все.

Для памяти:

/etc/init.d/apache2 -v - версия апача

Во всем остальном - особых отличий не заметил. Все настройки (пользователя и системы) штатно перенеслись (скрипт - архив - облако - скачивание - разархивация) и заработали.

Отдельный вопрос - синхронизация, но про нее как-нибудь позже.

Быстрое разворачивание базы данных mqsql на хостинге

Просмотров: 3027Комментарии: 0
MaxSiteWordpress

Пришлось тут переносить сайт с локального на нормальный хостинг. Все бы хорошо - да нет на нем предустановленных оболочек типа phpMyAdmin, а снаружи порты mysql, естественно, закрыты.

В общем, засада. Не знаю, кто как - а я нашел отличное решение.

Знакомитесь: Sypex Dumper 2.

Скрипт устанавливается в отдельную папку на сервере, и работает автономно. При запуске вводите имя и пароль на сервер mysql - он не хранит их нигде (что хорошо с позиции безопасности)? получаете доступ к собственно скрипту.

Собственно, он "заточен" под создание и восстановление бекапов в виде .sql файлов. Причем, по заверениям разработчиков, с большими по размерами файлами он справляется не менее легко, чем с маленькими. Не знаю, не проверял - но вот небольшие (120 Кб) .sql файлы, сгенерированные phpMyAdmin, он "съедает" на ура. Что, в общем от него и требовалось ))

Так что если кому надо - весьма рекомендую.

NB - на сайте есть платные версии, и есть бесплатная. Мне более чем хватило возможностей бесплатной, хотя в платной, наверное, тоже есть своя "фишка", и не одна.