$login = $_POST['login'];
$hash = password_hash($_POST['password']);
$login = $_POST['login'];
$password = $_POST['password']; // не хешируем
SELECT * FROM users WHERE login = '$login'
if (password_verify($password, $hash_from_db)) {
// пользователь аутентифицирован
} else {
// пара логин/пароль неверная
}
из-за того, что открывающий тег <?php связывается не с закрывающим тегом ?>, а со знаком >,
public function getThumbnail($photo, $type = 'medium')
{
$p = pathinfo($photo);
return $p['dirname'].'/'.$type.'-'.$p['basename'];
}
echo getThumbnail('public/users/avatar.webp'); // public/users/medium-avatar.webp
echo getThumbnail('public/users/avatar.webp', 'crop'); // public/users/crop-avatar.webp
class Calc {
private $number = 0;
public function __construct($n){
$this->number = $n;
}
public function plus($n){
$this->number += $n;
return $this;
}
public function minus($n){
$this->number -= $n;
return $this;
}
public function result(){
return $this->number;
}
}
echo (new Calc(100))->plus(50)->minus(75)->result(); // 75
$webp = glob('*.webp');
$jpg = glob('*.jpg');
$gif = glob('*.gif');
// …тут отрезаем у всех расширения, или далее используем array_udiff со своим коллбеком сравнения
$result = array_diff($webp, $jpg, $gif);
foreach $result as $file {
unlink($file.'.webp')
}
// Читаем все файлы
$files = glob(__DIR__ . '/images/*.*');
// Фильтруем WEBP файлы в массив
$webp = array_filter($files, function ($f) {
return pathinfo($f, PATHINFO_EXTENSION) == 'webp';
});
// Фильтруем остальные картинки в другой массив
$other = array_filter($files, function ($f) {
$extensions = ['jpg', 'gif', 'png']; // Перечисляем, какие там еще файлы есть
return in_array(pathinfo($f, PATHINFO_EXTENSION), $extensions);
});
// В обоих массивах оставляем только имена файлов
$webp2 = array_map(function ($f) { return pathinfo($f, PATHINFO_FILENAME); }, $webp);
$other2 = array_map(function ($f) { return pathinfo($f, PATHINFO_FILENAME); }, $other);
// Вычисляем различия в массивах
$result = array_diff($webp2, $other2);
// Смотрим результат
foreach ($result as $file) {
var_dump($file.'.webp');
}
class BaseController {
protected $config;
public function __contruct(Config $config){
$this->config = $config;
}
}
class MyController extends BaseController {
public function myMethod() {
$var = $this->config->get('someSetting');
}
}
config()->get('someSetting');
config()
, доступную везде. Я думаю использовать ajax запросы на сервер и получать уже готовую вёрстку в результате рендерить с помощью JS.