Ответы пользователя по тегу PHP
  • Как подключить файлы, лежащий на другом сервере?

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

    Но, насколько я понимаю, у Вас случай несколько проще и не требует "тяжелой артилерии". В этом случае, может быть актуально использовать программы типа sshfs или ftpfs и прочие подобные штуки.

    Почитать можно например тут или тут.

    Если простой вариант Вас не устроит - можете попробовать использовать такие сервисы как например GitHub или BitBucket, там есть такая штука как "Веб-хуки", именно она как раз таки рассылает уведомления о том, что исходный код был изменен, можете попробовать написать простенький скрипт, например на том же PHP, который бы стягивал изменения из удалённого репозитоиря и проводил прочие манипуляции подобного толка.
    Ответ написан
  • Как добавить перенос в PHP при записи в базу данных?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Я думаю что как-то примерно так: $summ = $param1 .= "\r\n" .= $param2
    Ответ написан
  • Нужно ли экранировать get-запросы в input?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Не совсем понятно, что Вы имеете в виду под фразой "вставляю GET-запрос"... варианта у меня два на эту тему: либо результата GET-запроса, либо какие-то доп. параметры для GET-запроса. В обоих случаях, если речь идёт о содержимом какого-то поля типа INPUT (или TEXTAREA, что равносильно по сути) - оборачивать его в htmlspecialshars - лично я никакой необходимости не вижу. При отправке запроса - форма сама по себе прекрасно кодируется, без всяких "оборотов", содержимое поле исходно так же обычно не требует никаких дополнительных "оборотов", не зависимо от того, собираетесь ли Вы сохранять это в БД или нет.

    P.S. Вообще, говоря про htmlspecialchars() и БД, логически "оборачивание" делается перед выводом данных на сайте, а не перед вставкой. Делается это например для того, что бы исключить возможность недобросовестным пользователям, которые оставляют скажем комментарии - вставлять в эти комментарии например JavaScript-код и прочие подобные факторы.
    Ответ написан
  • Как выполнить цикл внутри цикла 1 раз?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Как выполнить цикл внутри цикла 1 раз?

    Примерно как-то так:
    $flag = true;
    
    foreach($var1 as $v1) {
        if($flag) {
            foreach($var2 as $v2) { 
                 //2-й цикл
            }
            
            $flag = false;
        }
    }
    Ответ написан
  • Зачем добавлять классы в контейнер в Laravel?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Почему лучше добавлять классы в контейнер и создавать их из контейнера а не через new?
    Откровенно говоря, вопрос звучит аки "почему молоток лучше чем пассатижи?".

    В контейнер кладут классы, прежде всего для того, что бы иметь возможность управления зависимостями. Иными словами, что бы иметь возможность подменить класс А на класс Б, при первой необходимости не затрагивая основные структуры программы, а так же для того, что бы система знала, где искать какой-либо класс, когда его запрашивают. И сделано это было отнюдь не для удобства реализации Синглтонов и т.п. Иными словами, контейнер - это часть реализации DI-механизмов, а не "синтаксический сахар".

    А все прочие прелести, возникшие в результате такого подхода, например связка модели с параметром роута и т.п. - это уже побочный эффект подхода, а не его основная задача. При этом, если Вам "просто нужен какой-то класс" - никто не запрещает создавать его через new или иным другим способом.

    P.S. Я понимаю, что объяснение слегка примитивное и не совсем точно отражает суть, но другого объяснения, которое бы не переросло в формат/масштаб на учной статьи, на данный момент у меня не нашлось.
    Ответ написан
  • PHP: как сделать так, чтобы аргумент мог принять только одно из определённых значений?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Мне почему-то кажется, что должно существовать какое-то более грамотное решение.

    Возможно, вот такое:
    if(in_array($arg, ['foo', 'bar', 'baz'])) {
        // ...
    }
    Ответ написан
  • Какие есть хорошие библиотеки для считывания текста?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Судя по ~2.3млн. загрузок и ~4.4к звёзд - вот хорошая библиотека для чтения офисных форматов и PDF. А ещё есть вот это. И ещё есть поиск на packagist.
    Ответ написан
  • Что почитать о продвинутой разработке web приложений?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    1. Приложение должно работать 24/7 с возможностью остановить и запустить процесс заново.
    Приложения на PHP, по умолчанию работают "24/7", но если Вы хотите, что бы процесс PHP постоянно висел в памяти - лучше обратить внимание на другой язык/стек, например C# + .NET или GO, они работают по принципу "процесс постоянно сидит в памяти", если для Вас это принципиально, т.к. у PHP несколько другая архитектура и, запустить ПХП-скрипт в циклическом режиме хоть и ничего не мешает, но я бы так делать не стал (по принципу "колоть орехи монитором - тоже ничего не мешает").

    2. Связь фронтенда и бэкэнда реализована с помощью jQuery запросов к PHP - что мне кажется далеко не самым оптимальным вариантом.
    Клиент-серверный обмен данными на уровне REST-API - вполне себе оптимален и достаточно часто применяется, если Вы об этом...

    Не хочу учить по книжкам, сразу пытаюсь решать реальные задачи. Если то в языке не пойму - смогу загуглить.
    Это Вы зря... Для начала, я бы всё-таки рекомендовал Вам книжку за авторством Котерова "PHP 7". Отличная книга "начального уровня". Если осилите её целиком - это будет неплохой старт.

    P.S.
    Знаю/понимаю фронтенд. В бэкэнде (на PHP) могу решить 90% задач, которые должно делать приложение.
    Мне нравится Ваш оптимизм :)))

    Эпилог:
    jQuery постепенно уходит в историю, если хотите "знать фронтэд", на сегодняшний день - нужно знать хотя бы 1 из популярных ЖС-фреймворков, сейчас очень активно применяются (примерно в равной степени) VueJS и ReactJS, рекомендую Вам изучить хотя бы один из них, помимо прочего...
    Ответ написан
  • Как бесконечно повторить n-итерацию цикла?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Альтернативный вариант:

    <?php
    
    $x = 10;
    for($i = 0; $i < 100; $i++) {    
        if($x > 0) {
            $i--;
            $x--;
            echo "X: {$x}<br/>";
            // continue;
        }
    
        echo "I: {$i}<br/>";
    }


    Формально, такой вариант будет повторять именно ту итерацию. Но вариант с while'ом (указанный выше) мне нравится больше.
    Ответ написан
  • Как получить данные по api?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    В том смысле, что может они в какой то глобальный массив записываются, и я могу попробовать их оттуда получить?
    Не исключено. В первую очередь следует обратить внимание на массивы $_GET и $_POST.
    Ответ написан
  • Как подписать запрос SSL сертификатом с удаленного ресурса?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Есть подозрение, что параметр/аргумент cert который вы указываете - должен принимать путь до сертификата, а Вы передаёте ему содержимое сертификата, а не путь. Решений тут на вскидку несколько:
    1. Найдите HTTP-клиент (или параметр у текущего клиента) который позволяет указывать содержимое сертификата
    2. Скачивайте сертификат на сервер, указывайте путь до него и удаляйте, после выполнения запроса сертификат (если в этом есть необходимость)
    3. Аналогичным образом Вы можете сохранить его в БД, доставать оттуда и сохранять временно при каждом запросе
    4. Можете попробовать переписать сам клиент таким образом, что бы он принимал на вход не путь, а сразу содержимое сертификата (я думаю, это будет не очень сложно)
    Ответ написан
  • Как менять аватарку на своем сайте?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    При обновлении странички, проблема не пропадает.
    Судя по описанию, это связано с тем, что картинка кэшируется в браузере. Решить это можно например так: <img src="image1.png?<?php echo time(); ?>" /> Это пожалуй самый просто вариант (менять путь, что бы он не кэшировался).

    Кэш в браузере так же обычно сбрасывается с помощью нажатия пару раз на Ctrl+R или Ctrl+F5.

    Ещё можно в на http-сервере настроить заголовок, что бы конкретно эта картинка не кэшировалась... Ещё картинку можно отдавать с помощью PHP и скриптом контроллировать заголовки отвечающие за кэширование...
    Ответ написан
  • Почему по крону php скрипт не все данные исполняет?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Наиболее вероятных совета тут два:
    1. Парсер, как и любая другая программа подобного толка должен вести лог, из него обычно и узнают про причины и источники ошибок.
    2. Убедитесь, что у парсера достаточно прав для записи всех файлов во всех местах, куда он их пишет. Для проверки можете добавить эту же задачу в крон под root'ом (или иным образом заставьте запускаться Вашу программу от имени администратора). Если ошибки исчезнут - значит проблема была в правах.
    Ответ написан
  • Обращать ли внимание на время генерации?

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

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

    Сайт локальный, ось deepin (debian unstable, apache2, mysql 5.7, php7.2).
    Это нормально?
    Что именно? То, что сайт локальный? Думаю да. Насколько я понимаю, в данный момент сайтом пользуетесь исключительно Вы? В этом случае, только Вы можете решить, нормальные ли эти цифры для Вас или они вызывают у Вас какой-то дискомфорт при взаимодействии с сайтом.

    А то там ещё запросы будут же и для видов и типа автоапдейтов.
    Не понимаю, к чему это... честное слово не понимаю :)
    Ответ написан
  • Разворачивают ли у вас разработчики сервисы локально?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Кто как справляется с этой проблемой?


    Мы легко решили для себя эту проблему с помощью двух инструментов:
    1. Часть сервисов работает на тестовом сервере, доступном локально
    2. Docker

    P.S. Разворачивать и обновлять проекты в докере - дело если не нескольких секунд, то минут, не более того. При этом за всю настройку и прочую богадельню связанную с настройками ОС для сервиса, софта и пр. - отвечают авторы самого сервиса, разработчику достаточно скачать/обновить несколько файлов описывающих контейнер(ы) и выполнить 1-2 команды, дальше всё соберётся и поднимется автоматически.
    Ответ написан
  • По фэншую ли синтаксис?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Так писать по фэншую код или есть запись объектов в массив ровнее?
    У Вас тут не столько запись чего-то в массив, сколько предварительное присвоение значения переменной, с уже последующем добавлением оной в массив. Оно работать конечно будет, но выглядит несколько странно, на мой взгляд. Подобные принципы обычно используются в условных операторах или циклах (if/while), для последующей обработки переменной (результата).

    Если Вам нужно просто собрать массив, обычно пишут так:
    $arr = [
        new Quadrate(6),
        new Cube(5),
        new Rectangle (2),
        ... ,
    ];


    P.S. Так же этот код можно написать в строчку, если он не выходит за границу (80 или 120 символов, в IDE и редакторах эта линия почти всегда есть по умолчанию) или если просто если Вам очень хочется написать этот код в одну строку.
    Ответ написан
  • Как создать поддомен с помощью php?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    У меня cpanel стоит если что.
    Открываете документацию на cPanel... там есть примеры. В случае, если cPanel стоит не у Вас, а у хостера - оптимальнее всего обратиться в службу поддержки хостера, для получения доступа к этим функциям панели или к тому, что эту самую cPanel устанавливал.

    P.S. В случае, если cPanel стоит у хостера, вероятность того, что Вам выдадут к ней доступы такого уровня - стремится к нулю.
    Ответ написан
  • Как получить текст между скобок на php?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Попробуйте такой вариант.
    Ответ написан
  • Каким образом правильно управлять CRON через PHP?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Вопрос: каким образом правильно управлять CRON через PHP? Точнее изменять время запуска.
    Если отвечать на Ваш вопрос буквально - то: просто находите файл с заданиями (который вы до этого редактировали) и редактируете его с помощью PHP (надеюсь, примеры того на ПХП редактировать текстовые файлы Вам не требуются?), предварительно установив на редактируемый файл права, позволяющие его редактировать из скрипта... Там есть ещё ряд нюансов, но, это довольно плохая в целом идея, по ряду причин. Нормально она бы выглядела только в том случае, если бы Вы писали какой-нибудь крон-менеджер для панели управления, например.

    Вам же лучше будет использовать один из тех вариантов, что Вам предлагали выше:
    1. Запускать скрипт каждые N-времени, а в самом скрипте уже проверять, нужно ли что-то выполнить или нет
    2. Использовать сервер очередей, например, Beanstalkd, по мере необхоидмости добавляя туда нужны задачи, которые будут обрабатываться (выполняться) другим скриптом, обслуживающему очередь (этот скрипт соотв. будет запущен на постоянно основе)
    3. Если же же Вам нужно разово выполнять какую-то задачу (команду) в точку времени X (например, удалить файл через 5 часов после того как он был загружен) - не забывайте про планировщик at, добавлять туда задания можно с помощью shell_exec (при условии достаточных прав для этого)
    Ответ написан
  • Как в реальном времени отследить время изменения файла на php?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Как через php отследить то что файл был изменен/обновлен?
    С помощью функции filemtime

    Как-то примерно так будет выглядеть код (условно, возможны ошибки):

    $mtime = filemtime('file.name');
    
    
    while(true) {
        $mtime2 = filemtime('file.name');
        if($mtime2 != $mtime) {
            $mtime = $mtime2;
            // Отправить письмо
        }
    }


    P.S. А вообще для этих целей не PHP использовать надо, а встроенные механизмы ОС, на подобии таких...
    Ответ написан