mysqldump -uroot DB | mysql --host=host -uroot -ppass -C DB
$users[] = 1; // ID пользователя
$q = "SELECT * FROM table regexp '[[:<:]](" . implode( '|', $users) . ")[[:>:]]";
users
id, first_name, last_name, ...
chats
id, user_id, name, ...
chats_users
chat_id, user_id
$q = "SELECT * FROM table WHERE FIND_IN_SET('1', `users`)"; // 1 - ID пользователя
Операторы, работающие с массивами:
$a == $b Равно
$a === $b Тождественно равно
$a = array('1', '2', '3');
$b = array('1', '2', '3');
var_dump($a === $b); // bool(true)
var_dump(count(array_diff($a, $b)) === 0);// bool(true)
$a = array('1', '2', '3', '4', '5');
$b = array('1', '2', '3');
var_dump($a === $b); // bool(false)
var_dump(count(array_diff($a, $b)) === 0);// bool(false)
function seconds2times($seconds, $count_zero = TRUE, $output = 'years,days,hours,minutes,seconds')
{
// Normalize output
$output = trim(strtolower((string)$output));
if (!$output) {
// Invalid output
return FALSE;
}
// Array with the output formats
$output = preg_split('/[^a-z]+/', $output);
// Convert the list of outputs to an associative array
$output = array_combine($output, array_fill(0, count($output), 0));
// Make the output values into keys
extract(array_flip($output), EXTR_SKIP);
$times = [];
// Seconds per minute | hour | day | year
$periods = [60, 3600, 86400, 31556926,];
for ($i = 3; $i >= 0; $i--) {
$period = floor($seconds / $periods[$i]);
if (($period > 0) || ($period == 0 && $count_zero)) {
$times[$i + 1] = $period;
$seconds -= $period * $periods[$i];
$count_zero = TRUE;
}
}
$times[0] = $seconds;
$result = [];
if (isset($output['years'])) {
$result['years'] = $times[4];
}
if (isset($output['days'])) {
$result['days'] = $times[3];
}
if (isset($output['hours'])) {
$result['hours'] = $times[2];
}
if (isset($output['minutes'])) {
$result['minutes'] = $times[1];
}
if (isset($output['seconds'])) {
$result['seconds'] = $times[0];
}
return $result;
}
$time = '2d 9h 40m';
if (preg_match('/([\d]*)d\s([\d]*)h\s([\d]*)m/', $time, $matches)) {
list($time, $days, $hours, $minutes) = $matches;
$seconds = ($days * 86400) + ($hours * 3600) + ($minutes * 60);
$seconds = $seconds - ($seconds / 100 * 20); // -20%
print_r(seconds2times($seconds));
// Array ( [years] => 0 [days] => 1 [hours] => 22 [minutes] => 8 [seconds] => 0 )
}
$allow_list = explode( ',', $user_group[$member_id['user_group']]['allow_cats'] );
if( $allow_list[0] != "all" ) {
if( $config['allow_multi_category'] ) {
$where[] = PREFIX . "_post.category regexp '[[:<:]](" . implode( '|', $allow_list ) . ")[[:>:]]'";
} else {
$where[] = PREFIX . "_post.category IN ('" . implode( "','", $allow_list ) . "')";
}
}
\engine\modules\functions.php
С апреля 2017 года сервисный ключ доступа обязателен для работы с этими методами (не включая методы секции secure):
newsfeed.search
wall.search
С мая 2018 года сервисный ключ доступа обязателен для работы с этими методами:
users.get
wall.getComments
friends.get
groups.getMembers
likes.getList
С 14 мая 2018 года сервисный ключ доступа обязателен для работы со всеми методами.
127.0.0.1 localhost www.sublimetext.com
127.0.0.1 localhost sublimetext.com
var $ = require('jquery');
require('bootstrap');
@import "~bootstrap/scss/bootstrap";
var Encore = require('@symfony/webpack-encore');
Encore
.setOutputPath('public/assets/')
.setPublicPath('/assets')
.cleanupOutputBeforeBuild()
.enableSourceMaps(!Encore.isProduction())
.addEntry('js/dashboard', './assets/dashboard/js/dashboard.js')
.addStyleEntry('css/dashboard', './assets/dashboard/scss/dashboard.scss')
.enableSassLoader(function(sassOptions) {}, {
resolveUrlLoader: false
})
.autoProvidejQuery()
;
module.exports = Encore.getWebpackConfig();
В API ВКонтакте для получения ключа доступа используется открытый протокол OAuth 2.0. При этом пользователь не передает логин и пароль приложению, поэтому его аккаунт не может быть скомпрометирован.
При использовании OAuth-авторизации пользователь не передаёт свой логин и пароль к защищённым ресурсам напрямую в приложение. Поэтому:
- У пользователя больше оснований доверять приложению, поскольку пользователь может быть уверен, что несанкционированный доступ к его личным данным невозможен. Не владея логином и паролем пользователя, приложение сможет выполнять только те действия с данными, которые разрешил пользователь, и никакие другие.
- При разработке приложения не нужно заботиться об обеспечении конфиденциальности логина и пароля пользователя. Логин и пароль не передаются приложению, а следовательно, они не могут попасть в руки злоумышленников.