Могу ли я включить PHP в файл XSL? - PullRequest
1 голос
/ 14 декабря 2011

Я пытаюсь добавить поле капчи в форму в XSL-файле, но PHP не отображается на странице: -

В настоящее время у меня есть: -

<xsl:call-template name="signature">
<xsl:with-param name="text" select="signature" />
</xsl:call-template>

<?php
require_once('/recaptchalib.php');
$publickey = "public_key";
echo recaptcha_get_html($publickey);
?>

<div class="forum_default_margin_top">
<input type="submit" name="post_submit" value="Submit" onclick="tinyMCE.triggerSave(); if (!f.checkPostTopicValues(document.forms['new_topic'].topic_subject, document.forms['new_topic'].topic_text, document.forms['new_topic'].signature, true)) return false;" class="forum_default_margin_right" />
<input type="reset" name="cancel" value="Cancel" onclick="return f.cancelNewTopic('{forum/uri}', 0)" />
</div>

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

echo "Hello World";

Это всене отображается на передней панели.

Любая помощь, высоко ценится, большое спасибо.

Ответы [ 4 ]

2 голосов
/ 14 декабря 2011

Расширение вашего файла, вероятно, не анализируется интерпретатором PHP.

Есть способы изменить это, и каждый файл XSL анализируется PHP до того, как он покинет сервер.Однако это не очень хорошо для ресурсов, так как это применимо ко всем файлам XSL.

Самый простой и наиболее экономичный способ - дать XSL-файлу расширение .php и отправить правильноеMIME-тип (это этот ? Я не знаю), чтобы убедиться, что он обрабатывается правильно на стороне клиента:

header("Content-type: {insert type here}");

не очень приятно иметь .php расширение там, как это, но, возможно, тщеславие не ваша забота.

2 голосов
/ 14 декабря 2011

Я подозреваю, что:

  • Файл имеет расширение *.xsl, и ваш веб-сервер не настроен для обработки *.xsl файлов в виде кода PHP.
  • PHP-код отображается в документе без разбора, но вы используете его для просмотра в браузере, а не просмотр источника .

Существует несколько возможных решений, но самое простое из них:

  1. Переименуйте файл в *.php.
  2. Добавьте это в начало файла:

    <?php header('Content-Type: application/xslt+xml'); ?>
    

P.S. Вместо включения PHP в файл XSL, вы можете включить XSL в файл PHP; -)

1 голос
/ 05 августа 2016

Никогда не было правильного ответа, поэтому 4 года спустя ...

Поместите include или require в текстовый блок xsl:, отключите экранирование выхода и используйте раздел CDATA.

Например:

<xsl:text disable-output-escaping="yes">
        <![CDATA[<?php require_once 'path/to/file.php']]>
</xsl:text>

У вас также может быть php в разделе CDATA.Очевидно, что вывод xsl должен быть php-файлом и вызываться так же, как в браузере или как угодно.

В качестве альтернативы вы также можете вызывать функции php из XSL.Проверьте документы здесь: http://php.net/manual/en/xsltprocessor.registerphpfunctions.php

0 голосов
/ 14 декабря 2011

У вас действительно есть файл с именем recaptchalib.php в корне вашей файловой системы? Я подозреваю, что нет ...

Мне кажется эта строка:

require_once('/recaptchalib.php');

... должно быть ...

require_once('recaptchalib.php');

Если вы require() файл, который не существует, это приведет к фатальной ошибке. Помните, что require() использует локальный путь, поэтому косая черта указывает на корень вашей локальной файловой системы, а не на корень документа вашего веб-сервера.

...