Задать вопрос
  • Как получить значение из многомерного массива php?

    @makboriska Автор вопроса
    foreach ($arrays as $array) {
    		echo '<pre>';
    		echo $array['id'];
    	}
    Ответ написан
    3 комментария
  • Какой самый быстрый способ проверить доступность сайтов?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Задача какая-то то ли выдуманная из головы, либо впезапно энтерпрайзного порядка. Возникают закономерные вопросы - откуда взялись эти 250 миллионов? Зачем проверять их все? Зачем делать это ежедневно?

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

    Короткий ответ: "готовый софт есть - любой, способный совершить HTTP-запрос, получив код ответа".

    P.S. - 300-ые коды ответа не свидетельствуют о недоступности домена, имхо, их тоже нужно учитывать.
    Ответ написан
    4 комментария
  • Как обработать запрос с формы на сервере?

    s2d1ent
    @s2d1ent Автор вопроса
    Специалист технической поддержки
    Использование CGI с C# и передача POST
    class Program
        {
            static void Main(string[] args)
            {
                string link = @"D:\csharp_server\program\program\bin\Debug\net5.0\includes\php\win86\php-cgi.exe", //ссылка на CGI
                    text = @"D:\csharp_server\program\program\bin\Debug\net5.0\www\UPPDD\php\auth.php"; // ссылка на файл где идет использование POST/GET
                Console.WriteLine(UseInterpreter(link, text));// вывод в консоль для просмотра
                Console.ReadKey();
            }
            static string UseInterpreter(string php, string file)
            {
                ProcessStartInfo info = new ProcessStartInfo(php);
                string req = "login=admin&pass=secretpass&but=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"; // параметры формы
                info.UseShellExecute = false;
                info.ErrorDialog = false;
                info.RedirectStandardError = true;
                info.RedirectStandardInput = true;
                info.RedirectStandardOutput = true;
                info.CreateNoWindow = true;
                // переменные среды
                info.EnvironmentVariables.Add("REQUEST_METHOD", "POST");
                info.EnvironmentVariables.Add("HTTP_CONNECTION", $"keep-alive");
                info.EnvironmentVariables.Add("REDIRECT_STATUS", "false");
                info.EnvironmentVariables.Add("GETAWAY_INTERFACE", "CGI");
                info.EnvironmentVariables.Add("CONTENT_TYPE", "application/x-www-form-urlencoded");
                info.EnvironmentVariables.Add("CONTENT_LENGTH", Encoding.UTF8.GetBytes(req).Length.ToString());
                info.EnvironmentVariables.Add("HTTP_ACCEPT", "*.*");
                info.EnvironmentVariables.Add("SCRIPT_FILENAME", file);
                // передеча информации в Process и старт процесса
                Process p = new Process();
                p.StartInfo = info;
                bool pStarted = p.Start();
    
                StreamWriter input = p.StandardInput; // стандартынй поток ввода
                input.WriteLine(req); // ввод
                StreamReader output = p.StandardOutput; // поток вывода
                StreamReader error = p.StandardError; // поток вывода ошибки 
                // перекодировка, при наличии кириллицы php выводит в кодировке cp866, тут мы переводим из cp866 в utf8
                byte[] cp866_byte = output.CurrentEncoding.GetBytes(output.ReadToEnd());
                string cp866_byte_to_utf8 = Encoding.UTF8.GetString(cp866_byte);
    
                return cp866_byte_to_utf8;
            }
        }
    Ответ написан
    2 комментария
  • Почему добавляются новые записи с использованием ON DUPLICATE KEY?

    Adamos
    @Adamos
    Простите, а что за хрень вы делаете в запросе?
    "Добавить в базу запись с ticker = $ticker и другими полями, а если запись с таким значением ticker = $ticker уже есть, то... изменить в ней значение ticker на, внезапно, все тот же $ticker"?
    Вы не путаете с INSERT IGNORE?
    Ответ написан
    Комментировать
  • При sql запросе писать с кавычками или без?

    sptm
    @sptm
    software developer / DevOps engineer
    Безопаснее и правильнее использовать PDO или MySQLi вместо устаревших mysql_ - функций.
    Ну, и с обоими вариантами нужно использовать подготовленные запросы вместо того, чтобы писать их вручную.

    Получится что-то вроде этого:
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $charset = 'utf8';
    
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, $user, $pass, $opt)
    
    $stmt = $pdo->prepare("SELECT last_name FROM first_table WHERE name=?");
    $stmt->execute([$name]);
    $last_name = $stmt->fetchColumn();
    Ответ написан
    4 комментария
  • В чем идея и как работают шаблоны?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Идея шаблонов – держать HTML разметку отдельно и удобно.

    Когда сайт большой, страниц много, а вы впервые видите код, чтобы можно было быстро разобраться, где что лежит и почему.

    Простейший пример Twig мало чем отличается от обычного PHP:
    Шаблон hello.html.twig:
    Привет, {{ name }}!,
    и вывод в него типа
    echo $twig->render('hello.html.twig', ['name' => 'Хабр']);
    передаются имя темплейта и данные, которые там нужно подставить.
    В шаблоне обычно никаких вычислений, максимум простые циклы или условия.

    Шаблоны могут наследовать друг от друга. Например, у сайта один главный темплейт от которого наследют шаблоны страниц - в них только содержание. И далее шаблоны для разделов, секций, фрагментов.
    Ответ написан
    Комментировать
  • Сложно ли подделать IP апдрес при запросе $_SERVER['REMOTE_ADDR']?

    Aetae
    @Aetae
    Тлен
    Во-первых: ip для этого не стоит использовать вообще, это вещь перементивая.
    Во-вторых: в теории REMOTE_ADDR не подделать, но то в теории, потому что всякая кака на твоей стороне любит его подменять для удобства. Например нередко можно встретить глубоко в чужом коде подобную дыру:
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $xffaddrs = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']); 
    $_SERVER['REMOTE_ADDR'] = $xffaddrs[0]; 
    }
    Ответ написан
    8 комментариев
  • Как реализовать в MySQL топики форума, которые участвуют сразу в нескольких разделах?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне почему-то кажется, что 'поиск Fulltext' должен подойти для такой задачи,
    Вам кажется. Кроме того что фуллтекст вообще не для этого, он еще и работать будет относительно медленно, так как вариативность значений будет низкая. Про "удобство" работы со строкой вместо нормального индекса вообще молчу.

    Нужно, чтобы можно было быстро находить все темы (топики) для одного заданного раздела (искать тему, которая относится сразу к двум и более разделам не нужно).
    м2м, это надежно и быстро, достаточно знать индекс раздела.

    Как такое реализовать максимально просто?
    Совет: Не гонитесь за кажущейся простотой, вы хапнете гораздо больше гемора от неправильной архитектуры, нежели от еще 15 минут, потраченных на создание таблицы справочника, пивот таблицы и написания 2 джоинов в запросе. Важнее сделать правильно, а не проще.
    Ответ написан
    3 комментария
  • Какие нюансы работы самозанятым?

    @mkone112
    Начинающий питонист.
    Если 80% предложений не включает работу по тк - возможно ты делаешь что-то не так. Судя по твоим вопросам - ты мечешься из стороны в сторону с нулевым выхлопом. То php, то node.js, потом вордпресс, потом vue, сисадмин, девопс. Просто выбери уже направление, освой его и получай нормальные предложения без вот этого вот.
    Ответ написан
    3 комментария
  • Не получается динамически создать объект через $name = 'ClassName' и потом new $name() - что делать?

    @romicohen Автор вопроса
    Системный Архитектор
    Решение таки нашел:

    $name = 'My\\Name\\Space\\'.'ClassName';
    new $name();


    так работает.

    Но все равно, не очень понятно, почему

    new ClassName();

    без полного имени работает, а это - не работает.

    это что-то связанное с очередностью интерпретации да? кто-нибудь если понимает в подобном - расскажите в двух словах пожалуйста :)
    Ответ написан
    3 комментария
  • Как в foreach вывести от дешёвых к дорогим?

    Stalker_RED
    @Stalker_RED
    Если ваши $products были перед этим выбраны из БД, то проще всего добавить в запрос order by price desc и они сразу будут отсортированы.
    Ответ написан
    Комментировать
  • Как в foreach вывести от дешёвых к дорогим?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Предварительно отсортировать через usort.
    Ответ написан
    Комментировать
  • Почему number_format возвращает string?

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

    Float отдельно, удобочитаемый вид отдельно.
    Ответ написан
    Комментировать
  • Как сделать бэкап базы данных mysql с помощью php?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Для следует указать путь к исполняемому файлу:
    $path = 'C:\path\to\mysqldump\';
    exec("{$path}mysqldump --user={$user} --password={$pass} --host={$host} {$database} --result-file={$dir} 2>&1", $output);
    Ответ написан
    Комментировать
  • Как можно ускорить работу Exception?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    на расходы конкретно на исключения для 15 000 вызовов (на каждую строку по 1 исключению) будут около 0.01 секунды (сотая секунды крч) для моего локального компа (много, но и данных много)
    Пруф

    618e769ee759d433078044.png


    $error = $this->handle($json);
    if ($error === '') {
    // логируем что все ок
    } else {
    // логируем ошибку
    }

    Тут заменено не только это, а заменено что-то внутри в handle(), тк не летит исключение

    возможно в описании задачи вы не указали, что валидируете возможно через что-то симфовое, не отключив finger cross, который собирает весь стек-трейс или еще что-то... кажется, не хватает контекста для понимания проблемы

    в 15 тыс новых объектов проблемы может не быть. Такие задержки по времени выглядят как проблема на уровне логирования исключений, тк I/O операции над файлом долгие, а сбор трейса исключений и его запись — долгие потенциально.
    Уйдя от исключений вы возможно ушли и от логирования исключений.
    Ответ написан
  • Что такое MVC и как его использовать?

    @matios
    Technical Team Lead
    Советую почитать данную статью на хабре Реализация MVC паттерна на примере создания сайта-.... Там очень хорошо описано с примерами кода. Но следует понимать, что это совсем сырая версия которая описывает сами принципы. Современные фреймворки куда сложнее и универсальнее.
    Ответ написан
    Комментировать
  • Как улучшить код?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Для начала можно удалить весь DocBlock. Во-первых, он не добавляет ровным счётом никакой информации, а во-вторых, ещё и не все параметры содержит.

    Название returnFullOrderInfo можно переименовать в makeFullOrderInfoResponse - в названиях функций слово return не несёт ценности.

    Метод fullInfo тоже можно переименовать в (to|make|get)FullInfo для того, чтобы по названию было понятно, что метод делает.

    Метод responseSuccess тоже криво назван.

    Почему у параметра $warning не указан тип?

    Если $warning связан непосредственно с заказом, то его имеет смысл передавать в качестве аргумента в fullInfo, чтобы инкапсулировать и не менять объект снаружи. Если же не связан, то формат ответа лучше поменять на ['data' => $orderInfo, 'warning' => $warning].
    Ответ написан
    Комментировать