Задать вопрос
Ответы пользователя по тегу PHP
  • Не корректно работает код, поможете?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Для фильтрации ввода хорошо использовать функцию filter_input().
    Для работы с БД использовать PDO.

    $param = filter_input(INPUT_GET, 'filter', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
    $filters = explode('-', $param);
    
    $banner = $country = NULL;
    $tags = [];
    
    if( count($filters)) {
    	foreach($filters AS $filter) {
    		if( preg_match('/^[0-9\.]+$/', $filter)) { // 1.5.9
    			$banner = $filter;
    		} elseif( preg_match('/^(RU|EN)$/', $filter) { //  RU
    			$country = $filter;
    		} else { // tag
    			array_push($tags, $filter);
    		}
    	}
    }
    
    $conditions = [];
    $params = [];
    if($banner) {
    	array_push($conditions, "`banner` = ?");
    	array_push($params, $banner);
    }
    
    if($country) {
    	array_push($conditions, "`country` = ?");
    	array_push($params, $country);
    }
    
    if(count($tags)) {
    	foreach($tags AS $tag) array_push($params, $tag);
    	
    	array_push($conditions, sprintf(
    		"`category_id` IN (SELECT `category_id` FROM `categories` WHERE `name` IN (%s)",
    		implode(',', str_split( str_repeat('?', count($tags))))
    	));
    }
    
    $query = 'SELECT * FROM sometable';
    if( count($conditions)) $query = $query . ' WHERE ' . implode(' AND ', $conditions);
    
    $stmt = $dbh->prepare($query);
    if( $stmt->execute($params)) {
    	while ($row = $stmt->fetch()) {
    		print_r($row);
    	}
    }
    Ответ написан
    Комментировать
  • Как посредством API ВКонтакте получить больше 5000 друзей методом friends.get()?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Сделайте в цикле. С каждым разом увеличивайте offset на 5000 пока он не окажется больше возвращённого в поле count полного числа друзей. Не забывайте про лимит в 3 запроса в секунду.

    Можно ещё заморочиться и запихать весь код в execute(), тогда из PHP последует единственный запрос, а цикл прокрутится на сторон ВК.
    Ответ написан
    3 комментария
  • Какова веростность коллизии в рандомной строке?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Возможно лучше будет не случайную строку генерить, а последовательные id записей однозначно мапить (см. биекция, bijection) в пространство вашего алфавита. Так 100% не будет коллизий.

    Чтобы коды последовательных id не выглядели последовательно, можно, например, реверсировать порядок бит в числе перед записью его новым алфавитом. Это сохранит однозначность отображения.

    2 млн. записей укладываются в 20 бит (0 .. 2097151). Алфавит из англ. букв в двух регистрах и цифр состоит из 26+26+10 = 62 символов. Может, ещё пару символов добавить, будет ровно 64 (6 бит). Итого для одного id понадобится всего 4 символа вашего алфавита, и это с избытком: вместо 20 бит, целых 24 будете записывать.
    Ответ написан
    Комментировать
  • Добавить одинарные кавычки в начало и конец текста?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $text = "Это мой текст. Да, вот такой.";
    $text_v_kavychkah = "'" . $text . "'"; // точка означает склеивание строк
    // или
    $text_v_kavychkah = '\'' . $text . '\''; // только одинарные кавычки
    // или
    $text_v_kavychkah = "'$text'"; // в двойных кавычках подставится значение переменной
    // или
    $text_v_kavychkah = sprintf("'%s'", $text); // текстовое значение подставится вместо %s
    Ответ написан
    Комментировать
  • Зачем делают вот такую конструкцию?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Очень-крутые сайтоделы внизу своей чисто-HTML страницы добавляют «копирайт (с) Вася Пупкин 2000 год» – иначе они не круты.

    Потом приходится менять год на следующий. И на следующий. Становится лень, и тут они открывают чудный мир PHP и копируют откуда-то код, автоматически подставляющий текущий год в страницу!

    &copy; Вася Пупкин <?php echo date('Y'); ?>

    Вот отсюда всё и начинается..
    Ответ написан
    Комментировать
  • Почему не проходит проверка vk api php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Проверить токен можно просто методом users.get() без параметров – при валидном токене он вернёт инфу про юзера, чей токен.
    Ответ написан
    Комментировать
  • В чем удобство указывать константам двоичные и шестнадцатиричные числа?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Те константы допускают одновременную комбинацию любых из них в итоговом значении – битовой маске.

    Там каждый бит означает что-то своё.
    1-й – подтверждение старого адреса, 2-й — нового, и т.д. Поэтому для наглядности удобнее показывать, какой это бит. Тогда для, скажем, 4-го и 5-го может, нагляднее написать 0b1000 и 0b10000, чем 8 и 16.
    Ответ написан
    Комментировать
  • Как вывести правильный результат vk api php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    likes.isLiked() возвращает (теперь) объект с полями liked и copied.

    Поэтому ваша функция islike() всегда что-то возвращает, что интерпретируется как true.

    p.s. хорошая практика указывать версию API в запросах параметром v.
    Ответ написан
    Комментировать
  • Как прочитать файл MNIST в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    По вашей же ссылке, ниже, идёт описание формата файлов:
    [offset] [type]          [value]          [description]
    0000     32 bit integer  0x00000803(2051) magic number
    0004     32 bit integer  60000            number of images
    0008     32 bit integer  28               number of rows
    0012     32 bit integer  28               number of columns
    0016     unsigned byte   ??               pixel
    0017     unsigned byte   ??               pixel
    ........
    xxxx     unsigned byte   ??               pixel


    Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).


    Т.е. грубо говоря, можно проигнорировать заголовок, отмотать сразу на 16-й байт и прочитать 784 байта первой картинки. Каждый байт это яркость очередного серого (одноканального) пикселя: 0 белый, 255 черный.

    В PHP
    • открыть файл fopen() как бинарный ('b' нужно только в Windows): $fh = fopen('train-images-idx3-ubyte', 'rb');
    • отмотать fseek() на 16-й байт:
      fseek( $fh, 16);
    • Прочитать fread() 784 байта: $byteString = fread($fh, 784);


    Дальше можете работать со строкой или распаковать unpack() байты:
    $arr = unpack( 'C*', $byteString);
    $arr[28] // яркость первого пикселя во второй строке


    P.S. но с оптимизмом глядя в будущее, я бы порекомендовал заморочиться и освоить Python, т.к. для него на порядки больше библиотек, уроков и людей в теме машинного обучения.
    Ответ написан
    3 комментария
  • Есть ли универсальное решение для хранения обработанной записи?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Подозревая некоторый бардак в таблицах с оправданием «так исторически сложилось», предложу жесть — одна новая таблица Отправленные:
    id, имя_таблицы, id_записи_в_той_таблице

    </sarcasm>
    Ответ написан
    Комментировать
  • Как избавится от знака? , в запросе?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Решается настройкой веб-сервера. Это он должен при отсутствии папки или файла с запрошенным названием «переписывать» запрос и передавать в index.php уже GET-параметрами или иначе запрошенный адрес.

    У вас Nginx или Apache? Такой паттерн называется «front controller».

    Nginx:
    try_files $uri $uri/ /index.php?q=$uri&$args;
    или ещё проще, читайте запрошенную строку из переменной $_SERVER['REQUEST_URI'] и напишите просто try_files $uri $uri/ /index.php;

    Apache:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]
    Ответ написан
    1 комментарий
  • Что нужно что бы доработать это до нейронной сети?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы обучить сеть понадобится немаленькая «обучающая» выборка правильных данных: 4 ваших входных параметра + ответ. Таких строк бы да побольше, разных.

    У вас 3 булевых входа (true/false) и один реальный (float). На выходе true/false.

    Возможно, для этой задачи больше подойдёт не нейронная сеть, а дерево принятия решений. Хорошее видео, объясняющее, как построить такое дерево на Python (на англ., но можно включить титру с автопереводом на Русский язык)

    Возвращаясь к нейронной сети и весам. На рисунке – три слоя: входной, скрытый и выходной. В каждом слое от 1 до нескольких «нейронов».

    У каждого нейрона два параметра, допустим, a и b. На вход к нему попадает некое значение x. Нейрон его умножает на a и прибавляет b, чтобы отправить дальше.

    Часто сеть инициализируют случайными весами, чтобы они не были нулевыми.

    Затем начинают прогонять через неё готовые, «обучающие» примеры. И смотреть, что на выходе. Разницу между «ожиданием» и «реальностью» называют «потерей» (loss). Её нужно минимизировать. Тема длинная, я плохо рассказываю. Лучше посмотрите курс какой-нибудь. Ответы на ваши вопросы:

    1. коэффициентов обычно не так много. Их держат в памяти во время работы сети и сохраняют в файл на диске, чтобы потом можно было снова загрузить.
    2. связи все-ко-всем. Если какие-то из них не нужны – ставится нулевой вес. Расчёт этих коеффициентов обычно делается «оптом» – операциями с матрицами.
    3. ваш код пока далёк от реализации нейронной сети, а ближе к упомянутому выше дереву принятия решений.
    4. в случае нейронной сети и градиентного спуска считается частная производная и делается маленький «шаг» в нужном направлении – коэфф. изменяется с текущего значения «чуть-чуть».
    Ответ написан
    2 комментария
  • Как получить все возможные комбинации в массиве битов?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Например, алгоритмом Нарайана Пандита, который на каждой итерации меняет два элемента между собой местами. Реализация на JavaScript для примера.

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

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Видео можно сгенерировать с помощью ffmpeg – это отдельная программа, запускается в командной строке. Для ffmpeg есть обёртка под php, но она не облегчает задачу. Лучше в php генерить всю команду с параметрами, и выполнять её через exec().

    Для видео в примере придётся ещё указывать тип эффекта на каждый кадр:
    • зум к центру (или к другой точке?) – фильтр zoompan
    • движение картинки вдоль прямой – тот же zoompan или crop


    Синтезировать речь можно через API Яндекс SpeechKit.

    Загружать, как верно написал doku ro, средствами PHP и YouTube API (пример).
    Ответ написан
    2 комментария
  • Как рассчитать время работы скрипта в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Вместо time(), который с точностью до целых секунд, используйте microtime(true), который вернёт с точностью до тысячных долей секунды.

    Скорее всего, ваш скрипт выполняется меньше секунды, и из-за округления до целых возвращается 0.
    Ответ написан
    Комментировать
  • Как конвертировать docx в pdf на сервере?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Можно через Google Apps: загружать docx в Drive и получать pdf-версию как файл или ссылку на файл. Есть REST API. В небольших объёмах точно бесплатно.
    Ответ написан
    Комментировать
  • Как избежать лимитов VK API?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы понять, в чём дело, смотрите ответы ВК на каждый запрос – есть ли там поле error. Пишите их в лог, чтобы можно было разобраться пост-фактум.

    Чтобы избежать превышения лимитов при наплыве посетителей, не обрабатывайте запросы синхронно, а устройте очередь задач. Поступил запрос от посетителя – создайте задачу и сохраните её в очередь, а серверу ВК ответьте "ок" и больше ничего сейчас не предпринимайте. Другой процесс, постоянно работающий в фоне, пусть берет по одной задаче из очереди, обрабатывает и шлёт ответ пользователю. Пусть учитывает время трёх предыдущих отправленых вызовов к API ВК. И при необходимости, чуть ждёт, прежде, чем выполнять следующий.
    Ответ написан
    6 комментариев
  • Как вычислить сумму значений из последних 5 записей?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    JavaScript там не нужен, судя по вашему коду. Обойдёмся одним PHP:
    <?php
    $id	= 2743;	// ID заданной рубрики
    $n	= 5;	// количество выводимых записей
    $recent = new WP_Query("cat=$id&showposts=$n");
    $sum = 0;
    
    while($recent->have_posts()) {
    
    	$recent->the_post();
    
    	if( get_field("result") === 'Win') {
    		$value = get_field('koff') * get_field('summa');
    		$sum += $value;
    		$out = sprintf( '%01.2f', $value); // 1.23
    	} elseif( get_field("result") === 'open') {
    		$out = "&hellip;"; // троеточие
    	} else {
    		$out = '0.00';
    	}
    	
    	echo $out . ' рублей.';
    }
    
    printf( "<p>Сумма: %01.2f рублей.</p>", $sum);
    Ответ написан
    4 комментария
  • Что почитать по тестированию PHP приложений?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Документацию PHPUnit (на англ.) + на Хабре есть перевод на Русский язык.
    Ответ написан
    Комментировать
  • Возможно ли создать чат-бота для ВК с помощью сервиса api.ai?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Среди поддерживаемых api.ai языков есть и Русский язык, поэтому ответ «да, возможно».
    Ответ написан
    Комментировать