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

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    $servers[] = array(...);
    Ответ написан
    3 комментария
  • Как вывести многомерный массив php?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    вы видимо, что то такое хотите
    foreach($a as $v){
     echo $v['id'], ':', $v['name'], ' ';
    }
    Ответ написан
    Комментировать
  • На чем писать клиент-сервер с 10 000+ онлайном и 36 000 000 запросов в час?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Выше писали про проблему 10к, не заморачивайтесь эта проблема была озвучена 10 лет назад, когда интернет, софт и железо были сильно другими.

    Мне кажется вы не в ту сторону смотрите. Вам намного проще научиться раскидывать нагрузку по 2-3-4... серверам, с тем, что есть. Это даст вам в итоге, переваривание любого трафика, только подкидывай денег на сервера.

    А уже потом вы можете оптимизировать стоимость владения этими серверами переписывая софт, меня базы и фронт энды. Так как переделывание/переписывание вам скорее всего поднимет производительность максимум в 2-3 раза, если у вас всё плохо в 10, а потом окажется что этот 10 кратный рост может отрабатывать только на 10 GB интернет каналах и ssd дисках на которые нет денег или они деньги есть но производительности одной железки не хватит уже через полгода.

    маштабируйтесь
    Ответ написан
    Комментировать
  • Почему отображается иерогриф?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Видимо у вас отличается кодировка базы или таблицы или колонки в таблице - у них у всех может быть разная кодировка, от кодировке на сайте. Нужно сделать везде utf8.

    p.s. не забудьте снять копию базы до экспериментов с кодировками
    Ответ написан
    Комментировать
  • Как выполнить такие трюки с try/catch?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Вам надо их вложить.

    try{
        try {
          // Doing all the work
        } catch (PDOException $e) {
            if ($e->getCode() === '23000') {
                $this->response->addError('this title already exists');
            } else {
                throw $e;
            }
        }
    }catch (Exception $e) {
        $this->response->addError('the critical error has occurred, unable to save entry');
        $this->logger->writeThrowable($th);
        $this->response->post = $this->request->getPost();
        $this->showAdd();
        return;
    }


    Для более сложных конструкций вместо throw $e; бросаем throw new MyException('msg',123,$e); и когда он будет пойман у него через метод Exception::getPrevious можно забирать подарившее его исключение

    p.s. Throwable вроде только в 7-ке, а она сыровата ещё.

    Cуть finally
    try {
    	try {
    		throw new Exception('hello world');
    	} catch (Exception $e) {
    		throw $e;
    	} finally {
    		echo " i work ";
    	}
    
    	echo ' not work ';
    }catch(Exception $e){
    
    }
    Ответ написан
    8 комментариев
  • Как найти файл посредством PHP?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    найдите функцию glob в мануале
    Ответ написан
  • Как хранить время последней активности пользователя в MySQL?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Общее для всех mysql:
    Проверить какой запрос отрабатывает система если replace то плохо если update или insert on duplicate key update - то ок.
    Если в action_history есть индексы кроме примари кей то их скорее всего стоит убрать т.к. вероятно запросы ( сортировки или агрегации) по этим полям будут приводить в любом случае к фулскану и индекс не будет иметь смысла, а при апдейте перестройка будет постоянно всё класть.

    Для Maria: убедиться, что в Maria XtraDB не сломана построчная блокировка (всё таки опыт продакшена у марии неё вялый ). Потом вызывает опасение реализация внешнего индекса в таблицах разного типа, возможно это как то может ломать построчную блокировку. Если у вас лок всей таблицы разберитесь откуда, так не должно быть

    В общем и целом, поразмышлять что INSERT DELAYED VALUES (1,2,3),(..,..,..),(N,N,N) для записи всех действий будет работать заметно веселее особенно без индексов и в одном потоке, а после некоторых шаманств с агрегацией по крону ещё не будет деградировать от распухания. Что можно про крону парсить access.log (понимать что он не рилтайм), в этом случае будет одна пачка апдейтов допустим раз в минуту и user_id будет заапдейчен только один раз, это будет пожалуй самой простой реализацией задачи упорядочивания и фильтрации потока апдейтов к mysql. Парсинг лога можно заменить на RabbitMQ, или написать своего демона который будет висеть на соке и рулить.

    Но смотрите если у вас задача в стиле показать последние 10 пользователей сделавших, что то, то это решается сильно иначе.
    Ответ написан
    2 комментария
  • Как проверить для поля на наличие их в дб?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    По полю text вам нормального индекса не построить, поэтому можно поступить так:
    1) добавить поле hash и сделать его unique key
    2) в поле hash писать что то типа md5(trim(title)+trim(text))
    3)
    INSERT INTO
      table
    SET
      `id` = ?,
      `title` = ?,
      `text` = ?,
      `hash`= ? 
    ON DUPLICATE KEY UPDATE
      id= ?

    Делает то же что replace только без удаления записи

    p.s. вы уверенны что вам надо обновлять поле id ? я спрашиваю потому, что оно обычно автоинкремент и примари кей, т.е. в таком случае обновить id на тоже значение, что уже существует не получиться.
    Ответ написан
    6 комментариев
  • PHP MySQL надо вставить текст с HTML тэгами в БД, но он не вставляется. Как правльно вставить?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Искать как сделать escape в mysql.
    INSERT .. SET text_field = "plan text" - у вас всё ок
    INSERT .. SET text_field = "html text" - ломает кавычки

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

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Все заумные подходы к написанию кода нужны для того что бы его можно было долго писать, быстрее рефакторить и долго-долго поддерживать и т.п.

    Если у вас есть такие задачи, то вы на практике довольно быстро найдёте как их оптимизировать, применяя всякие заумные штуки.

    Если вы будете применять всякие заумные абстракции ради академического интереса, а не ради решения производственных проблем, то ваш код будет полной фигнёй.

    Соответственно ответ на сам вопрос: начните решать задачи где написание такого кода жизненно необходимо.
    Ответ написан
  • Стоит ли исправлять предупреждения интерпретатора PHP?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Предупреждения в следующей версии могут стать ошибками и код будет падать.
    Предупреждения часто сигнализируют об ошибочкой логике в коде, например переменные имеют не те типы, что ожидается.
    Предупреждения будут часто ловить описки например в именовании индексов массивов.
    И т.д.

    Если вы их не исправляете то ваш код будет постепенно погибать при встрече с реальными данными и на зоопарке версий php.
    Если ваша цель, указать в своём резюме "быдлокодер на php" то ни в коем случае не включайте их.

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

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    $d = new DateTime('2015-01-07');
    $d2 = new DateTime('2015-24-07');
    do{
       echo $d->format('Y-m-d');   
       $d->modify('+1 day');
       
    
    }while($d <= $d2 );
    Ответ написан
    Комментировать
  • Как избавиться от зависимых запросов?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    @tamtakoe вам @Masterme всё верно сказал, если джойны не подходят идеологически сделайте три простых селекта подряд, вас никто не заставляет делать один запрос. И база их отлично закеширует, чего скорее всего не будет с джойнами.

    А ещё лучше будет если вы расширите исходный набор данных клиента, так что бы он мог сразу сделать api.site.ru/museums?city=123&categories=456&type=best
    Ответ написан
    Комментировать
  • Как передать многомерный массив в node.js?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); не должно быть строкой, вы же не стороне node.js ожидаете данные от формы.
    Пишите что то вроде:
    curl_setopt($curl, CURLOPT_POSTFIELDS, array('jsonData'=>$data));


    Или парсите на стороне ноды сырые данные, но это более замороченный путь.
    Ответ написан
  • Nginx + php-fpm + yii framework frontend/backend howto?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Так и делайте,
    пропишите нужный рут в location
    Ответ написан
    Комментировать
  • Как заменить несколько подстрок в строке?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    То, что элементы первого массива фиксированы, а элементы второго массива задаются пользователем.
    SQL в PDO записывается так: SELECT * FROM table `name`=:name AND pass=:pass
    Далее мы даём на обработку массив array(':name'=>$name,':pass'=>$pass)
    В PDO отлично заменяет.


    $name = 'test';
    $pass = 'name:qwe';
    $query = 'SELECT * FROM table `name`=:name AND pass=:pass';
    $arg = array(':name'=>$name,':pass'=>$pass);
    
    $query = str_replace(array_keys($arg),array_values($arg),$query);
    
    var_dump($query);


    Вам это было нужно?
    Ответ написан
  • Nginx+php-fpm (chroot). Из-за чего no input file specifed?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Противоречие:
    root /srv/example.ltd/www;
    fastcgi_param SCRIPT_NAME /www$fastcgi_script_name;

    у вас должно быть типа:
    fastcgi_param SCRIPT_NAME /srv/example.ltd/www$fastcgi_script_name;
    Ответ написан
  • Как открыть модельное окно при открытии страницы?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    вставьте это в вашу страницу

    <script> 
    jQuery(document).ready(function($){
       $('.eModal-1').click();
    }) 
    </script>
    Ответ написан
  • Почему неправильно работает отправка post (jquery, php)?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Ошибка в имени переменной.

    $text = $_POST['usermsg'];
    исправьте на
    $text = $_POST['text'];

    или

    $.post("post.php", {text: usermsg});
    исправьте на
    $.post("post.php", {usermsg: usermsg});
    Ответ написан
    3 комментария