Хак: Выполнение PHP кода на статических страницах

Иногда бывает полезно выполнить на статической странице PHP код (различные сервисы, mini-tools, и т.д.). В WordPress для этого есть специальный плагин, а для полюбившегося LiveStreet сделал так:
1. Открываем /classes/actions/ActionPage.php
2. В EventShowPage() добавляем следующее:

/** 
 * "PHP Allowed" Hack Start
 * @author Alex Kachayev
 *  
 * Возможность использования PHP кода в статических страницах. 
 * Для выполнения PHP кода, необходимо заключить его между тегами 
 * [PHP] тут_прописываем_PHP_код [/PHP]
 */
$oPage->setText(preg_replace_callback(
    '/\[PHP\](.+)\[\/PHP\]/s', 
    create_function(
        '$mathces',
        'ob_start(); eval($mathces[1]); $content = ob_get_contents(); ob_end_clean(); return $content;'
    ), 
    $oPage->getText()
));
/**
 * "PHP Allowed" Hack End
 */

3. Теперь редактируя или создавая статическую страницу можем написать что-нибудь такое
[PHP]print 'Сейчас '. date('Y-m-d H:i:s');[/PHP]

На странице будет выведено
Сейчас 2009-08-03 13:34:46


Теперь, господа разработчики, можете проявить фантазию и «креативничать» :)

Конечно, такое решение не подойдет для сложных архитектурных задумок (в таких случаях надо делать все «правильно» — свой Action, Module, Event`ы и т.д.), но мелкие задачи бывает проще решать так.

7 комментариев

avatar
кстати да — для мелочевки идеальный вариант
avatar
2. В EventShowPage() добавляем следующее:

Подскажите, пожалуйста, куда точно нужно вставить данный код? В программировании полный ноль, методом научного тыка не вышло…
avatar
Полный путь до файла на самом деле такой:
plugins\page\classes\actions\ActionPage.class.php

Код надо вставить сразу после стоки:
$this->SetTemplateAction('page');
avatar
Путь к файлу я нашёл, где-то и в другом топике упоминали, что данный хак сработает. Не мог именно со строчкой разобраться. Благодарю, сейчас всё сработало..=)
avatar
добрый день всем. у меня вопрос. меня смущает вот этот момент в коде:
eval($mathces[1]);


я в пхп не очень, но не значит ли это, что будет обрабатываться ровно одно вхождение пхп-кода в странице?(итерации по всем совпадениям я что то не вижу). Если это так, то как можно расширить этот хак, что бы корректно обрабатывались все включения пхп-кода?
avatar
это было во времена когда плагинов не существовала и архитектура была не настолько гибка.
сейчас вы снова хотите одеть валенки учитывая что есть кроссовки?
avatar
прошу прощение, я не понял к чему это вы? решение автора меня полностью устраивает, хотелось бы только, что бы обрабатывались все вхождения пхп — кода. на кой мне плагин если у меня в странице всего 3 строчки?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.