Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Хабровчане vs. цифровые сервисы банков: итоги
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
vekov

Иван Веков

  • 3
    вклад
  • 32
    вопроса
  • 19
    ответов
  • 47%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Как работать с сессиями в php?

    vekov
    Иван Веков @vekov Автор вопроса
    Проблема была довольно таки наглядная. Заключалась в выводе ошибок и лишней проверке.

    Использовал error_reporting(E_ERROR | E_PARSE);
    Чтобы не выводились предупреждения о том, что переменная не определена.

    А потом почитав немного еще доков по сессии, решил что проверка в общем-то лишняя. Оставил просто session_start(); Потому что она не только запускает новую сессию, но и продолжает существующую. Следовательно в доп проверке - нет смысла.
    Ответ написан 18 февр.
    2 комментария
    Нравится 2 комментария
  • Почему не отправляется письмо на почту?

    vekov
    Иван Веков @vekov
    Не работал с модхом, но я бы посоветовал проверить работает ли функция mail()

    <?php
    $success = mail('example@example.com', 'My Subject', $message);
    if (!$success) {
        $errorMessage = error_get_last()['message'];
    }
    ?>


    Только вместо адреса - свою почту подставь.

    Если не работает - смотри логи. Скорее всего в /var/log/maillog - это файл.
    Ответ написан 02 февр.
    7 комментариев
    Нравится 7 комментариев
  • Как вывести элемент при наличии свойства (Битрикс)?

    vekov
    Иван Веков @vekov
    Довольно непонятно написан вопрос.

    Если речь о том, как разделить элементы с заполненным свойством от элементов с незаполненным, можно так:

    $IblockID = 1;
    $res = CIBlockElement::GetList([], ['IBLOCK_ID' => $IblockID], false, false, ['IBLOCK_ID', 'NAME', 'PROPERTY_ISEMPTY']);
    while($item = $res -> Fetch())
    {
        if($item['PROPERTY_ISEMPTY_VALUE'])
        {
            $arResult['FILLED'][] = $item;
        }
        else
        {
            $arResult['EMPTY'][] = $item;
        }
    }


    На выходе будет 2 массива - FILLED (где свойство заполнено) и EMPTY (где пусто).
    Вместо ISEMPTY - надо подставить код своего свойства.
    Ответ написан 02 февр.
    5 комментариев
    Нравится 5 комментариев
  • Как вывести сервис Minikube во внешнюю сеть?

    vekov
    Иван Веков @vekov Автор вопроса
    Итак, ответ на этот вопрос заключался в следующем:

    Нужно было поставить на сервак nginx, и сделать proxy_pass на ингресс.

    Типа такого:
    server {
        listen 80;
        server_name blog.zeroxzed.ru;
        access_log /var/log/nginx/blog.zeroxzed.ru-access.log;
        error_log /var/log/nginx/blog.zeroxzed.ru-error.log;
    
    location / {
        proxy_pass http://192.168.13.31;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        }
    }


    Это мы размещаем в etc/nginx/sites-available/default

    Айпишник "192.168.13.31" конечно же меняем на ип ингресса.
    Получить его можно через:
    kubectl get ingress

    Вроде бы :)
    Ответ написан 24 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Что за ошибка в логах сервера?

    vekov
    Иван Веков @vekov
    Кавычка закрывает строку после s

    И попробуй так:
    preg_replace("[^a-zA-Z0-9\s'\:\/\[\]\-\pL]",'', $str);
    Ответ написан 05 авг. 2020
    Комментировать
    Нравится Комментировать
  • Как подставить значение в input?

    vekov
    Иван Веков @vekov
    $('#FormRow-normal-price').val('12'); - вполне работает. Попробовал только что.

    Посмотрите в консоли браузера, может какая-то ошибка на странице, которая не дает вашему скрипту запуститься? F12.
    Или может быть кеш страницы... Ctrl+F5.
    Ответ написан 05 авг. 2020
    Комментировать
    Нравится Комментировать
  • Как разместить два домена на одном хостинге?

    vekov
    Иван Веков @vekov
    А есть ли ISP панель? Обычно к хостингам она прилагается. Если есть, то просто там прописать два www-домена, или два доменных имени.
    Ответ написан 05 авг. 2020
    1 комментарий
    Нравится 1 1 комментарий
  • Ошибка minukube/kubernetes: The connection to the server ***:8443 was refused - did you specify the right host or port?

    vekov
    Иван Веков @vekov Автор вопроса
    1) Проверить запущен ли докер? Если нет, то запустить.
    service docker status
    service docker restart

    2) Проверить запущен ли kubelet? Если нет, - запускаем.
    service kubelet status
    service kubelet restart

    3) Отключаем swap:
    swapoff -a
    Ответ написан 27 мая 2020
    Комментировать
    Нравится Комментировать
  • Как определить долгий авиамаршрут?

    vekov
    Иван Веков @vekov Автор вопроса
    Вдруг кому то пригодится. В итоге красивого решения не обнаружил, похоже его и нет. Сделал следующим образом:

    $Longest_Path = new CLongestPathBuilder($routes); // создаем экземпляр класса
    $Longest_Path -> printLongestPath(); // выводим информацию о самом долгом маршруте
    
    
    
    Class CLongestPathBuilder
    {
    	protected $arResult = [];
    	protected $iterator = 0;
    
    	function __construct($routes)
    	{
    		// Sorting routes array by date (dt_start field)
    		try
    		{
    			$this->arResult['routes'] = CExtraTools::sortArrayByDate($routes);
    		}
    		catch(Exception $e)
    		{
    			echo $e->GetMessage();
    			exit(1);
    		}
    
    		foreach($this->arResult['routes'] as $route)
    		{
    			$this->arResult['path'][$this->iterator]['full_path'] .= $route['start'].' -> '.$route['finish'];
    			$this->arResult['path'][$this->iterator]['routes_count'] = 1; 
    			// Trying to find all available routes from last destination ($route['finish'])
    			$this->getRoutes($route);
    			$this->iterator++;
    		}
    	}
    
    	protected function getRoutes($route1)
    	{
    		// Get available routes from last destination
    		if(!$this->arResult['path'][$this->iterator]['prev_date'])
    		{
    			$this->arResult['path'][$this->iterator]['prev_date'] = $route1['dt_start'];
    		}
    		foreach($this->arResult['routes'] as $route2) 
    		{
    			if( ($route1['start'] != $route2['start']) && ($route1['finish'] == $route2['start']) && ($this->arResult['path'][$this->iterator]['prev_date'] < $route2['dt_start']) )
    			{
    				$this->arResult['path'][$this->iterator]['full_path'] .= ' -> '.$route2['finish'];
    				$this->arResult['path'][$this->iterator]['days'] += CExtraTools::diffDates($route1['dt_start'], $route2['dt_start']);
    				$this->arResult['path'][$this->iterator]['dates'][] = $route1['dt_start'].' - '.$route2['dt_start'];
    				$this->arResult['path'][$this->iterator]['prev_date'] = $route2['dt_start'];
    				$this->arResult['path'][$this->iterator]['routes_count']++; // Number of routes in the path
    				$this->setLongest($this->arResult['path'][$this->iterator]['days']); // Setting current path as the longest one
    				$this->getRoutes($route2);
    			}
    		}
    	}
    
    	protected function setLongest($duration)
    	{
    		// a function used to set longest path
    		if($duration > $this->arResult['longest_path']['days'])
    		{
    			$this->arResult['longest_path'] = $this->arResult['path'][$this->iterator];
    		}
    	}
    
    	public function getLongest()
    	{
    		// a function used to get longest path
    		return $this->arResult['longest_path'];
    	}
    
    	public function getPaths()
    	{
    		// a function used to get longest path
    		return $this->arResult['path'];
    	}
    
    	public function printAllPaths()
    	{
    		CExtraTools::pre($this->arResult['path']);
    	}
    
    	public function printLongestPath()
    	{
    		CExtraTools::pre($this->arResult['longest_path']);
    	}
    }
    
    
    
    Class CExtraTools
    {
    	public static function diffDates($date1, $date2)
    	{
    		// The function to count the difference between two dates
    		try
    		{
    			$datetime1 = new DateTime($date1);
    			$datetime2 = new DateTime($date2);
    		}
    		catch (Exception $e) {
    			echo $e->getMessage();
    			exit(1);
    		}
    		$interval = $datetime1->diff($datetime2);
    		return $interval->invert ? $interval->days*(-1) : $interval->days;
    	}
    
    	public static function pre($var)
    	{
    		// modification of print_r method
    		echo '<pre>';
    		print_r($var);
    		echo '</pre>';
    	}
    
    	protected static function cmp($a, $b)
    	{
    		// only to sort array in sortArrayByDate() function
    		if ($a['dt_start'] == $b['dt_start']) {
    			return 0;
    		}
    		return ($a['dt_start'] < $b['dt_start']) ? -1 : 1;
    	}
    
    	public static function sortArrayByDate($array)
    	{
    		// Sort array by date (dt_start field)
    		if(!is_array($array))
    		{
    			throw new Exception('Должен быть передан массив');
    		}
    		usort($array, "self::cmp");
    		return $array;
    	}
    }
    Ответ написан более двух лет назад
    Комментировать
    Нравится Комментировать
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    Иван Веков @vekov Автор вопроса
    Для отладки стоит использовать такую схему:

    $git_branches = exec('git push origin master:'.$_GET["REMOTE"].' 2>&1', $stdin, $stderr);


    То есть shell_exec меняем на exec, и добавляем "2>&1"; Тогда сможем видеть ошибки.

    Сама команда commit не работала, потому что в конфиге был не верно задан пользователь. И потому что у пользователя было не достаточно прав. Назначил его владельцем папки .git. Проблема решилась
    Ответ написан более двух лет назад
    Комментировать
    Нравится Комментировать
  • Как получить ответ через SOAP запрос?

    vekov
    Иван Веков @vekov
    Попробуйте $client->getLastRequest()
    Ответ написан более двух лет назад
    1 комментарий
    Нравится 1 комментарий
  • Как реализован jsFiddle?

    vekov
    Иван Веков @vekov
    1)
    - Валидация каждого поля
    - Генерируется страничка, куда в отдельные теги записывается код из полей, которые ты заполнил (JS - > <script></script>, CSS -> <style></style> и HTML -> <body></body>)
    - Она вставляется в iframe справа снизу.
    2) Ссылку можно генерировать как ID записи в БД, например.

    Можно вместо бд файлы конечно использовать, но оно тебе надо?
    Ответ написан более двух лет назад
    Комментировать
    Нравится Комментировать
  • Как высчитать страничку на которой находиться сообщение, если она постоянно меняется?

    vekov
    Иван Веков @vekov
    Ну так тебе надо например ceil(14/10). Это допустим если твоя смс 14-я, а элементов на странице - 10.
    То есть
    $currentID = 14;
    $maxPageElements = 10;
    $currentPage = ceil($currentID/$maxPageElements);
    Ответ написан более двух лет назад
    1 комментарий
    Нравится 1 1 комментарий
  • Какой выбрать язык программирования для разработки игр под IOS и Andoid?

    vekov
    Иван Веков @vekov
    Мне в свое время решилось что Xamarin - хорошее решение, в целом для работы с мобильными приложениями.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится Комментировать
  • Почему дублируются исходящие письма?

    vekov
    Иван Веков @vekov Автор вопроса
    Кажется понял. Частично :) Письма копировались на ящик. который был указан в sendmail_path, в настройках файла bitrix.env. Только все равно не очень понимаю причину и откуда берутся те адреса, которые в копии...
    Ответ написан более трёх лет назад
    3 комментария
    Нравится 3 комментария
  • Актуален ли SOAP в PHP?

    vekov
    Иван Веков @vekov
    Года два назад работал с SOAP, для кастомной взаимосвязи 1С с Битрикс. Вообще хорошо к нему отношусь, иной раз огорчаюсь когда разработчики другой стороны желают работать по иным протоколам.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
  • Почему удаляются обработчики событий после отправки формы?

    vekov
    Иван Веков @vekov
    Всплывающее окно изначально создается на странице через php или после каких-то событий, через JS? Если второй случай, то, как я помню к объектам нельзя будет обратиться напрямую по классам, можно использовать что-то вроде $('body').on('click', '.js-ppopup', function(){})...
    Ответ написан более трёх лет назад
    1 комментарий
    Нравится 1 комментарий
  • Как по нажатию на кнопку открывать все "аккордеоны"?

    vekov
    Иван Веков @vekov
    Ну можно так, если верно понял:

    $('.ui-accordion-content').addClass('ui-accordion-content-active').slideDown();
    $('.ui-accordion-header').addClass('ui-state-active');
    Ответ написан более трёх лет назад
    3 комментария
    Нравится 3 комментария
  • Как отсортировать массив по значениям нескольких ключей?

    vekov
    Иван Веков @vekov Автор вопроса
    Спасибо за ссылку на мультисорт, Владислав Тишин .
    Среди примеров там нашел нужное решение:

    function array_orderby()
    {
    	$args = func_get_args();
    	$data = array_shift($args);
    	foreach ($args as $n => $field) {
    		if (is_string($field)) {
    			$tmp = array();
    			foreach ($data as $key => $row)
    				$tmp[$key] = $row[$field];
    				$args[$n] = $tmp;
    		}
    	}
    	$args[] = &$data;
    	call_user_func_array('array_multisort', $args);
    	return array_pop($args);
    }
    
    $arObjects = array_orderby($arObjects, 'Тип', SORT_ASC, 'Номер объекта', SORT_ASC);
    Ответ написан более трёх лет назад
    Комментировать
    Нравится Комментировать
Оценили как «Нравится»
Самые активные сегодня
  • Василий Банников
    • 13 ответов
    • 0 вопросов
  • rPman
    • 10 ответов
    • 0 вопросов
  • Dr. Bacon
    • 7 ответов
    • 0 вопросов
  • dimonchik2013
    dimonchik2013
    • 7 ответов
    • 0 вопросов
  • HemulGM
    Hemul GM
    • 6 ответов
    • 0 вопросов
  • saboteur_kiev
    Saboteur
    • 6 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации