Задать вопрос
  • Скачка файлов на сервер с удаленного хоста. Как передать параметр из php-скрипта в wget?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Буквальный ответ на этот вопрос, который будет полезен тем, кого привлечёт заголовок вопроса - escapeshellarg()
    Все параметры, которые передаются в команды шелл, должны в обязательном порядке обрабатываться этой функцией.

    Решение смешной проблемы в текущем коде - надо всего лишь использовать двойные кавычки вместо одинарных.
    $fileD = escapeshellarg("https://domain.zone/files/file".date("Ymd").".zip");
    exec ("wget -O todayfile.zip $fileD");

    Для решения же исходной задачи, разумеется, не нужен никакой РНР. Использовать для этих целей РНР - это все равно что сначала завернуть котлету в целлофановый пакет, а потом её есть. Ну ведь wget - это уже шелловая команда, и запускать её надо напрямую.

    /usr/bin/wget -O /path/todayfile.zip "https://domain.zone/files/file$(date '+%Y%m%d').zip"
    Ответ написан
    3 комментария
  • Как удалить одинаковые записи?

    @Akina
    Сетевой и системный админ, SQL-программист.
    нужно удалить записи с одинаковыми date и user_id

    DELETE t1.*
    FROM tablename t1
    JOIN tablename t2 USING (date, user_id)
    WHERE t1.id > t2.id


    а лучше не создавать их

    CREATE UNIQUE INDEX indexname ON tablename (date, user_id)

    Выполнить строго после удаления дубликатов - иначе упадёт по ошибке.
    Ответ написан
    Комментировать
  • Есть ли разница в этих запросах SQL с join?

    Stalker_RED
    @Stalker_RED
    Разницы в результате не будет.
    Разницы в производительности не должно быть, если корректно отработал оптимизатор запросов.
    На простых запросах, типа этого, он обычно отлично справляется, но чем сложнее запрос, тем больше смысла разжевывать ему все поподробнее, указывать правильные индексы, и все такое.
    Ответ написан
    Комментировать
  • Реально ли работать в одном IT-проекте (продуктовом) больше 5-ти лет и не деградировать профессионально?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Если задачи сложные и разноплановые (особенно если повезло и иногда встречаются творческие), то никакой деградации не должно быть. Как вариант - кодить что-то своё ("пет-проект") в свободное время, изучать какие-нибудь штуки. А вообще, пока нет выгорания - не стоит переживать )) Вот как выгоришь, там и деградация, и все прочие углеводы.
    Ответ написан
    Комментировать
  • Только PHP ли такой?

    Вариант 1 - шаблонизаторы плюс рендер на стороне сервера
    Вариант 2 - RESTful API на PHP а рендер на фронте по полученным данным
    Ответ написан
    Комментировать
  • Очень быстро лить в БД 1 млн. строк в секунду и настолько же быстро читать их. Как лучше осуществить?

    @Yury093
    Конечно может, вопрос в железе. И микроскопом можно забить гвоздь.
    Но на слова "хочу быстро вставлять и быстро читать потоком" так и хочется ответить "а зачем тебе БД?"

    Поэтому хотелось бы уточнить у автора: а вот кроме описанного "вставить миллион, считать миллион" - что предполагается делать с данными? Менять их построчно? Искать по какому-то ключу? это все надо? Если нет - я бы все же рекомендовал не использовать БД.

    Тут следует понимать что любая нормальная БД это [почти] всегда двойная запись на диск: вы пишите в таблицу И в лог базы данных. Именно поэтому файл или Kafka или иной MQ будет всегда быстрее.

    Ну а если БД все равно нужно - ну тогда BULK режимы вам в помощь. Обычно они используются для пакетной инициализирующей загрузки. В некоторых БД они на время своей работы могут отключать какие-то фичи или даже логирование в лог транзакций.
    ----------------------------
    Вообще по всем признакам в вашем случае идеальным будет вариант писать в MQ (RabbitMQ или Kafka или см аналоги), а уже из нее в БД. "Все так делают", по крайней мере в крупных компаниях это довольно типовое решение для подобных вашей задач. Причем БД в этой истории нужна только если вам потом нужно хранить и селектить. Если после первой операции данные вам более не нужны, либо нужен только бэкап, то БД не нужна - пишите в файл, пакуйте в zip (в энтерпрайзе - кидайте файлы в Hadoop в каком нибудь Parquet формате).
    Ответ написан
    1 комментарий
  • Как хранить и управлять большим количеством скриптов под разные задачи?

    karabanov
    @karabanov Куратор тега Linux
    Системный администратор
    Подойдёт.
    Ответ написан
    Комментировать
  • Как разместить сайт не по корневой ссылке?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Запрос обрабатывает веб-сервер, он и принимает решение что делать дальше — передать «в React» или «в WordPress». React, разумеется, запросы на /blog перехватывать не должен.
    Ответ написан
    2 комментария
  • Как в Postgres скрыть из списка базы данных, которые не доступны пользователю?

    @Xtensive
    Если не залезать в глубь системной БД postgres - никак.

    По умолчанию пользователь может видеть все другие экземпляры БД на кластере(в терминах Постгрес), даже если у него нет прав на подключение к другим БД, кроме своей.

    Быстрый поиск даёт такой и такой ответы на SO.

    Во втором варианте предлагают у простого пользователя отнять права на Select из Information Schema в системной БД. К сожалению такие действия могут привести к непредсказуемым последствиям.

    Как альтернативу - можно размещать данные пользователей в одной БД, но в разных схемах, таким образом проще управлять доступом, т.к. один пользователь будет видеть только свою схему и свои данные.
    Ответ написан
    Комментировать
  • Как узнать, существует ли email?

    vabka
    @vabka Куратор тега Веб-разработка
    Отправить на эту почту письмо с ссылкой для продолжения регистрации.

    Больше никак
    Ответ написан
    Комментировать
  • Как правильно сделать счётчик посещения страницы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть несколько подходов, каждый по своему хорош в той или иной ситуации.
    1) Забить на все эти куки/ип и считать каждый заход, что по сути нормально, я вполне могу зайти посмотреть какой-то материал 2-3 раза, а просто тупо рефрешить страничку редко кто будет. То есть это вполне нормальный способ без заморочек, тупо +1 на просмотр.

    2) Считать куку в отдельной таблице айди | кука | айди статьи , где кука будет уникальным полем, пишете запрос с он дупликэйт игнор, и потом тупо селект суммы по айди статьи. Это накладнее по ресурсам, как по месту, так и по процу, но считает чисто уников. Считать по айпи - глупо, ибо 80% траффика на сегодня - мобила, а при переподключениях к сети айпи будет меняться у одного пользователя, короче это нифига не уникально.

    3) Забить на подсчет своими силами, и ориентироваться на профессиональные счетчики а-ля яндекс гугл. Просто, качественно, весьма достоверно. Графики, аналитика и прочие плюшки бонусом.
    Ответ написан
    2 комментария
  • Как адаптировать темную тему сайта под тему устройства?

    wapster92
    @wapster92 Куратор тега JavaScript
    Наизобретают каких-то велосипедов без колес https://developer.mozilla.org/en-US/docs/Web/CSS/@... и есть отличная статья на хабре https://habr.com/ru/company/timeweb/blog/523478/
    Ответ написан
    Комментировать
  • Как правильно хранить в Sqlite числа с плавающей точкой что бы в дальнейшем удобно производить выборку по этим данным?

    @o5a
    Вы что-то намудрили при создании таблицы. У вас тип полей не real, а BLOB, это бинарный тип. Поэтому он и выдает такие значения. Возможно до этого экспериментировали и создали таблицу с типом BLOB, поэтому новая с типом REAL не пересоздалась. Грохните ее и создайте заново. Будет выдавать нормальные типы (real из sqlite должен выдавать как float)
    И заодно, по поводу структуры. Создавать 256 полей под 256 значений выглядит не очень, да и удобство сомнительное. Лучше было их записывать построчно, с нумерацией, т.е. таблица вида:
    (id_photo, h_num, h_value)
    тогда и запись будет не так монструозно выглядеть, и запрашивать нужное значение тоже удобно будет
    select * from photos where id_photo = ... and h_num = 1
    или
    select * from photos where h_num = 1 and h_value > 30
    Ответ написан
    1 комментарий
  • Как открыть pop-up окно с другой страницы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Главная страница в данном случае должна "следить" за событиями на сервере, и по определенному событию делать что-то, например показывать попап или играть музыку, не суть.
    Отслеживать можно несколькими способами:
    1) Открыть сокет соединение и ждать события в сокете, требуется поддержка/установка сокетов на сервере
    2) Через определенный интервал опрашивать сервер аяксом, единственное преимущество - не нужно ничего настраивать, будет работать с любыми дефолтно настроенными серверами.
    3) Настроить лонг полинг, но для этого тоже требуется настройка лонг полов на сервере.
    Ответ написан
    Комментировать
  • Как сделать вложенность в json через SQL запрос?

    @Akina
    Сетевой и системный админ, SQL-программист.
    DEMO

    В общем, вложенные подзапросы либо цепь CTE, каждый со своим уровнем агрегирования.
    Ответ написан
    1 комментарий
  • Возможно ли вообще вернуть результат в асинхронной функции?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    let newVar = await RenderCurrencies();
    Ответ написан
    3 комментария
  • Как посмотреть на сайт с телефона, если сайт на ноутбуке с url = 127.0.0.1?

    @bukass
    У тебя ноут и смартфон подключены к интернет через роутер, находятся в одной локальной сети. К примеру ноут получает адрес 192.168.1.100 - там и будет сайт.
    Ответ написан
    6 комментариев
  • Как обернуть контент внутри PHP?

    @qid00000000
    Мало что знаю, но информацию найду в гугле
    Если я правильно понял, то тебе нужно в div контейнеры их обернуть?

    Можешь сделать так, вместо '1 Answer'
    '<div>1 Answer</div>'
    Второе аналогично.
    Ответ написан
    Комментировать
  • Что означет ошибка, которую выводит SOAP-клиент?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Читаем wsdl. Находим нужный запрос.
    operation Tracking
    <operation name="Tracking">
      <input message="tns:TrackingRequestMessage"/>
      <output message="tns:TrackingResponseMessage"/>
    </operation>

    Значит запрос Tracking принимает на вход TrackingRequestMessage. Смотрим дальше
    message TrackingRequestMessage
    <message name="TrackingRequestMessage">
      <part name="parameters" element="tns:Tracking"/>
    </message>

    Единственное поле parameters с типом Tracking. Ищем этот тип.
    element Tracking
    <xs:element name="Tracking">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Language" type="xs:string" nillable="true"/>
          <xs:element name="Login" type="xs:string" nillable="true"/>
          <xs:element name="Password" type="xs:string" nillable="true"/>
          <xs:element name="Type" type="xs:string"/>
          <xs:element name="Documents" type="xs:string" nillable="true"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

    Получаем объект или ассоциативный массив с текстовыми полями Language, Login, Password, Type и Documents, причём все поля кроме Type могут иметь значение null.
    Значит запрос должен выглядеть как
    $result = $client->Tracking([
        'Language' => ?string,
        'Login' => ?string,
        'Password' => ?string,
        'Type' => string,
        'Documents' => ?string
    ]);

    То же самое можно получить и средствами PHP. После подключения к клиенту получим список методов.
    var_dump($client->__getFunctions());
    /* ...
    [92] => string(47) "TrackingResponse Tracking(Tracking $parameters)"
    ... */

    Значит метод Tracking принимает один параметр с типом Tracking и возвращает ответ типа TrackingResponse.
    Запросим типы.
    var_dump($client->__getTypes());
    Результат запроса
    /* ...
    [120] => string(103) "struct Tracking {
     string Language;
     string Login;
     string Password;
     string Type;
     string Documents;
    }"
    [121] => string(51) "struct TrackingResponse {
     ResultTracking return;
    }"
    [24] => string(81) "struct ResultTracking {
     TrackingInfo Items;
     boolean Error;
     string ErrorInfo;
    }"
    [28] => string(227) "struct TrackingInfo {
     boolean Error;
     string Type;
     string Number;
     string Info;
     string AgentURL;
     dateTime CreateDate;
     string State;
     dateTime DeliveryDate;
     string DeliveryInfo;
     TrackingEvent History;
     Waybill Waybills;
    }"
    [27] => string(83) "struct TrackingEvent {
     dateTime EventDate;
     string EventName;
     string EventInfo;
    }"
    [31] => string(546) "struct Waybill {
     string Type;
     string Number;
     dateTime CreateDate;
     string State;
     dateTime DeliveryDate;
     string Sender;
     string SenderGeography;
     string Recipient;
     string RecipientGeography;
     string RecipientAddress;
     dateTime SendDate;
     string Payer;
     int CargoQty;
     float NetWeight;
     float GrossWeight;
     string ConsolidationNumber;
     string InventoryWaybillNumber;
     string DeliveryMethod;
     float Volume;
     boolean RequirePaymentInCash;
     float PaymentInCash;
     string PaymentInCashCurrency;
     string RecipientOfficial;
     TrackingEvent History;
    }"
    ... */


    Единственное отличие от самостоятельного анализа wsdl - не указано, какие поля необязательные, какие можно заполнять null и являются ли какие-то поля массивами.
    Ответ написан
    3 комментария
  • Почему не могу подключиться к user PostgreSQL?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Возможно, пгадмин у вас ходит через сокет или по локалхосту, а бот - по нормальному IP-адресу, при этом в pg_hba нет соответствующего правила?
    Ответ написан
    2 комментария