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

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Такой код, где много if, else тестировать очень сложно и это сложно читаемо. Вынесите весь код логики в отдельные классы, с методами и тестируйте их. Например класс может быть класс QuestionPoint . В нем методы
    public function isAnswerExists($answers){}

    и тому подобные..

    Получится такой код, если совсем примитивно

    $question = 1;
    foreach ($questions as $key => $question) {
    $questionPoint = new  QuestionPoint($question);
    $questionPoint->isAnswerExists($question, $answer)
    }


    Поэтому делайте код по ООП или DDD и тогда будет вам счастье. В вашем случае будет гемор. Особенно если код в контроллере. Тестировать его будет крайне сложно и долго. Такие тесты запускать никому не захочется. Вам придется в тестах поднимать приложение и базу данных. Хотя в вашем случае это вообще лишнее!

    В общем выносите код из контроллера и избавляйтесь от лапши. Создавайте объекты.
    Ответ написан
    2 комментария
  • Где сейчас тусуются серьезные PHP программисты?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Завсит от цели, для чего это спрашивается.

    Если чтобы поприставать с нубскими вопросами - то нигде.
    Если чтобы почитать умных мыслей - РНР дайджест на Хабре прекрасно суммирует все, что было написано за две недели. У меня например никогда не хватает времени, чтобы прочесть всё. Куда больше-то - я уж и не знаю.
    Если чтобы поучаствовать в серьезном прокете - на гитхабе, выбирай любой.
    Если чтобы послушать интересные доклады и пообщаться вживую - то конференции.
    Если интересует внутренне устройство языка - то php internals.
    Если интересует, что пишут пхп селебрити про что угодно, кроме программирования - то твиттер (Расмус показывает картинки из аэропортов и роботов, которых собирает его сын, Сара постит котиков - и так далее).

    Где точно не тусуются:
    Тостер и всякие подобные ресурсы типа стаковерфлоя.
    Ну то есть специалиста можно найти, если поискать, но концентрация будет гомеопатическая, если учитывать количество восторженных щеночков, которые увидели язык вчера, и спешат срочно поделиться уже накопленным багажом знаний.
    Чаты. Телеграм, дискорд - вот это вот все.
    Самая адовая трата времени, которая в принципе бывает в жизни.
    Опять же, люди пишут о чем угодно, кроме программирования, и ради пары полезных строчек надо убить весь день.
    Ответ написан
    4 комментария
  • Как заменить разные слова на ссылки с помощью preg_replace?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Смотрите в код и думайте, что ваш код выполняет на самом деле. Смотрите отладчиком содержимое переменных либо банально распечатайте их.

    1) Вы сначала делаете match (не знаю зачем, ну да ладно, не о том вопрос).
    2) Затем обходите результаты.
    3) Затем игнорируете то что вы нашли и по всё той же регулярке что в пункте 1 заменяете всё в строке на певрое совпадение.

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

    Через preg_replace это делать банально проще и удобнее, чем match + цикл по нему. А есть ещё preg_replace_callback если просто replace не хватает.
    Ответ написан
    1 комментарий
  • Какой PHP устанавливать себе локально для изучения? PHP-fpm или PHP?

    @neznae4ko
    Программирую, разрабатываю, печатаю, паяю и создаю
    Для изучения разницы нет. Для изучения подойдет классическая связка LAMP
    Ответ написан
    Комментировать
  • Почему не работает цикл в PHP?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Ошибка с формами, радио кнопки у вас на одной форме, а отправляете файл вы совсем через другую спс. тов. Дмитрий
    code
    <form action="functions.php" method="post">
      A4 <input type="radio" name="ans" value="ans1">
      A3 <input type="radio" name="ans" value="ans2"  /><br />
    </form>
      
        <form method="post" enctype="multipart/form-data">
          <input type="file" name="file">
          <input type="submit" value="Datei herunterladen!">
        </form>



    Надо сделать так примерно
    code
    <form action="#" method="post" enctype="multipart/form-data">
                A4 <input required type="radio" name="ans" value="ans1">
                A3 <input type="radio" name="ans" value="ans2">
                <input type="file" name="file">
                <input type="submit" value="Загрузить">
            </form>


    Проверяете условие, а потом объявляете переменную, естественно у вас условие не выполняется.
    code
    if ($answer == "ans1") {
    $answer = $_POST['ans'];

    Надо сначала объявлять переменную, потом уж делать с ней что душе угодно. Но именно в данном случае в объявлении функции она не к месту. См. след. пункт.
    code
    $answer = $_POST['ans'];  	
    if ($answer == "ans1") {

    Как заметил Дмитрий так функции нельзя объявлять
    code
    if ($answer == "ans1") {
    $answer = $_POST['ans'];  	
         function make_upload($file){	
      // формируем уникальное имя картинки: случайное число и name
      $name = mt_rand(0, 10000) . $file['name'];
      copy($file['tmp_name'], 'Folder_A4_SW_EIN/' . $name); //ПАПКА ДОК
       return true;    
       }
    }else{
        function make_upload($file){	
      // формируем уникальное имя картинки: случайное число и name
      $name = mt_rand(0, 10000) . $file['name'];
      copy($file['tmp_name'], 'img7/' . $name); //ПАПКА, КУДИ ПАДАЮТЬ ДОКУМЕНТИ
      }      
    }


    Вынесите название в отдельный аргумент
    code
    function make_upload($file, $folder)
    {    
        // формируем путь + уникальное имя картинки
        $name = $folder . DIRECTORY_SEPARATOR . uniqid(true) . $file['name'];
        copy($file['tmp_name'], $name);
        return true;    
    }
    UPD: рабочий г-но код
    <?php
        include_once('functions.php')
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Загрузить изображения на сервер</title>
        </head>
        <body>
            <form action="#" method="post" enctype="multipart/form-data">
                A4 <input required type="radio" name="ans" value="ans1">
                A3 <input type="radio" name="ans" value="ans2">
                <input type="file" name="file">
                <input type="submit" value="Загрузить">
            </form>
            <?php
            // если была произведена отправка формы
                if(isset($_FILES['file']))
                {
                    // проверяем, можно ли загружать изображение
                    $check = can_upload($_FILES['file']);
    
                    if($check === true)
                    {
                        $folder = $_POST['ans'] == 'ans1' ? 'Folder_A4_SW_EIN' : 'img7';
                        make_upload($_FILES['file'], $folder); // загружаем изображение на сервер
                        echo "<strong>Файл был успешно загружен!</strong>";
                    }
                    else
                    {
                        // выводим сообщение об ошибке
                        echo "<strong>$check</strong>";  
                    }
                }
            ?>
        </body>
    </html>

    <?php
        function can_upload($file)
        {
            // если имя пустое, значит файл не выбран
            if($file['name'] == '')
            return 'Вы не выбрали файл.';
    
            /* если размер файла 0, значит его не пропустили настройки 
            сервера из-за того, что он слишком большой */
            if($file['size'] == 0)
            return 'Файл слишком большой.';
    
            // разбиваем имя файла по точке и получаем массив
            $getMime = explode('.', $file['name']);
            
            // нас интересует последний элемент массива - расширение
            $mime = strtolower(end($getMime));
            
            // объявим массив допустимых расширений
            $types = array('jpg', 'png', 'gif', 'bmp', 'jpeg', 'pdf', 'ppt', 'ods', 'dotx', 'docx', 'doc');
    
            // если расширение не входит в список допустимых - return
            if(!in_array($mime, $types))
            return 'Недопустимый тип файла.';
    
            return true;
        }
    
        function make_upload($file, $folder)
        {    
            // формируем путь + уникальное имя картинки
            $name = $folder . DIRECTORY_SEPARATOR . uniqid(true) . $file['name'];
            copy($file['tmp_name'], $name);
            return true;    
        }

    Ответ написан
    3 комментария
  • Почему может зависать компьютер?

    mrsexy
    @mrsexy
    Senior Pomidor
    Больше похоже на отвал графического процессора. Вы используете встроенное графическое ядро для вывода или видеокарту? В любом случае проблема кроется там. Если используете дискретку, отключите в биосе видео ядро. И проверьте ещё раз. Или наоборот отключите дискретку и подключитесь через материнку.
    Ответ написан
  • Как сделать поиск и вставку файлов через условно {{}}?

    @IS-Builder
    ~ PHP-8 & REGEXP - This is a really powerful kit ~
    $str = 'Исходный текст и {{}}.';
    $dir = 'blog\flowers.txt';
    $str = preg_replace_callback(
        '~{{\K(?=}})~',
        function()use($dir){
            return file_get_contents($dir);
        },
        $str
    );
    
    echo $str;

    Но для подобных замен есть более подходящие инструменты:
    $str = 'Исходный текст и {{}}.';
    $dir = 'blog\flowers.txt';
    $str = str_replace('{{}}', '{{'. file_get_contents($dir) . '}}', $str);
    
    echo $str;
    Ответ написан
    1 комментарий
  • Можно ли получить внутреннее значение PHP массива сохраненного в MySQL с помощью serialize() не доставая весь массив?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вопрос из серии: стреляю себе в ногу, больно, как стрелять себе в ногу, но что бы не больно?

    Нормализируйте БД и не пользуйтесь serialize для вставки. Вот эти 200 элементов мне почему-то так кажется, отлично бы лежали в отдельных строках отдельной таблицы.
    Ответ написан
    Комментировать
  • Как выполнить "sudo service tor restart" из php скрипта?

    abyrvalg
    @abyrvalg
    > У пользователя Apache должны быть права на команды exec, как root, используя sudo.
    За такие рекомендации надо причинять рекомендодателю смерть через сепукку.

    Я бы просто устанавливал из пхп какой-то маркер "требуется перезапустить тор". Самое простое - создать определённый файл.
    Другая часть, никак не связанная с апачем и вообще с внешним миром, каким-то образом мониторит появление маркера и выполняет при его наличии требуемое действие. Самое простое - использовать крон.
    Ответ написан
    4 комментария
  • Как создать веб-сервис, который будет извлекать аудио из видео?

    Zoominger
    @Zoominger Куратор тега Веб-разработка
    System Integrator
    Главная проблема - с чего начать? Можете подсказать как лучше все это организовать, какое ПО может пригодиться?

    Ну вообще, на мой взгляд всё просто.
    Пишем простенький интерфейс, который позволит выбрать файл с видео и загрузить на сервер (хватит даже PHP), на сервере с помощью ffmpeg вытаскиваем звук и отправляем обратно пользователю.
    Свистоперделки можно прикрутить уже позже.
    Ответ написан
  • Почему тесты выполняются по одному, но возникают ошибки в некоторых тестах при выполнении их вместе?

    Потому что глобальные состояния.
    В объекте состояние не меняется между тестами

    Как лечить.
    • Set Up в методах (например метод _before() или кастомные методы, на которые ссылается аннотация @before) помогут вам привести тест к исходному состоянию -- обнуляйте артефакты прошлых тестов.
    • Пишите изначально код, который не завязан на глобальное состояние

    При запуске с параметром -vvv, всё идет к тому что есть проблемы с загрузкой фикстур.

    Если из-за них, то возможно легко излечить -- делайте cleanup перед каждым тестом и populate, то есть предзагрузка фикстур заново
    https://codeception.com/docs/modules/Db#Populator
    Или каждому тесту создавайте свой уникальный набор фикстур (я выбрал этот вариант), он быстрый, немного гемморный
    Ответ написан
    2 комментария
  • Как защитить php файл от пользователей?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Смотря что содержится в config.php. Если он выполняет функцию возвращения массива, например:
    <?php
    return[
        'host' => 'localhost',
        'dbname' => 'MAYABASA',
        'user' => 'root',
        'password' => ''
    ];

    То ничего скрывать не нужно, пользователь и так не сможет получить содержимое.

    Если вы делаете вывод контента по средствам php и получаете содержимое через, например, file_get_contents($url), то в начале файла можно проверять ip адрес с которого поступает запрос. Если запрос делает только ваш сервер, то это может смотреться так:
    if ($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') exit();
    echo 'Этот контент будет выводиться только для запросов с Ip 127.0.0.1';

    Ip вашего сервера не меняется, поэтому способ может быть использован.

    Ну и напоследок, есть способ для защиты в .htaccess
    RewriteRule ^/?some_path/config\.php$ - [F,L]
    Ответ написан
    Комментировать
  • Фатальная ошибка php, почему?

    Потому что этот ваш денвер устарел полвека назад

    А так он не может открыть credits.php
    Ответ написан
    1 комментарий
  • Как можно защитить PHP, не замедлив его?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ваш код никому не нужен.
    Ответ написан
    Комментировать
  • Как полностью обесшумить компьютер, чтобы его не было абсолютно слышно, вплодь, чтобы винчестера не было слышно?

    sotvm
    @sotvm
    Умный поймёт, а дураку и так всё равно.
    выключи его совсем :)
    Ответ написан
    Комментировать
  • Перспективы веб-разработки?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Перспективы есть.
    Делаете все нормально, продолжайте. До сентября еще все лето - можно очень много всего за это время выучить.
    Ответ написан
    1 комментарий
  • Как вывести данные из объекта PHP в HTML?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Как-то так
    $result = '';
    while($row = $query->fetch(PDO::FETCH_ASSOC)) {
     $result = "<option>".$row['fullname'] . '</option>';
    }

    В html
    <div class="viewing-wrapper">
      <div class="viewing-container">
        <div class="viewing-title">
          Выберите абоненета из списка
        </div>
        <div class="viewing-list">
          <div class="viewing-select-wrap">
          <select class="viewing-select">
             <?= $result ?>
          </select>
          <button class="button btn-show">Показать</button>
          </div>
        </div>
      </div>
    </div>
    Ответ написан
    4 комментария