20 заметок с тегом

php

Ctrl + ↑ Позднее

Tcpdf. Как добавить свой шрифт

Многим известна библиотека Tcpdf. Для любознательных смотреть здесь.
Нас интересует директория tools.

Внутри замечательный скрипт, который поможет добавить наш кастомный шрифт в проект.
Выполняем:

php /var/www/html/tcpdf/tools/tcpdf_addfont.php -i CustomFont.ttf

В результате увидим следующее:

>>> Process successfully completed!

Новые файлы мы сможем увидеть в директории /tcpdf/fonts/

Чтобы использовать новый шрифт достаточно:

$pdf->SetFont('customfont', '', 14, '', false);
2016   font   php   tcpdf

Установка и настройка Composer

Без php не поставить, потому начинаем именно с php. Актуальная версия на сегодняшний день — это версия 7.0:

sudo apt install php7.0-cli

Теперь можно ставить Composer:

curl -sS https://getcomposer.org/installer | php

В итоге мы получим файл composer.phar, который и является исполняемым. Запускать его необходимо командой:

php composer.phar

Выполнив нехитрую команду, мы сможем исполнять вводя «composer» вместо «php composer.phar»

sudo mv composer.phar /usr/local/bin/composer

Если вы устанавлиаете Yii2, то обратите внимание, что необходимо установить плагин Composer Asset Plugin, т. к. позволит работать с некоторыми пакетами, которые контролируются менеджерами пакетов Bower и Npm. В частности, в Yii2 — это Bower, который «подтягивает» Jquery и Twitter Bootstrap.

composer global require "fxp/composer-asset-plugin"
2016   bower   composer   composer-asset-plugin   php   php-cli   yii2

Алгоритм Луна на php

Что такое Алгоритм Луна читайте на Википедии.
Если необходимо реализовать задачу на php, то функция может выглядеть так:

public static function isLuna($number_card)
{
    // leave numbers
    $number = strrev(preg_replace('/[^\d]/', '', $number_card));

    // account control summ 
    $sum = 0;
    for ($i = 0, $j = strlen($number); $i < $j; $i++) {
        
        if (($i % 2) == 0) {
            $val = $number[$i];
        } else {
            
            $val = $number[$i] * 2;
            if ($val > 9)  {
                $val -= 9;
            }
        }
        $sum += $val;
    }

    return (($sum % 10) == 0);
}

Выполняем проверку карты:

if ( !self::isLuna($number_card) )
{
    // Номер карты некорректен
}

P.S. Данный кусок кода я увидел на одном из форумов, благополучно забыл, но совсем недавно мне понадобилось вспомнить о методе. Возможно пригодится и вам :)

Поднять веб-сервер без Apache2 и Nginx

А знаете ли вы, что простенький веб-сервер можно поднять и без необходимости установки и конфигурирования apache2 или nginx?

Находясь в директории нужного вам проекта, наберите в консоли:

php -S localhost:8080

В ответ вы увидите, что все заработало:

Соответственно, чтобы остановить текущий «сервер», достаточно нажать Ctrl + C

2016   apache2   nginx   php   server   web

Вопросы на собеседовании для PHP-разработчика

Попалась на глаза важная для каждого php-разработчика книга. Каждый из нас сталкивался с собеседованиями на должность Php-девелопера. Читайте книгу, которую написал Андрей Шевченко и готовьтесь успешно.

P.S. а также начинайте вникать в новые и улучшенные возможности php7 :)

вот ссылка на сайт книги Ссылка, к сожалению, не работает. Качаем отсюда

UPD Т. к. сайт автора этой книги перестал работать, то дам ссылку на Яндекс.Диск, откуда можно забрать данную книгу. Если таким образом нарушаются чьи-либо права — прошу написать на мою почту opotemkin@mail.ru

Cоздание .htpasswd

Иногда бывает так, что тестовый сервер располагается на домене/поддомене (или даже просто по открытому IP), а вам не очень бы хотелось, чтобы он был доступен поисковым роботам и любому постороннему взгляду. Здесь поможет htpasswd от apache.

Внешне это выглядит так:

Т. е. когда пользователь открывает страницу сайта, то у него запрашивается Логин и Пароль. Проверка происходит на стороне сервера и попасть на данную страницу смогут лишь «избранные» :) Данный способ достаточно надежен, так как проверка происходит на стороне сервера.

Для начала необходимо установить утилиту от apache:

sudo apt-get install apache2-utils

Далее, создаем файл htpasswd, в котором будет храниться логин и пароль:

htpasswd -mbc /home/my_dir/.htpasswd your_login your_password

your_login — это логин, your_password — это чистый пароль (не хеш). Апач создаст файл .htpasswd, внутри если заглянуть в него будет ваш логин и захешированный пароль.

Теперь, чтобы включить данную защиту, необходимо в корневую директорию вашего проекта (сайта) положить файл .htaccess (или если он у вас уже есть, то просто откройте его на редактирование).
Добавьте несколько строк:

AuthType Basic
AuthName "Access is Denied. Enter password"
AuthUserFile /home/my_dir/.htpasswd
require valid-user

Рестартаните апач и вуаля, все готово.

На заметку, при создании файла -mbc означают следующее:
-m Force MD5 encryption of the password.
-b Use the password from the command line rather than prompting for it.
-c Create a new file.

Соответственно, если вы будете вносить изменения в уже существующий файл htpasswd, то ключи будут выглядеть по другому:

htpasswd -mb /home/my_dir/.htpasswd your_login your_password
2016   .htaccess   .htpasswd   apache2   apache2-utils   linux   php   server   ubuntu

Создание Sitemap на Yii. Часть 1

Данный пост навеян статьей Александра Макарова и его библиотеки для создания Sitemap https://github.com/samdark/sitemap
Создаем SitemapController.
Файл sitemap.xml можем сохранить в публичной директории, которая игнорируется git-ом, например в assets.
В Yii2 еще проще, есть настроенные неймспейсы, а в Yii1 можем сложить расширение в extensions:
/protected/extensions/Sitemap/Sitemap.php

Чтобы использовать в Yii1, закомментирйте:

// namespace samdark\sitemap;
// use XMLWriter;

Далее, сам контроллер:

class SitemapController extends SController
{
    public $priority = 0.7; // Начальный приоритет ссылки
    public $staticpage = array(  // статические страницы для sitemap
                '/', '/contacts', '/about'
            );
    
    public function actionIndex(  )
    {
        Yii::import( 'application.extensions.Sitemap.*' );
        $sitemap = new Sitemap(Yii::getPathOfAlias('webroot.assets') . '/sitemap.xml');
        
        foreach ($this->staticpage as $staticpage) {
            $sitemap->addItem(Yii::app()->createAbsoluteUrl($staticpage), time(), Sitemap::DAILY, 1);
        }
        
        // Подтянем модель, например, Новостей с сайта
        Yii::import( 'application.models.News' );
        $criteria=new CDbCriteria;
        $criteria->select=array('alias'); // Нам нужен только алиас Новости, чтобы собрать ссылку
        $news = News::model()->published()->findAll($criteria);
        foreach ($news as $item) {
            $news_alias = Yii::app()->createAbsoluteUrl($item->alias);
            $sitemap->addItem($news_alias, time(), Sitemap::DAILY, $this->priority);
        }
        
        // write ithttps://opotemkin.ru/all/sozdanie-sitemap-na-yii-obnovlyaem-sitemap-po-kronu-chast-2/
        $sitemap->write();

    }

}

В итоге xml будет доступна по адресу www.Ваш-сайт.ru/assets/sitemap.xml
Здесь читаем продолжение...

2015   php   sitemap   yii

Текущий контроллер/модель/экшн в Yii и Yii2

Очень часто необходимо знать, какой текущий Контроллер или, например, Модель. Такое пригодится, чтобы при определенных условиях действовало какое-либо правило. В качестве примера пусть будет следующее:
В экшне «actionIndex» Контроллера SiteController показывается статичный заголовок «Добро пожаловать, земляне!».
При этом, данное правило должно действовать в layout, т. к. Заголовок задается в нем:

if (Yii::$app->controller->id == 'site' && Yii::$app->controller->action->id == 'index')
{
	echo 'Добро пожаловать, земляне!';
}

Т. к. ситуации бывают разные, то я просто приведу примеры для Yii1 и Yii2:

текущий Контроллер:

Yii::$app->controller->id

получить Контроллер в качестве объекта:

Yii::$app->controller

текущий Экшн:

Yii::$app->controller->action->id

А если нужен полный путь, то можно так его получить:

Yii::$app->controller->route

или, ели обратиться внутри контроллера:

$this->route

А из представления так:

$this->context->route

Для Yii1 все практически идентично.
текущий Контроллер:

Yii::app()->controller->id

а можно и так:

Yii::app()->controller->getId()

текущий Экшн:

Yii::app()->controller->action->id

текущий Модуль:

Yii::app()->controller->module->id

Если надо получить текущий Контроллер и Экшн в формате «контроллер/экшн», то:

Yii::app()->controller->getRoute()
2015   php   yii   yii2

Для CHtml::activeCheckBox() отключить второй Input

Стандартно инпут имеет аттрибут value, значение которого передается на сервер, если выставлен флаг. Но иногда необходимо передать определенное значение, если флаг снят. Вот здесь и поможет аттрибут «uncheckValue».
Вы просто делаете так:

CHtml::activeCheckBox( $var, 'model_per', array('uncheckValue'=>'12333') );

Если данный параметр не задан, то по умолчанию будет создан еще один инпут. Т. е. по факту их будет формироваться два, только один из них будет иметь аттрибут type=«hidden»:

<input id="ytModel_name" type="hidden" value="0" name="Model[name]" />
<input name="Model[name]" id="Model_name" value="1" checked="checked" type="checkbox" />

Если вы хотите, чтобы при снятии флага на сервер не отправлялось значение, то выставите uncheckValue = NULL:

CHtml::activeCheckBox( $var, 'model_per', array('uncheckValue'=>null) );
2015   activeCheckBox   CHtml   php   yii

Быстро на Yii получить домен из поддомена

В принципе текущая ситуация может быть разрешена на любом фреймворке, либо непосредственно прямо на PHP, но данный пример на yii. Я увидел в одном из проектов, с которым работал, и к сожалению не знаю кто автор, но решил, что код будет интересен всем:

$host = substr( Yii::app()->getRequest()->getHostInfo(), strpos( Yii::app()->getRequest()->getHostInfo(), "." ) + 1 );

А далее просто добавляем http или https:

echo 'http://' . $host ;

код на gostash.it

2015   php   yii