Задать вопрос
  • Как проверить открыта ли стена вк?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Метод users.get() позволяет указать поле can_post, которое обозначает, может ли текущий пользователь постить на стену юзерам, id которых указаны в поле user_ids запроса.

    Скорее всего, вам захочется проверять открытость стены сразу у нескольких пользователей. Удобно использовать метод execute() для фильтрации только нужных данных. Передав в execute() такой код, получите назад массив единиц и нулей, соотв. возможности постить на стену у запрошенных юзеров:
    return API.users.get({"user_ids":"12,12345,1234567","fields":"can_post"})@.can_post;

    id пользователей перечислены через запятую. Пример ответа:"response": [0, 1, 0] значит, что юзерам 12 и 1234567 запостить не получится, а вот 12345 – можно. Порядок в ответе соответствует порядку в запросе.

    Для групп можно узнать точно так же, но методом groups.get() – тоже поле can_post.
    Ответ написан
    Комментировать
  • Как проверить открыта ли стена вк?

    tomnolane
    @tomnolane
    профессиональный разработчик
    637e8a4807dc4bd4ac4b750635f82053.PNG
    в fields используйте параметр can_post и/или can_see_all_posts
    запрос users.get

    а по этому запросу можете посмотреть ещё всякие интересности, в частности:
    ed8ad530525241c8a219d2deda0be738.PNG20f3cc2116da4378b38a2c47188afbb7.PNG
    Ответ написан
    Комментировать
  • В чём разница между self и "ClassName"?

    knetesin
    @knetesin
    Шпион
    A::$var
    вызов в контексте класса A

    self::$var
    вызов в контексте класса в котором определенно (в данном случае класса А)

    static::$var
    вызов в контекста текущего класса
    т.е в случае с наследованием:
    - если у вас будет класс B который наследуется от класса A и в котором будет переопределенно $var, оно будет использоваться,
    - в случае с self, будет использоваться переменная оттуда где вызван self

    т.е в вашем конкретном случае ничем, но лучше использовать static
    Ответ написан
    Комментировать
  • Что это в вк за дополнительныи элементы в меню появились?

    @private_tm Автор вопроса
    JAVA dev
    https://vk.com/search?c%5Bq%5D=%D0%B1%D0%B0%D0%B3%...

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

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

    Antonoff
    @Antonoff
    Разработчик
    Не пробывали в суппорт написать? А то я смотрю тут 90% думает, что тостер это суппорт апворка.
    Ответ написан
    Комментировать
  • Почему не срабатывает условие?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Манипуляции с куками и сессией могут быть осуществлены только до отправки заголовков(упрощено до вывода первой строчки в браузер), по этому условие выполняется, но код внутри исполнен не будет если перенести его ниже под хтмл. Легко проверить поменяв код на такой:
    <?php
      session_start();
      require_once("config.php");
    
    
    if(isset($_GET['login']))
    {
        echo "хрен вам, а не куки!";
        $obj->logIN($_COOKIE['PHPSESSID']);
    }
    
    <!DOCTYPE html>
    ...

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

    @dinegnet
    Словами опытного инвестора

    firrma.ru/data/articles/3929

    «Готовность людей начать делать что-то на свой страх и риск – это первый звонок, что человек «дозрел» до бизнеса, а не остановился на этапе обычной стартаперской болтологии без команды и веры»



    Есть, конечно, клинические случаи, когда компетенций человека с идеей не хватает на создание минимально работоспособного продукта, когда на этапе идеи они хотят получить деньги для найма команды программистов, маркетологов и продавцов. Тогда просто возникает скромный вопрос: «а ты кто такой вообще?».


    Автор идеи, основатель - должен впахиваться сам.
    Если ты всего лишь автор идеи - то ты в проекте не нужен вовсе.

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

    Но на большее, чем на ящик пива в благодарность за идею - рассчитывать не стоит.
    Ответ написан
    Комментировать
  • Как написать фрилансеру на Upwork?

    opium
    @opium
    Просто люблю качественно работать
    Создаешь работу и посылает ему инвайт на нее
    Ответ написан
    Комментировать
  • Eclipse PDT / PHPStorm — как настроить полноценные подсказки?

    AlexeyGfi
    @AlexeyGfi Автор вопроса
    YouTube >>> Битриксоид из Колхоза
    Сам спросил, сам отвечаю =)
    Мучил техподдержку, но разговор похож на теннис — перебрасывание мячика с поля на поле.

    Настроил отладку через xdebug и в вотчере всё увидел.
    Вот как это выглядит в дебагере:
    145d7304f9b846eabb6eb93c43ef0924.png

    ================ Удалённый дебаггинг (remote debug, xdebug) ================
    Инструкция (для тех, кто попадёт сюда с поиска).
    Что нужно для настройки дебаггинга удалённо (потому что, блин, пришлось поковыряться).
    Ниже даны секции по PHPStorm и Eclipse PDT.

    Дано:
    Компьютер №1:
    Windows + PhpStorm.

    Компьютер №2:
    Debian + Апач удалённо.

    Задача: организовать синхронный дебаггинг между компьютерами.

    Важно: шторм будет идти по шагам по вашему файлу, а "слушать" отчёт xdebug, который транслирует, идя по файлам на удалённом сервере.
    Поэтому файл, открытый в шторме, должен быть точной копией того, что выполняется на сервере.

    Шаги:
    1. На сервере устанавливаем xdebug, настраиваем php.ini
    6ff3e74f4c7747a196772da98976f737.png

    В нём я переменную xdebug.remote_enable отключил, потому что на шторм начинают сыпаться запросы со всех сайтов на сервере =)

    Эту переменную инициализировал через .htaccess именно в той директории, откуда провожу отладку:
    php_flag xdebug.remote_enable on

    (!) в рамках всего сайта:
    Чтобы работало так: для обычных пользователей дебаггинг отключен, а для вас стартует — в htaccess прописываем:
    <If "%{REMOTE_ADDR} == '137.126.15.14'">
    	php_flag xdebug.remote_enable on
    </If>

    ... где 137.126.15.14 — ваш IP адрес (аналог php-переменной $_SERVER[ 'REMOTE_ADDR' ])

    Можно htaccess настроить более тонко, чтобы админка не прерывалась в дебаг (или наоборот).
    Пример конфига (REQUEST_URI не захотело использовать, хз почему — в phpinfo() они определены):
    <If "%{REMOTE_ADDR} == '137.126.15.14' && ! %{THE_REQUEST} =~ m#/bitrix/#">
    	php_flag xdebug.remote_enable on
    	php_flag xdebug.remote_autostart on
    </If>


    Если на сервере / на сайте работают разные программисты, можно разделение дебаг-потоков сделать через трансляцию на разные порты в зависимости от пользователя (IP-адреса клиента):
    <If "%{REMOTE_ADDR} == '137.126.15.14' && ! %{THE_REQUEST} =~ m#/bitrix/#">
    	php_flag xdebug.remote_enable on
    	php_flag xdebug.remote_autostart on
    	php_value xdebug.remote_port 9013
    </If>

    ... соответственно, ориентируясь на IP и запрошенный урл, дебаггер транслирует информацию на определённый порт. Программисту остаётся правильно установить туннель.

    2. Пробрасываем SSH-туннель.
    Задача: сделать так, чтобы на порт 9007 компьютера №1 поступала информация, которая транслируется на порт 9002 компьютера №2.

    Исходя из формулировки, благодаря этому способу можно пробросить туннель, если порты отличаются.
    Например, вам достался сервер, на который у вас есть SSH-доступ, но нет возможности менять порт xdebug. Или локально порт занят и вам нужно какой-то нестандартный.
    То есть реально пробросить например туннель, который на порт 9007 компьютера №1 будет транслировать информацию с порта 9002 компьютера №2. Сервер пушит инфу на 9002, а вы на локальном компьютере слушаете порт 9007 .

    Сделал это через putty:
    ff4ab5092dce4326bca9914a4f7168fc.png

    ...как проверить?
    83cd6ae9cd5549269205de6191acade8.png

    ================ PHPStorm ================
    3. На компьютере ставим слушать порт 9007 (в моём случае):
    Меню File / Settings / Languages & Frameworks / PHP / Debug + кнопочка "Start Listening for PHP Debug Connections"
    7c5b067e84c34c3da9cebdb30d151742.png
    +
    916b5cee651c4283bbc48bf997528376.pngUPD: прослушка порта (вкл/выкл).

    Вот скриншот, которого очень не хватает во всех раскопаных туториалах:
    805110c8b3bb43a19192778aac36aac8.pngРезультат: когда шторм слушает порт и мы в обычном браузере открываем страницу, которая находится в разделе, пинаюшем xdebug.remote_enable, шторм перехватывает сигнал и ведёт его уже через свой дебаггер.
    Нужно только не забыть либо поставить breakpoint, либо опцию Break at first line in PHP script, иначе скрипт просто пролетит и даже не заметишь =)

    По поводу соответствия / несоответствия файлов локально и удалённо: если шторм замечает, что не может сопоставить файлы, он выдаст предупреждение и предложит настроить маппинг:
    7d2f592f1d0343759d9ab296a64c8c26.png

    ================ ECLIPSE PDT ================
    Настройка под Eclipse PDT.
    Шаги на сервере и туннеля остаются те же.

    Переходим в Windows / Preferences / PHP / Servers.

    Там создаём новый сервер:
    8390f852457e43afa51c56194fa26bfb.png

    Заходим в него снова и донастраиваем появившиеся вкладки:
    e3818d1a963541c4ae83e613151be318.png

    Ставим созданный сервер по-умолчанию:
    e76298e9b1ea445d9e7347ac853936e5.png

    Поставим ещё, чтобы дебаггер break-нулся с первой же строчки (потом можно отключить и использовать breakpoints):
    dc558e98f2e74b49b499799e7697c02e.png

    Когда убедимся, что всё работает, — рекомендуется проводить то же, но индивидуально для конкретного проекта: через Property проекта, либо через Debug Configuration:

    f96c1932cb334e39bea70d11952878f8.png

    Всё.
    Теперь, когда на порт 9007 поступит сигнал, Eclipse встрепенётся:
    6c181c46964248f59a57a1d08fcb16b6.png

    Принимаем сигнал и начинаем отладку.
    Ответ написан
    Комментировать
  • Безопасно ли сейчас сохранять пароли в Chrome?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    Не безопасно сейчас, в прошлом и будущем.
    Ответ написан
    Комментировать
  • Безопасность банковских карт?

    Jump
    @Jump
    Системный администратор со стажем.
    3d secure включено практически на всех картах у нас.
    Однако некоторые магазины могут провести платеж, и без подтверждения через смс, даже при включенном 3ds.
    Но такое позволено далеко не всем магазинам - мелкому ларьку такое сделать не позволят, только очень крупным конторам, у кого репутация и солидный баланс. Любой платеж совершенный без 3ds вы можете оспорить.

    По факту - номер карты можно светить направо и налево. Это безопасно.
    Если кто увидит CSV - тут уже можно воспользоваться вашей картой.
    Однако деньги вы не потеряете - такие фокусы без проблем можно оспорить, и деньги вернут.
    Правда дело это не быстрое, не стоит рассчитывать что вернут их через пять минут, обычно пара месяцев.

    Плюс ко всему платежи контролирует автоматика и служба безопасности на стороне банка.
    Если вы попытаетесь совершить нетипичную для вас операцию на крупную сумму - вам могут заблокировать платеж. Я сталкивался с таким - пытаюсь оплатить, платеж не проходит, и тут же звонок из банка, задали пару вопросов, повторил платеж - все прошло.

    Т.е пользователь достаточно защищен. Банк тоже защищен, потому как деньги на счет магазина поступают не мгновенно.
    Взломы случаются, но крайне редко, не чаще чем кошельки у граждан в автобусах крадут.

    Просто надо понимать что карта это не место для хранения денег, а инструмент для расчетов.
    Хранить крупные суммы надо на банковском счету.
    А на карте должны быть деньги на текущие расходы.
    Так же нужно иметь более одной карты - очень неприятно когда у вас все деньги на одной карте, а у банка зависает система, или неисправный банкомат зажевывает вашу карту, или ее блокируют по какой-то причине.
    Ответ написан
    Комментировать
  • Безопасность банковских карт?

    @miksir
    IT
    1) На некоторых интернет магазинах не требуется никакого подтверждения смс кодом или еще как-то.

    1) Так называемое 3ds (подверждение смс) - способ защиты мерчанта от фрода. В случае вашего несогласия с платежом (опротестование через банк) при отключенном 3ds - убыток несет мерчант. Если мерчант поддерживает 3ds - ответственность перекладыватся на владельца карты. Т.е. если у вас увели данные карты и купили через 3дс - у вас хороший шанс опротестовать и получить деньги назад (хоть это и займет много времени). Если 3дс был (у вас увели телефон или посадили вирус или как-то узнали код) - вернуть ничего не получится. Почему не все мерчанты поддерживают 3дс? Ну, например почитайте https://habrahabr.ru/company/badoo/blog/234677/ - там есть цифры, как 3дс уменьшало продажи.

    Вопрос: что можно сделать с картой, имея лишь ее номер и зачем, если это небезопасно, банки выбивают номер на самом видном месте?

    2) Сейчас почти ничего, мест, где можно провести операцию только по номеру карты без какой-то дополнительной верификации - почти не осталось. Я бы не стал светить номер карты везде в интернете, но и скрывать номер от друзей/начальника и т.п. смысла нет. А вот CVV код (на обратной стороне) стоит спрятать (лучше всего переписать и затереть нафиг). Опять же, если уведут номер карты + cvv - скорее всего такие платежи можно будет опротестовать, но нафига вам лишний гимор.

    общем все это выглядит очень небезопасно и я стараюсь не хранить большие суммы на карте.

    Угроз много, опротестование занимает время, банки не особо охотно это делают и т.п. Так что держать сумму, которую не сильно обидно потерять - самое оптимальное. И подкидывать туда деньги с другого счета через интернет-банк по мере необходимости.
    Ответ написан
    Комментировать
  • В каком случае запрос быстрее?

    shaks
    @shaks
    в мускуле можно глянуть с помощью профайлера. Он доступен помоему с 5й версии или типа того

    set profiling=1;
    SELECT * FROM `table` ORDER BY (`column1` - `column2`);
    SELECT *, (`column1` - `column2`) AS `column3` FROM `table` ORDER BY `column3`;
    show profiles;

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

    Что бы что-то понять реально надо смотреть что продается под красивым словом "бизнес". Это имущество? нематериальные активы? просто зарегистрированное юр.лицо? А значит смотреть надо и остаток по расчетному счету, и задолженности перед банками, государством, и долги нанятому персоналу, а особенно нет ли поданных или проигранных исков в судах. Получается, что купля-продажа бизнеса это на два порядка сложнее, чем недвижимости. Посему весьма маловероятно, что нормальный человек будет "так" продавать бизнес, типа да я ничего не знаю, сам купил по сходной цене и т.п.
    Ответ написан
    5 комментариев
  • Как можно спарсить определенный div и записать в базу данных?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Добавлю к entermix , что есть еще ПО для win Content Downloader sbfactory.ru Для ручного запуска очень удобно. Можно в csv парсить потом заливать или сразу в БД (если бд работает с внешними ресурсами). Для автомата, надо думать как запустить в win по расписанию. Но если с phpDomHtml траблы - то вариант хороший
    Ответ написан
    Комментировать
  • Пароли при сравнении различаются, в чём проблема?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    RTFM
    Функция password_hash возвращает строку, в которой содержится алгоритм шифрования ($2y$ - CRYPT_BLOWFISH), параметры алгоритма (10$ - цена), случайно сгенерированную соль и собственно хэш от пароля с солью.
    Соответственно, при каждом вызове соль меняется и хэш получается другой. При желании можно передавать третьим параметром массив опций, в том числе и фиксированную соль. Но лучше для проверки использовать функцию password_verify()
    Ответ написан
    7 комментариев
  • Пароли пользователей после переноса с yii?

    @xfg
    Yii использует алгоритм хеширования blowfish. Чтобы в php получить хеш по этому алгоритму, нужно просто взять функцию crypt и вторым аргументом передать соль в формате$2a$13$6abRKtrd12bvkltrfsorbd

    где
    $2a$ (также может быть $2x$ или $2y$) - указывает на алгоритм блоуфиш.
    13 - сложность алгоритма, может быть от 04 до 31. Чем больше число, тем дольше будет вычисляться хеш.
    6abRKtrd12bvkltrfsorbd - 22 символа для соли.

    Проверить хеш против пароля можно функцией password_verify. Берете хеши, которые вам нагенерил Yii и передаете в функцию password_verify и всё у вас заработает, без проблем. Я с Yii на node.js уезжал с этими хешами, никаких проблем :)

    Все что ниже можно не читать. Там для тех, кому интересно откуда взялось 3 разных префикса ($2a$, $2x$, $2y$).

    Префиксы $2y$ и $2x$ существуют только в PHP, так как они налажали в алгоритме блоуфиш в версиях до 5.3.7. Префикс $2x$ был добавлен для обратной совместимости, т.е. если вы генерили хеши $2a$ в версии PHP до 5.3.7 и теперь обновились до или выше этой версии и хотите, чтобы ваши уже существующие уязвимые хеши продолжали правильно работать, то нужно было заменить у таких хешей префикс с $2a$ на $2x$. Префикс $2y$ это уже исправленный алгоритм хеширования и ничем не отличается от $2a$ в версиях PHP 5.3.7 и выше. Подробнее обо всем этом можно прочитать php.net/security/crypt_blowfish.php

    Yii использует префикс $2y$. Но в спецификации из всех этих префиксов есть только $2a$ и его и нужно использовать, если у вас версия выше или эквивалентна PHP 5.3.7. Так что, если вы избавились от Yii, то можете поменять и префикс у ваших хешей. Потому что, когда я мигрировал на node.js библиотека для блоуфиш хеширования естественно не поддерживала никаких $2y$ и $2x$ и не собиралась этого делать в дальнейшем, так как это не их баги, а PHP, вот пусть PHP с этими префиксами и живет :)
    Ответ написан
    1 комментарий
  • Почему значения переносятся в другие input'ы?

    @game802 Автор вопроса
    Немного подумав, я решил вопрос:
    $(document).on('click', 'input.img_input', function() {
      inp = $(this);
      setInterval(function() {
        $('iframe').contents().find('.uploadfile').on('click', function () {
          var url = $(this).attr('href');
          inp.val(url);
        });
      }, 100);
    });
    Ответ написан
    Комментировать
  • Где ошибка в коде php калькулятора?

    Stalker_RED
    @Stalker_RED
    Синтаксис if (statement) : ... endif; предназначен для шаблонов. Не стоит его употреблять в бизнес логике.

    И не стоит злоупотреблять переменными как именами функций.
    И эти функции нигде не вызываются. Выражение $banket_summ = $banket * $people; НЕ выполняет функцию $banket.
    Чтобы она вызывалась нужно писать $banket_summ = $banket() * $people; в js тоже для вызова функции нужно круглые скобочки писать, бзв.
    Ответ написан
    Комментировать