Задать вопрос
  • Можно ли с локального сервера отправить письмо под любым именем?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Можно.
    Но в заголовке все равно будет написано откуда на самом деле пришло письмо. Множество спамеров об этом не догадывается и продолжает слать свой треш, над которым я иногда дико ржу.

    Можно доработать сервер, чтобы он подставлял произвольные заголовки, но слава Богу, все эти дебилы, пишушие письма "из налоговой", "из суда" и прочий собачий бред - уже приучили не верить ничему что там написано.
    Ответ написан
    1 комментарий
  • Вопрос с собеседования: Есть ли в PHP нативная возможность инициализировать переменную как в функции preg_match()?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Точно так же и делается

    function test(&$param)
    {
        $param = 123;
    }
    
    test($parameter);
    
    echo $parameter;
    Ответ написан
    Комментировать
  • Почему может создаваться большое количество файлов сессий на сервере Ubuntu?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сессии сами не создаются, их создает РНР при обращении к сайту.
    Сколько обращений - столько сессий.

    Соответственно, смотреть надо по двум направлениям
    1. проверить, не долбит ли кто-то запросами, и заблокировать или ограничить, например использовать Rate Limit у NGINX
    2. файловая система - самое убогое хранилище для сессий, и используется по умолчанию только потому, что для всех других нужно указывать параметры подключения. Соответственно, вместо файлов использовать базу данных.

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

    1. Из коробки компилируется в единственный, сравнительно компактный, бинарь без зависимостей от рантайма и окружения.
    (и без подводных, в отличие от full aot и assembly trimming)

    2. Сможешь рассматривать вакансии, где требуется Golang, если собираешься искать работу.
    3. Сможешь нанимать go-шников со всеми вытекающими, если будешь искать разрабов в свой проект.
    4. Если твой проект должен будет активно взаимодействовать, например, с kubernetes и прочими devops-штуками, то Go может быть чуть удобнее, тк практически все эти инструменты написаны на Go и для работы с ними имеются готовые библиотеки, которые, вероятно, будут лучше, чем их альтернативы для .NET.
    Ответ написан
    3 комментария
  • Есть ли на PHP сокращенный перебор массива?

    foreach($array as $item) {
    // тут ваш код
    }

    https://www.php.net/manual/ru/control-structures.f...
    Ответ написан
    Комментировать
  • Как работать с FFMPEG без ссылок на файлы?

    kawabanga
    @kawabanga
    Если условие что в 2 секунды любое аудио декодируется и вам нужно лишь правильно отправлять все через ajax, то formdata js в помощь

    ~JS
    var formData = new FormData();
    formData.append('file', fileInput.files[0]);
    
    $.ajax({
      url: 'upload.php',
      method: 'POST',
      data: formData,
      contentType: false,
      processData: false,
      success: function(response) {
        console.log('File uploaded successfully');
      },
      error: function(jqXHR, textStatus, errorMessage) {
        console.log('File upload failed: ' + errorMessage);
      }
    });


    ~PHP
    require_once '/public_html/vendor/autoload.php'; 
    $ffmpeg = FFMpeg\FFMpeg::create();
    $mp3Format = new FFMpeg\Format\Audio\Mp3(); 
    $videoFolderPath='/public_html';
    
    if(!isset($_FILES['file'])) {
      return 'no file';
    }
    
    $tempName = $_FILES['file']['tmp_name'];
    
    
    $audioObj = $ffmpeg->open($tempName);    
    $audioObj->save($mp3Format, $videoFolderPath.'/myfile.mp3');
    Ответ написан
    1 комментарий
  • Какой дистрибутив Linux пойдёт на мой ноутбук для веб разработки?

    hint000
    @hint000
    у админа три руки
    Любой, с которым вы лучше знакомы. Или тот, который стоит у знакомого вам гуру.
    Прямо скажем, ноутбук слаб для разработки, так что просто не запускайте одновременно много программ.
    Ответ написан
    Комментировать
  • Как с помощью PHP скачивать файлы с подобных ссылок?

    Stalker_RED
    @Stalker_RED
    Потому что по замыслу создателей этого сайта у вас сперва должна открыться страница которая установит куку, затем страница перезагрузится, и уже с кукой начнется скачивание.
    Скачайте через браузер, скопируйте куку, добавьте ее в контекст.
    Возможно придется еще и время в куке правильное выставлять, если они его проверяют.

    'http'=> [
        'header'=>"Cookie: beget=begetok; foo=bar;"
      ]
    Ответ написан
    Комментировать
  • Как сделать уведомление о завершении работы скрипта?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Этот вопрос не имеет отношения к РНР.
    А только к базовым навыкам работы с операционной системой.
    В простейшем случае можно написать бат файл, в котором под своей командой пишете любую другую, от проигрывания звукового файла до запуска любой программы. Которая выполнится по завершении первой
    Можно то же самое написать в одну строчку php my.php & echo ^G
    После амперсанда опять же, пишется все что угодно.

    писать set_time_limit(0) в консольоных скриптах кстати не нужно. Там лимита нет по умолчанию
    Ответ написан
    Комментировать
  • Как сформировать ldap_search с кириллицей на php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Включите ldapV3
    ldap_set_option(LDAP_OPT_PROTOCOL_VERSION, 3);
    Тогда должен нормально работать поиск по UTF-8-строкам и фильтр будет
    (&(&(objectClass=user)(objectCategory=PERSON))(|(memberof=CN=Access-VPN-BitrixVM,OU=VPN,OU=Access,OU=Groups,OU=CO,DC=company,DC=local)(memberof=CN=Отдел клиентского сервиса \(Call-центр\),OU=Depart,OU=Groups,OU=CO,DC=company,DC=local)))
    Ответ написан
    1 комментарий
  • Как использовать структуры данных на практике?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Мысль совершенно правильная.

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

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

    Поэтому я бы рекомендовал их все равно изучать, но в качестве не основного, а факультативного материала.
    Ответ написан
    Комментировать
  • Как запустить composer с определенной версией php?

    @OkOl
    /opt/php/7.3/bin/php composer.phar .......
    Ответ написан
    Комментировать
  • Как разделить строку на уровни вложенности в PHP?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Даже если это можно сделать через регулярки (мне так не кажется), этот код не будет поддерживаемым и читаемым.

    Напишите простой конечный автомат, который будет разбирать строку посимвольно в многоуровневый массив, а потом к элементам этого массива добавляйте свой процент, который будет высчитываться исходя из количества соседей. Для сборки финальной строки понадобится рекурсия, но это преодолимое препятствие.
    Ответ написан
    2 комментария
  • Не работает бд в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если вы считаете, что данные не заносятся в БД, то на это может быть две причины
    1. Ошибка при занесении.
    2. Все заносится, но вы просто не там смотрите.

    Чтобы исключить первый пункт, надо убедиться в том, что вы можете видеть все ошибки. Для этого на локальном сервере надо включить отображение ошибок на экран. Плюс настроить РНР, чтобы он не скрывал никакие ошибки
    <?php
    # Ошибки
    # Для локального сервера
    ini_set('display_errors', 1);
    # Всегда
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    # дальше пишем сам код
    $login = trim(filter_input(INPUT_POST, 'login'));
    $password = filter_input(INPUT_POST, 'password');
    
    if (mb_strlen($login) < 4 || mb_strlen($login) > 15) {
      exit("Логин не должен быть короче 4 символов и больше 15");
    } else if (mb_strlen($password) < 8 || mb_strlen($password) > 100) {
      exit("Пароль не может быть короче 8 символов и больше 100");
    }
    $password = password_hash($password, PASSWORD_DEFAULT);
    
    $mysql = new mysqli('176.107.160.36', 'limbo', 'Fear333M', 'vanilla');
    
    $stmt = $mysql->prepare("INSERT INTO `sait` (`login`, `password`) VALUES (?, ?)");
    $stmt->bind_param("ss", $login, $password);
    $stmt->execute();

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

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

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    При вызове из браузера скрипт работает до тех пор, пока есть соединение браузера с HTTP-сервером, который скрипт и запустил. Но браузеры не удерживают HTTP-соединение вечно, оно не для этого придумано, поэтому скрипт и убивается.

    SSH - это уже консоль, а её ни кто не убивает. Поэтому и скрипт работает без ограничений по времени.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как вариант - handlingUnits[PackageType][].
    Тогда индексы в PHP проставятся автоматически.
    Ответ написан
    1 комментарий
  • Почему не создаётся php8.1-fpm.sock?

    Kuzm1ch88
    @Kuzm1ch88
    /etc/php-fpm.d/www.conf
    listen = 127.0.0.1:9000
    nginx конфиг
    fastcgi_pass 127.0.0.1:9000;

    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    Ответ написан
    8 комментариев
  • Почему php требует ssl сертификат?

    jone21
    @jone21
    Кратко не получится
    $arrContextOptions=array(
        "ssl"=>array(
            "verify_peer"=>false,
            "verify_peer_name"=>false,
        ),
    );  
    $sw=file_get_contents(ЛИНК, false, stream_context_create($arrContextOptions));
    Ответ написан
    2 комментария
  • Почему imagemagick может менять имя выходного файла?

    demon416nds
    @demon416nds Автор вопроса
    Разработчик на чем попало
    Причина осталась неизвестной, но решением оказалось пересоздание tprocessutf8 после каждого цикла обработки
    cmd:=tprocessutf8.Create(nil);
    cmd.Executable:=mydir+'\magick.exe';
    cmd.Options := cmd.Options + [poWaitOnExit] + [poNoConsole];
    cmd.Parameters.Add('"'+imgname+'" -crop '+inttostr(cs)+'x'+inttostr(cs)+'+'+inttostr(cx)+'+'+inttostr(cy)+' "'+inttostr(t)+'temp1.jpg"');
    cmd.Execute;      
    /*тут еще несколько операций над картинкой*/
    cmd.Free;

    upd
    похоже причина была в необнулении переменных но проверять уже не буду
    Ответ написан
    Комментировать