Архив метки: php

The server requested authentication method unknown to the client

После апгрейда сервера MySQL 8, часть скриптов стала выдавать при коннекте ошибку вида:

The server requested authentication method unknown to the client

Решение: нужно для пользователя поменять способ аутенфикации:

ALTER USER 'vasya'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';

Простой случай сокращения полного ФИО

В случае простого случая необходимости сокращения ФИО вида «Пупкин Василий Иванович» до Пупкин В.И. можно воспользоваться следующей функцией:

/**
 * Сокращение полного имени до Фамилия И.О.
 * @param type $fio
 * @return string
 */
function smallfio($fio,$coding="UTF-8"){
  $ret="";
  $arr=  explode(" ", $fio);
  //die(mb_detect_encoding($arr[1]));
  if (isset($arr[0]) and isset($arr[1]) and isset($arr[2])){
    $arr[1]=trim($arr[1]);
    $arr[2]=trim($arr[2]);
    $ret=$arr[0]." ".mb_substr($arr[1],0,1,$coding).".".mb_substr($arr[2],0,1,$coding).".";
  } else
  if (isset($arr[0]) and isset($arr[1])){
    $ret=$arr[0]." ".mb_substr($arr[1],0,1,$coding).".";
  };  
  return $ret;
};

PHP Mailer : SERVER -> CLIENT: 220 TLS go ahead

На днях на одном из хостингов столкнулся с проблемой отправки писем, ошибка в консоли была:

SERVER -> CLIENT: 220 TLS go ahead

Погуглив, нашел решение:

$correo->SMTPOptions = array(
        'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

FreeRadius и аутентификация через внешний скрипт

Например можно реализовать вот так:

authorize{
    update control { 
        Auth-Type := `/usr/bin/php -f /etc/raddb/yourscript.php '%{User-Name}' '%{User-Password}'`
    }

В этом случае, PHP должен только проверить логин&пароль и ответить либо Accept либо Reject.

Zend Framework 3 получение конфигурации приложения из контроллера

Казалось бы простая вещь, а телодвижений много. Странно. Но тем не менее, решение есть.

Конфигурация приложения:

<?php
return [
    'database'=>[
                        'host'  => '127.0.0.1',
                        'username'=>'root',
                        'password'=>'perferfre',
                        'basename'=>'mysql'        
    ],
    'modules' => [
            'Zend\Router',
            'Zend\Validator',
            'Application',            
    ],
    'module_listener_options' => [
        'module_paths' => [
            './module',
            './vendor',
        ],
        'config_cache_enabled' => false,
        'config_cache_key' => 'application.config.cache',
        'module_map_cache_enabled' => false,
        'module_map_cache_key' => 'application.module.cache',
        'cache_dir' => 'data/cache/',
    ],    
];

Создаем  фабрику IndexControllerFactory.php:

namespace Application\Controller;

use Zend\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;

class IndexControllerFactory implements FactoryInterface{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null){
        $config = $container->get("ApplicationConfig");
        return new IndexController($config);
    }
}

В конфигурации модуля:

            'controllers' => [
                'factories' => [
                    Controller\IndexController::class => Controller\IndexControllerFactory::class,                        
                    Controller\UserController::class => InvokableFactory::class,                        
                ],
            ],

В контроллере:

class IndexController extends AbstractActionController{        
    var $sqln; 
    public function __construct(array $config) {     
        var_dump($config);
	 }    
...