За последние 24 часа нас посетили 36980 программистов и 7800 роботов. Сейчас ищут 1870 программистов ...

Значение перменной как код php или текст из файла как код

Тема в разделе "PHP для новичков", создана пользователем megagramm, 21 фев 2023.

  1. megagramm

    megagramm Новичок

    С нами с:
    23 дек 2022
    Сообщения:
    7
    Симпатии:
    0
    Здравствуйте.
    Заранее извиняюсь. Почитал рекомендации к публикации, но вот ответ уже 2 дня ищу.
    Можно считать что я новичок, так как хоть и имеется опыт в несколько лет в php, это было больше похоже на факультатив к административной работе. Потому могу элементарно не знать каких-то простых команд из php.

    К сути:

    Мне необходимо значение переменной выполнять как код. Долгое время гуглю и исследую дакдакго, но в основном результаты идут с формулировкой как присвоить значения переменной, как вызвать переменную, как вызвать код используя заголовки http итп.
    Возможно ли как то выполнить код из переменной, например:

    $var = 'echo "123"; echo "456"';

    Если возможно, то можно ли тогда вызывать функции с передачей параметров?
    $var2 = 'function s(int $a, int $b = 0):int{$c = $a + $b; echo $c} echo s(3, 4);';

    Какие команды изучить?

    Спасибо
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Теоретически, можно вызвать eval, можно запустить интерпретатор, как внешний процесс.

    Практически, лучше такого избегать, особенно если этот код будет приходить от пользователя. Это нехилая такая дыра в безопасности
     
    megagramm и aliensgroup нравится это.
  3. rr33rr

    rr33rr Активный пользователь

    С нами с:
    6 май 2021
    Сообщения:
    35
    Симпатии:
    18
    Если на 100% уверены в источнике кода, то можно как-то так:
    PHP:
    1. <?php
    2. function eval_php($matches){
    3.    ob_start();
    4.    eval($matches[1]);
    5.    $code = ob_get_contents();
    6.    ob_end_clean();
    7.    return $code;
    8. }
    9. function replace_php($string){
    10.    return preg_replace_callback("#<\?php(.*)\?>#Usi", "eval_php", $string);
    11. }
    12. $var1 = '<?php echo "123", "456"; ?>';
    13. $var2 = '<?php
    14. function s(int $a, int $b = 0):int {
    15.  $c = $a + $b;
    16.  return $c;
    17. }
    18. echo s(3, 4);
    19. ?>';
    20. $string = "
    21. <p>Какой-то текст со вставкой php-кода из переменной \$var1: $var1</p>
    22. <p>Еще текст со вставкой php-кода из переменной \$var2: $var2</p>
    23. <p>Не делайте так, если не контролируете на 100% источник кода</p>
    24. ";
    25. echo replace_php($string);
    26. /*
    27. Какой-то текст со вставкой php-кода из переменной $var1: 123456
    28.  
    29. Еще текст со вставкой php-кода из переменной $var2: 7
    30.  
    31. Не делайте так, если не контролируете на 100% источник кода
    32. */
    33. ?>
     
    megagramm нравится это.