Ответы пользователя по тегу PHP
  • Как в php разобрать такую вот строку в массив?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Ответ написан
    Комментировать
  • Как удалить все пробелы между кавычками?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    $str = <<<'DOC'
    var1='Value 1' and var2='Value 2'
    var1='Value 1 a' and var2='2 b'
    var1=' 1a ' and var2='2b'
    var1='Value 1 2 3 abc 4'
    DOC;
    
    echo preg_replace_callback("/'[^']+'/", function($value) {
        return str_replace(' ', '', $value[0]);
    }, $str);
    
    // var1='Value1' and var2='Value2'
    // var1='Value1a' and var2='2b'
    // var1='1a' and var2='2b'
    // var1='Value123abc4'
    Ответ написан
    Комментировать
  • Регулярное выражение, текст между символами?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    $text = '<a> [1] <b><c> qwerty [2] <d> [3] [4]';
    preg_match_all("/[\[<]([^\]>]+)/", $text, $result);
    
    print_r($result[1]);
    /*
    Array
            (
                [0] => a
                [1] => 1
                [2] => b
                [3] => c
                [4] => 2
                [5] => d
                [6] => 3
                [7] => 4
            )
    */
    Ответ написан
    Комментировать
  • Как правильно парсить большой xml с tns тегами?

    VicTHOR
    @VicTHOR Автор вопроса
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    скомбинировал все что можно
    $reader = new XMLReader();
    $reader->open($path);
    
    while($reader->read()) {
        if (
            $reader->nodeType == XMLReader::ELEMENT
            && $reader->hasAttributes
            && $reader->localName === 'INSPECTION'
        ) {
            $xml = simplexml_load_string(str_replace('tns:', '', $reader->readOuterXml()));
            var_dump( json_decode(json_encode($xml), true) );
        } else continue;
    }
    Ответ написан
    Комментировать
  • Как написать регулярку?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    ну как вариант #<script>[^<]*adsConfig[^<]*</script>#gs
    Ответ написан
    Комментировать
  • Как прочитать xml с другого URL средствами php?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    $xml = simplexml_load_string(file_get_contents($xmlfile));
    $xmlArray = json_decode(json_encode($xml, true));
    var_dump(array_keys($xmlArray));
    и можно работать как с массивом
    Ответ написан
    1 комментарий
  • Как сделать long polling на php?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    где-то в ядре определяешь текущее количество постов
    function getPosts() {
        $query = mysqli_query($db, "SELECT * FROM `table` WHERE `id` = '$_SESSION[id]'");
        $count = mysqli_num_rows($query);
        return [
            'query': $query,
            'count': $count
        ];
    }
    $posts = getPosts();
    $countOfPosts = $posts['count'];

    В файле, на который делаешь обращение, сравниваешь текущее количество постов (которое инициализировалось при загрузке страницы) и количество постов на момент обращения
    while ($posts['count'] == $countOfPosts) { // условие верно при первом отображении страницы
        $posts = getPosts(); // значение $posts обновляется при первом обращении и каждой итерации цикла
        if ($posts['count'] > $countOfPosts) { // а вот переменная $countOfPosts не обновляется
            $countOfPosts = $posts['count']; // устанавливаем новое значение для нее, если обновились посты
            $row = mysqli_fetch_assoc($posts['query']);
            die "Вывод результатов";
        } // если условие не сработало, пойдет следующая итерация цикла, т.к. $countOfPosts == свежему $posts['count']
        sleep(2); // просто реже делать запросы к базе для уменьшения нагрузки
    }
    Ответ написан
    3 комментария
  • Как максимально быстро удалить часть строки?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    $string = '40|https://site1.com/files/02bea218b601ef2cbc74e08dc8d78_1000_1000.png;77|https://site1.com/files/29037cbdc27707fe2d6b2cf4d3924_1000_1000.png;78|https://site1.com/files/923b6f214f8bffcf20fbbebe5365b_1000_1000.png;85|https://site1.com/files/f8b6dbe261e89877e23e6a6f00003_1000_1000.png';
    $result = substr(preg_replace('/\|.*?(?:;|$)/', ',', $string), 0, -1);
    echo $result; // 40,77,78,85
    Ответ написан
    Комментировать
  • Как передать данные из jqery в php?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Вопрос в том, как получить данные из post.php?
    То, что будет выведено в этом файле через echo или другой оператор вывода, а так же вне php скобок, и придет в виде ответа.
    Что-бы вывести этот ответ в консоль, переделайте метод done
    .done(function(data) {
                        console.log(data);
                    })
    Ответ написан
  • Можете привести пример, когда использовать private, а когда protected?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Чтобы поменять что-то в классе, не нужно изменять его код - нужно применить паттерн декоратор.
    Есть принцип проектирования: "предпочитайте композицию наследованию, а так же принцип: "проектируйте на уровне абстракций".
    В целом, если можно создать объект класса - не стоит от него наследоваться, лучше делегируйте в новом классе часть функционала на такой объект и добавьте новый функционал, как-то так.
    Понятное дело, private нужен для случаев, когда наружу ничего не должно выходить (разве что через геттер).
    Protected же полезен при принципе проектирования на уровне абстракций, когда можно выделить общее (и сделать protected) и отделить изменяющееся (еще один принцип, кстати).
    Ответ написан
    Комментировать
  • Как поставить кодировку UTF8?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    ну если больше ничего не говорить
    class Crud
    {
        public $connect;
        private $host = 'localhost';
        private $username = 'root';
        private $password = '';
        private $database = 'baza';
        function __construct()
        {
            $this->database_connect();
        }
        public function database_connect()
        {
            $this->connect = mysqli_connect($this->host, $this->username, $this->password, $this->database);
            mysqli_set_charset($this->connect, 'utf8');
        }
        public function execute_query($query)
        {
            return mysqli_query($this->connect, $query);
        }

    хотя все-таки скажу, singleton, продолжать не буду.
    Ответ написан
    Комментировать
  • Почему пишутся в корень, когда указал путь?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Если код запускается не из браузера, а из консоли, то рутом будет корень.
    Ответ написан
  • Почему регулярное выражение может не работать?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    в regex101 Вы указали флаг m, а в коде нет
    echo preg_match('/^[a-zA-Z\ \-]{2,20}$|^[а-яА-Я\ \-]{2,20}$/m', 'фывв');
    echo preg_match('/^[a-zA-Z\ \-]{2,20}$|^[а-яА-Я\ \-]{2,20}$/m', 'ооооооооооо');


    без него не работают символы ^ и $ как спецсимволы.
    Ответ написан
    1 комментарий
  • Как хранить несколько сессий для каждого сайта? Дубль демона?

    VicTHOR
    @VicTHOR Автор вопроса
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    настройки apache перебивают настройки php, для разных прокси можно указать разные директории сессий.
    #server1.conf
    Listen 127.0.0.1:8888
    <VirtualHost 127.0.0.1:8888>
      # ...
    
    	<Directory /home/user/server1/>
        # ...
    		php_admin_value session.save_path /tmp/php_sessions/server1
    		php_admin_value upload_tmp_dir /tmp/php_upload/server1
    	</Directory>
    
      # ...
    </VirtualHost>

    #server2.conf
    Listen 127.0.0.1:8889
    <VirtualHost 127.0.0.1:8889>
      # ...
    
    	<Directory /home/user/server2/>
        # ...
    		php_admin_value session.save_path /tmp/php_sessions/server2
    		php_admin_value upload_tmp_dir /tmp/php_upload/server2
    	</Directory>
    
      # ...
    </VirtualHost>
    Ответ написан
    Комментировать
  • Как составить регулярное выражение?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    1 строка на входе? Это все условия? State всегда с большой буквы? всегда двоеточие после идет без пробелов? всегда после двоеточия тоже нет пробела?
    $str= '703@ext-local : PJSIP/703&SIP/99703& State:Idle Presence:available Watchers 16 1 hint matching extension 703';
    preg_match('#(?<=State:)\S+#', $str, $state);
    echo $state[0];
    Ответ написан
    1 комментарий
  • Вызов метода родителя по имени потомка - это self или static?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Если вызывать self и static из дочернего класса, то будет вызван дочерний класс в любом случае.
    Разницу видно при вызове из родителя. По умолчанию родитель ничего не знает о наследниках, но благодаря static может вызывать их переопределенные методы, а не свои.
    А что-бы дочернему классу указать вызов родителя, используется parent
    sandbox
    code
    class A
    {
        public static function test()
        {
            echo 'class A';
        }
        
        public static function testMethodFromParent()
        {
            echo self::test()." | self::test()\n";
            echo static::test()." | static::test()\n";
            echo B::test()." | B::test()\n";
        }
    }
    
    class B extends A
    {
        
        public static function test()
        {
            echo 'class B';
        }
        
        public static function testMethodFromChild()
        {
            echo B::test()." | B::test()\n";
            echo self::test()." | self::test()\n";
            echo static::test()." | static::test()\n";
            echo parent::test()." | parent::test()\n";
        }
        
    }
    
    echo "Вызов функции дочернего класса в дочернем классе\n";
    B::testMethodFromChild();
    echo "\nВызов родительской функции в дочернем классе\n";
    B::testMethodFromParent();
    
    /*
    Вызов функции дочернего класса в дочернем классе
    class B | B::test()
    class B | self::test()
    class B | static::test()
    class A | parent::test()
    
    Вызов родительской функции в дочернем классе
    class A | self::test()
    class B | static::test()
    class B | B::test()
    */
    И вот здесь уже видно, что B::test() - то же, что и static::test(), но привязано к B, а не к тому дочернему классу, который вызывает метод, в отличие от static.
    А при вызове из потомка self совпадает со static, и в целом каждая запись имеет свои особенности.
    Ответ написан
    9 комментариев
  • На сколько плох данный подход?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    На сколько плох мой подход, что я передаю $redis параметром в метод?
    Это называется Dependency Injection и так реализуется композиция, это очень хорошо, т.к. работают принципы ООП - метод не знает ничего об объекте, объекты могут быть различные, что расширяет возможности.
    Другое дело - как именно работает этот метод, какой тип данных он может принять - вот о чем стоит подумать.
    Стоит передавать объект определенного интерфейса. Сегодня под него подходит и используется redis, завтра что-то другое... Или не нужно это все? Тут надо смотреть на проект, если вернуться к вопросу:

    На сколько плохо передавать объект параметром в метод?
    Абсолютно не плохо.
    Ответ написан
    Комментировать
  • Как добавить лимит?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    $db->query('SELECT * FROM `' . static::getTableName() . '` ORDER BY `views` LIMIT 10', [':views' => $views], static::class);
    Ответ написан
    Комментировать
  • Регулярное выражение для добавления первого слеша ссылкам?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    $html = preg_replace('~href="(?!http|/)\K~', '/', $html);
    Ответ написан
    1 комментарий
  • Как оптимизировать код?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    сохраняешь тело в переменную
    <?php ob_start();?>
    <i class="fa fa-comments-o"></i> 
    {{count($LastArticle->comments)}} 
    {{Lang::choice('ru.comments',count($LastArticle->comments))}}
    <?php $content = ob_get_contents();
    ob_clean();

    потом делаешь примерно
    switch (count($LastArticle->comments)) :
        case false:
            echo $content;
            break;
        default: ?>
            <a href="{{route('post',['articles'=>$LastArticle->id])}}#comments" title="">
            <? echo $content; ?>
            </a>
            <? break;
    endswitch;
    Ответ написан
    Комментировать