введите код php в textarea, сохраните в базе данных, затем выполните - PullRequest
1 голос
/ 02 декабря 2009

Кто-нибудь знает, как мне поступить так:

У меня есть настройка textarea, позволяющая пользователям редактировать содержимое страницы. содержимое затем сохраняется в базе данных и извлекается из внешнего интерфейса с помощью php в шаблоне html. что-то вроде:

<html>
yada yada...
<?php
echo get_page_contents_by_id($_GET['id']);
?>
yada yada...
</html>

Все это выполняется в .php-файле, на случай, если кто-то захочет это вызвать.

Что мне интересно, так это то, что, поскольку я получаю контент из базы данных через php, есть ли способ, которым я могу получить php-код в этом контенте и по-прежнему запускать его, не выполняя какой-либо записи файла. *

Ответы [ 6 ]

3 голосов
/ 02 декабря 2009

Вы можете использовать метод PHP eval() для выполнения PHP-кода, возвращенного из базы данных - точно так же, как если бы он был фактически записан в вашем PHP-файле напрямую.

например,

<?php
eval("echo('hello world');");
?>

Отпечатки:

Привет, мир

1 голос
/ 02 декабря 2009

eval(), как говорят Джеймс Гудвин и Газлер, фактически единственный способ выполнить код PHP из строковых данных.

В дополнение к последствиям для безопасности - станет возможным скомпрометировать весь ваш веб-сайт, получив доступ к вашим данным MySQL - этот подход сделает код очень сложным для отладки, так как вам придется следить за всеми сообщениями об ошибках через eval () d код.

1 голос
/ 02 декабря 2009

Вы можете использовать eval для этой цели.

http://php.net/manual/en/function.eval.php

0 голосов
/ 29 июля 2013

Ниже приведен код для выполнения кода в textarea.

    <?php 
if($_POST){
    print_r($_POST);
    extract($_POST);
    $file = rand(1000,10000);  // creating file with random number
    file_put_contents($file.'.php', '<?php '.$code.' ?>');
    ob_start();
    include $file.'.php';
    echo ob_get_clean();
    unlink($file.'.php');   // deleting the created file after execution.
    die('test');
}
?>
<textarea id="testcode" ></textarea>
    <input type="submit" onClick="return changePermissions1()" />
    <script>
    function changePermissions1(){
        var code = {};
        code['code'] = $("#testcode").val();
        var pass_url = "executefile.php"; // there you can pass the code
        $.ajax({
            type        : "POST",
            beforeSend  : loadingStarts,
            url         : pass_url,
            data        : code,
            success     : function(responseText){`enter code here`
                loadingEnds();
                alert(responseText);
            }
        });
    }
    </script>
0 голосов
/ 03 декабря 2009

Рассмотрим другую альтернативу. На самом деле.

Независимо от каких-либо проверок безопасности, парсинга функций и т. Д., Это все равно ЧРЕЗВЫЧАЙНО плохая идея.

Немного менее плохая идея, почему бы не взглянуть на шаблонное решение вроде http://www.smarty.net или http://www.google.com/search?q=php+template+engine

0 голосов
/ 03 декабря 2009

Я попытался сделать то же самое, но с добавлением тегов и обычных тегов HTML. Это не будет работать. Если вам нужно хранить HTML вместе с вашим PHP, рассмотрите более XHR-решение, которое меньше полагается на код PHP для каждой страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...