Ответы пользователя по тегу PHP
  • Где хранить данные для использования их в функциях?

    Newto
    @Newto
    Я не совсем понял вопрос и зачем это нужно, но возможно что-то типа такого вам подойдёт:

    function getInfo(...$vars) {
    	
    	$a = 'какой-то текст';
    	$b = 'что-то из базы';
    	$c = 'что-то из env переменных';
    	//итд
    	
    	
    	foreach($vars[0] as $var_name) {
    		
    		$result[] = $$var_name;
    	}
    	
    	return $result;
    }
    
    
    $result = getInfo(['a','b','c']);
    
    print_r($result);
    ?>

    Вывод:
    Array
    (
        [0] => какой-то текст
        [1] => что-то из базы
        [2] => что-то из env переменных
    )
    Ответ написан
    Комментировать
  • Как отображать данные всем после ajax запроса?

    Newto
    @Newto
    Если я правильно понял задачу, то в хотите сделать что-то типа чата. Когда каждый новый пользователь зашедший на страницу отобразится, допустим, в некоем списке. Эта задача решается ТОЛЬКО по средствам веб-сокетов.

    Однако, можно(но не нужно) сделать и иначе(просто для примера). Без сокетов это выглядело бы так, описываю пошагово:
    1. Пользователь заходит на страницу.
    2. Скрипт, который срабатывает после перезагрузки страницы, отправляет запрос аяксом к скрипту, который записывает id пользователя и время его захода в базу данных.
    3) Еще один скрипт, который "стучит" на бэк раз в, скажем, 5 секунд, обновляет список зашедших по логике "если есть id в базе и запись создана не более чем три минуты назад, то отображать пользователя онлайн". Этот скрипт получает таких пользователей и вы имеете отображаемый список.

    Подчеркну, такой подход имеет смысл только в целях самообучения, ради понимания очерёдности действий. Если же реализовывать его в реальных проектах, то это приведёт к перегрузке используемых серверных ресурсов.
    Ответ написан
    2 комментария
  • Фильтрация по строковому значению?

    Newto
    @Newto
    $a = ["group.phantom", "group.god", "group.imperator", "group.general", "group.hermit", "group.soldier"];
    
    
    $b = [
       [
          "permission" => "group.default" 
       ],
       [
          "permission" => "group.phantom" 
       ], 
       [
          "permission" => "group.hermit" 
       ],
       [
          "permission" => "group.imperator"
       ],
       [
          "permission" => "group.god" 
       ],
    ];
    
    
    function getItem($a, $b) {
    
    	foreach ($a as $item) {
    		
    		foreach ($b as $data_arr => $data) {
    			
    			if ($item == $data['permission'])  return $item;
    		}
    	}
    }
    
    print getItem($a, $b);
    Ответ написан
    Комментировать
  • Как вызвать код php на всех страницах?

    Newto
    @Newto
    Обычно делается единственная точка входа index.php Все запросы на сайте обрабатываются через этот файл. Таким образом одно включение startup.php в index.php или другом файле, включаемом в index.php, будет действовать на все остальные файлы вашего проекта. Но это работает только при условии правильной архитектуры. Если же у вас проект образца 2000-х готов, когда каждая страница обрабатывается отдельным файлом, то вам ничего не останется кроме того как startup.php включать в каждый файл инклудом отдельно.
    Ответ написан
    Комментировать
  • Функция json_decode не работает пока не вызвать её 2 раза подряд, почему так происходит?

    Newto
    @Newto
    Для решения любой проблемы нужно смотреть в суть этой проблемы. Напишите
    $response = json_decode($response, true);
    var_dump($response);
    $arResult = json_decode($response, true);
    var_dump($arResult);

    Смотрите на результат и делайте выводы.
    Ответ написан
    6 комментариев
  • Должны ли свойства родителя обязательно использоваться во всех потомках?

    Newto
    @Newto
    Правило, описанное ответом выше, относится именно к интерфейсам. Т.е. если вы используете интерфейс, то в классе - наследнике интерфейса не должно быть методов, что не описаны в интерфейсе. Но если говорить о случае, когда один класс(не интерфейс) наследует другой, то нет никаких ограничений и это совершенно нормально. К примеру, есть у вас класс "Свет" в котором есть свойства "Включить свет", "Выключить свет" и "Аварийное отключение". И есть три класса - наследника: "Спальня", "Кухня" и "Сигнализация". При этом включать и выключать свет в спальне и на кухне мы можем когда захотим, а вот выключить лампочку, показывающую что работает сигнализация, мы можем только при чрезвычайной ситуации. Таким образом будет совершенно нормально, что классы "Спальня" и "Кухня" будут использовать только методы "Включить свет" и "Выключить свет". А класс "Сигнализация" только "Аварийное отключение". И при этом все они будут наследниками класса "Свет".

    В данном случае важны не принципы и правила, а удобство структурирования кода. В прочем, обычно, все правила с удобством совпадают.
    Ответ написан
  • Как настроить кэширование сайта?

    Newto
    @Newto
    <link href="css/index.css?<?= time(); ?>" rel="stylesheet">
    Ответ написан
    1 комментарий
  • Как взять строку из файла с удалением в php?

    Newto
    @Newto
    $file = 'file.txt';
    
    $file_strings_arr = file($file);
    $strings_amount   = sizeof($file_strings_arr);
    $string_for_del   = rand(0, $strings_amount - 1);
    
    print $file_strings_arr[$string_for_del];
    
    unset($file_strings_arr[$string_for_del]);
    file_put_contents($file, implode('', $file_strings_arr));
    Ответ написан
    4 комментария
  • Объявление анонимного объекта в PHP?

    Newto
    @Newto
    Если я правильно понял вопрос.

    $obj = (object)['test' => 'test'];
    print_r($obj);


    stdClass Object
    (
        [test] => test
    )
    Ответ написан
    4 комментария
  • Как перенести длинную строку в коде?

    Newto
    @Newto
    Практика писать
    $text = "text " . "$param" . "...";
    Весьма распространенная, к сожалению.
    Гораздо читабельней написать
    $text = "text {$param}...";
    Исходя из этого и измените вашу строку. Вот как выглядело бы начало:
    $send .= "sudo screen -dmS screen_name docker run {$user_container } {$memory_container}  -d -it --cpus '1' --memory={$mem}m"

    А там уже переносы строк ставьте где хотите.

    P.S. Фигурные скобки, обрамляющие переменные, не обязательны. Но они выделяют эти переменные зрительно, а так же выделяются в разных IDE(средах разработки, проще говоря редакторах кода).
    Ответ написан
    1 комментарий
  • Как ссылке задать метод post?

    Newto
    @Newto
    Если у вас на странице есть форма выхода с кнопкой, то просто привяжите к ней остальные ссылки по которым должен происходить выход. Если формы нет и она там не нужна, то добавьте её и сделайте невидимой. Привязка ссылок к форме:

    <form class="mt-5" method="post" action="do_logout.php" style="display:none">
        <button type="submit" class="btn btn-primary" id="submit_button">Logout</button>
    </form>
    
    <span style="cursor:pointer" onclick="document.getElementById('submit_button').click();">Log out</span>


    А вообще логаут обычно делается не через POST, а через GET запросы. Так и на любую ссылку выход повесить проще становится.
    Ответ написан
    Комментировать
  • Нужно ли использовать interface?

    Newto
    @Newto
    Интерфейсы используются для структуризации вашего кода. Не потому что надо, а потому что это вносит порядок в разработку. Вы можете не использовать интерфейс и тогда в каждом вашем классе можно будет делать всё что угодно. А можно использовать интерфейс, тем самым обязывая соблюдать определённые правила структуры. Даже один разработчик придумав некую структуру кода сегодня, может забыть/забить на неё через какое-то время, а если их несколько, то тем более, тем самым превращая программу в бардак. В общем это вопрос порядка, а не обязательности.
    Ответ написан
    2 комментария
  • Как мне сравнить переменную с одинаковым значением?

    Newto
    @Newto
    Из комментариев вижу ваш пример:

    <a style="<?if($lastprice < $lastprice) { echo 'color:red'; }else{ echo 'color:green'; }?>"><?echo (float)$lastprice;?>


    Вы сравниваете одну и ту же переменную саму с собой. Т.е. у вас в скрипте всего одно значение. А нужно два. Сделайте так, что бы у вас было две переменные: $firstprice и $lastprice. А потом уже их сравнивайте, что бы получилось:
    <a style="<?if($firstrprice < $lastprice) { echo 'color:red'; }else{ echo 'color:green'; }?>"><?echo (float)$lastprice;?>


    Например:
    $firstprice = 1700;
    <a style="<?if($firstrprice < $lastprice) { echo 'color:red'; }else{ echo 'color:green'; }?>"><?echo (float)$lastprice;?>


    Удачи в начинаниях и не слушайте агрокомменты; возможно вы сегодня ничего не понимаете, а завтра из вас получится настоящий профессионал своего дела.
    Ответ написан
    2 комментария
  • Как в константу класса PHP вставить даты?

    Newto
    @Newto
    В вашем случае это было бы как-то так:
    class Someclass
    {
    	public static function getDate($k) 
    	{
    		switch ($k) {
    		  case "Y":
    			return date("Y");
    			break;
    		  case "m":
    			return date("m");
    			break;
    		  case "d":
    			return date("d");
    			break;
    		  case "H-i-s":
    			return date("H-i-s");
    			break;
    		}
    	}
    }
    
    define('LOG_FILENAME',  "{$_SERVER["DOCUMENT_ROOT"]}/logs/" .  Someclass::getDate("Y") . "/" . Someclass::getDate("m") . "/" . Someclass::getDate("d") . ".txt");


    НО так делать не надо. Не записывайте в константы данные из функций и любые другие как-то там генерирующиеся. Константы на то и константы, что бы всегда иметь одно и то же значение. Проще говоря записывайте в константы то, что на вашем сайте никогда не меняется и выглядит для всех одинаково, независимо от пользователя, базы данных, погоды за окном и так далее.
    Ответ написан
    7 комментариев
  • Как можно попрактиковать "интеграцию с API"?

    Newto
    @Newto
    На самом деле интересный вопрос. Я вот, за всё время свой работы, интегрировал сайты со множеством сторонних систем по REST API. Потом, как-то на собеседовании, на вопрос типа "что вы знаете о REST API", на серьёзных щах, ответил, "да практически всё" и начинал перечислять всякие банки, платёжки, сервисы доставки и т.п. с которыми делал интеграцию. Как вам и написал キム ファイブプラス выше, у некоторых из них были весьма "хитровыдуманные" алгоритмы, одна только интеграция с ЕСИА чего стоила... Однако потом меня спросили: "а как бы вы сами осуществили API в каком-либо сервисе?"... И тут весь мой опыт предыдущих интеграций мне не особенно то и помог, т.к. осуществлять приём ответов откуда-то там -- это одно, а их отдавать и грамотно обрабатывать -- это совсем другое. Поэтому мой совет такой: для опыта интеграции ищите "openapi" у различных сервисов, интегрируйте себе на сайт, если он у вас есть, платёжку от QIWI, например (там есть работа от физ лица). А так же напишите собственное API. Скачайте программу postman, посмотрите какие бывают методы авторизации. Попробуйте реализовать парочку из них, и сделайте грамотную обработку входящих данных, а так же ответ на них, в стандартном json-e.
    Ответ написан
    Комментировать
  • Какие есть api для приема платежей?

    Newto
    @Newto
    Их куча, на самом деле. Перечислять не буду, смысла не имеет, легко найти по запросу в поисковике "платёжная система api". И что вам подойдет -- от проекта зависит -- от его направленности и планируемого оборота, т.к. у всех систем свои лимиты и требования. Я вот, например, когда искал эквайринг для проекта(тоже из под самозанятости работает) остановился на эквайринге от тинькофф. Искал долго, с многими платежками переписывался, со многими созванивался. В общем вам бы самому порыть этот вопрос и выбрать наиболее подходящий вариант.
    Ответ написан
    Комментировать
  • Как парсить подгружаемые данные сайта?

    Newto
    @Newto
    Если зайти на страницу, на которую вы дали ссылку и взглянуть на её код, то можно увидеть, что при клике на "еще" отправляется POST запрос. На какой адрес отправляется и что -- вы сами сможете увидеть (скрипт в самом низу). Ответом за такой запрос будет json с нужными вам записями. Вот вы сами их отправляйте, такие запросы, получайте эту инфу и делайте с ней дальше что вам нужно. Небольшая подсказка -- сайт не примет запросы если в них не будет заголовков user-agent и x-requested-with. 62685d444d6d3657605066.png
    Ответ написан
  • Как прибавить к текущей дате дни?

    Newto
    @Newto
    $plus_days = 3;
    $sql = "INSERT INTO `order` SET ";
    $sql .= "user_id = '" . (int)$user_id . "', ";
    $sql .= "status = '0', ";
    $sql .= "date = NOW()";
    $sql .= "date_end = NOW() + INTERVAL {$plus_days} DAY";
    $db->query($sql);
    Ответ написан
  • Как выходить из ситуации, когда 2 действия возвращают один результат?

    Newto
    @Newto
    Просто проверяйте формат входящего URLa, перед проверкой удаляйте лишние слеши. И если он валиден, то делайте с ним дальше что хотите, тогда не придется писать две ошибки вместо одной.
    Ответ написан
    Комментировать
  • Как правильно отправлять почту через PHP?

    Newto
    @Newto
    https://github.com/PHPMailer/PHPMailer

    Библиотека умеет оправлять почту через удаленный SMTP, вам останется только её подключить и указать реквизиты доступа к вашему почтовому серверу.
    Ответ написан
    Комментировать