Веб-программинг

Интересное и полезное про PHP, JS, Jquery, Angular, Bootstrap, MySQL, PostgreSQL, Docker, Git, Trello, Nginx и Apache, API Яндекса, Google, PayPal, Fb, Vk, GeoNames, Robokassa...

Ctrl + ↑ Позднее

Быстрый update всех строк для поля JSONB

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

update "tableName" set columnName = jsonb_set("columnName",'{"ip"}','"192.168.0.1"');
2018   jsonb   jsonb_set   PostgreSQL
2018   git   git pull

Разрешить вводить в input только цифры

Например, если поле для ввода номера телефона, без спец.символов, при этом если не нужно создавать поле с type=number.

Вот вполне рабочий вариант:

<input type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" >

при этом все неразрешенные символы будут просто игнорироваться

2018   input   oninput   regexp   [^0-9.]

Импорт csv-файла и обработка в php

$csvFile = file('/home/oleg/data.csv');
$array = array_map(function($input) {return str_getcsv($input, ";");}, $csvFile );

foreach ($array as $item) {
    $object = new CustomClass();
    $object->name = (string) $item[0];
    $object->title = (string) $item[1];
    $object->price = (float) $item[2];
    $object->save();
}

Что из себя представляет функция str_getcsv — посмотрите в документации

2018   csv   php   str_getcsv

Permission denied (publickey) при ssh-подключении

Если вы пытаетесь подключиться к серверу и такой командой:

ssh root@ip-address

и такой командой:

ssh root@ip-address -o 'IdentitiesOnly=yes'

а в ответ получаете ошибку:

Permission denied (publickey).

То попробуйте прописать ключ напрямую следующей командой:

ssh -v -i ~/.ssh/id_rsa root@ip-address

Exception: DateTimeZone::__construct(): Unknown or bad timezone (Europe/Saratov)

Если поймали такую ошибку, а при этом вы открываете сайт php.net и там такой часовой пояс есть, значит необходимо проверить timezonedb на сайте.

Откройте phpinfo() и увидите что-то подобное:

Нас интересует «Olson» Timezone Database Version

1) Если PECL на сервере не установлен, то:

sudo apt-get install php-pear

2) В зависимости от версии php необходимо, чтобы было установлено php-dev.
У меня 7.1, потому я сделаю так:

sudo apt install php7.1-dev

3) Делаем апдейт:

sudo pecl upgrade timezonedb

4) В результате увидим:

5) Значит необходимо открыть php.ini и прописать extension=timezonedb.so

sudo nano /etc/php/7.1/apache2/php.ini

Добавляем в конце файла, сохраняем изменения и сделаем рестарт апача:

sudo service apache2 restart

6) Проверяем phpinfo() и видим изменения:
«Olson» Timezone Database Version 2018.4

Наслаждаемся!

2018   linux

Как исправить ошибку Could not parse version constraint >=~2: Invalid version string «~2»

Вот так делаешь composer update (или install), а получаешь такую ошибку:

[UnexpectedValueException]
Could not parse version constraint >=~2: Invalid version string "~2"

Необходимо выполнить следующее:

php composer.phar global update

а после уже можно выполнить update или install:

php composer.phar update
2018   composer   php

Как в Git перенести commit из одной ветки в другую?

Укажу ссылку на оригинал статьи Как в Git перенести commit из одной ветки в другую?

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

Рассмотрим ситуацию на примере. Мы находились в master и сделали в него случайно коммит. Тогда чтобы вынести его в отдельную ветку и отправить на merge request нам потребуется выполнить следующие команды:

1). Смотрим историю изменений и запоминаем хэш коммита , соответствующего правильному состоянию ветки master, то есть когда ещё в неё не было добавлено лишних коммитов по ошибке.

git log

2). Также следует запомнить хэш коммита , который был лишним в ветке master. Иногда бывает, что лишними оказываются сразу несколько коммитов, тогда если они расположены последовательно друг за другом следует запомнить самый давний и самый последний .

3). Перейдём на найденный коммит . Другими словами переходим на то состояние ветки master, от которого нам нужно создать новую ветку.

git checkout 

4). Создадим новую ветку, в которую планируется вынести неверно расположенный коммит, и перейдем на неё.

git checkout -b 

5). Переносим коммит в новую ветку.

git cherry-pick 

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

git cherry-pick master

Если же нужно перенести не один, а несколько подряд идущих коммитов от  до , то это делается похожим образом.

git cherry-pick ..

Если же вы хотите, чтобы при переносе изменений коммит не создавался, то используйте параметр -n (—no-commit):

git cherry-pick -n d112ecf96

Как и при операции git rebase в процессе переноса коммита могут возникнуть конфликты. Как и при обычном git merge их следует разрешить, добавить изменения в индекс с помощью git add, а затем продолжить запустив git cherry-pick —continue.

6). Теперь когда коммиты перенесены в ветку , следует удалить их из ветки master. Поэтому переключаемся на ветку master

git checkout master

Смещаем указать master на коммит

git reset --hard 

Спасибо автору за подробную статью

2018   git
Ctrl + ↓ Ранее