Ошибка в цикле с переполнением стека DOM

У меня две ошибки, не могу заставить это работать …

С таким кодом:

<html>
<body>
<?php
/*
Fontes:
- http://blog.clares.com.br/gerando-xml-com-php/
- https://forum.imasters.com.br/topic/482006-resolvido%C2%A0gerar-nomes-aleat%C3%B3rios/
*/
header('Content-type: text/xml; charset=utf-8');

if(empty($_POST["Pergunta"])) {
$pergunta = "";
echo "dar um alert e voltar";
} else {
$pergunta = $_POST["Pergunta"];
}
if(empty($_POST["Resposta"])) {
$resposta = "";
echo "dar um alert e voltar";
} else {
$resposta = $_POST["Resposta"];
$teste = explode("\n",$resposta);
echo '<pre>' . print_r($teste) . '</pre>';
}
/* CHECKBOX
if(isset($_POST['MostrarAIML'])){
//echo "checkbox marcado! <br/>";
//echo "valor: " . $_POST['MostrarAIML'];
$MostrarAIML = true;
}else{
//echo "checkbox não marcado! <br/>";
$MostrarAIML = false;
}

if(isset($_POST['SalvarAIML'])){
//echo "checkbox marcado! <br/>";
//echo "valor: " . $_POST['SalvarAIML'];
$SalvarAIML = true;
}else{
//echo "checkbox não marcado! <br/>";
$SalvarAIML = false;
} */
if(empty($_POST["forma"])) {
$escolhe = "MostrarAIML";
} else if($_POST["forma"]=='MostrarAIML'){
$escolhe = "MostrarAIML";
} else if($_POST["forma"]=='SalvarAIML'){
$escolhe = "SalvarAIML";
}

function nome_aleatorio(){
$tamanho = mt_rand(5,9);
$all_str = "abcdefghijlkmnopqrstuvxyzwABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$nome = "";
for ($i = 0;$i <= $tamanho;$i++){
$nome .= $all_str[mt_rand(0,61)];
}
return $nome;
}# versao do encoding xml
$dom = new DOMDocument("1.0", "UTF-8");

# retirar os espacos em branco
$dom->preserveWhiteSpace = false;

# gerar o codigo
$dom->formatOutput = true;

# criando o nó principal (root)
$root = $dom->createElement("aiml");

$comentario = $dom->createComment("Copyright ©2017 - FAST.aiml
URL: http://avatar.cinted.ufrgs.br/alunos/fabricio/fastaiml/
Powered by Fabricio Herpich < fabricio_herpich at hotmail.com >
Project coordinator: Liane Margarida Rockenbach Tarouco < liane at penta.ufrgs.br >");

# nó filho (category)
$category = $dom->createElement("category");
# nó filho (pattern) / #setanto a pergunta
$pattern = $dom->createElement("pattern", $pergunta);
# nó filho (template) / #setanto a resposta
$template = array();

for($i = 0; $i < sizeof($teste); $i++){
$template[$i] = $dom->createElement("template", $teste[$i]);
}

# adiciona os nós em aiml
$category->appendChild($comentario);
$category->appendChild($pattern);

for($i = 0; $i < sizeof($template); $i++){
$category->appendChild($template[$i]);
}

# adiciona o nó contato em (root) agenda
$root->appendChild($category);
$dom->appendChild($root);# busco um nome aleatório
$nome_arquivo = nome_aleatorio();

$dom->save("backup__/" . $nome_arquivo . ".xml");if($escolhe == "MostrarAIML"){
# imprime o xml na tela
print $dom->saveXML();

}

if($escolhe == "SalvarAIML"){
# imprime o xml na tela
print $dom->saveXML();
# salva o arquivo AIML.xml
header("Content-Disposition: attachment; filename=fastaiml_" . $nome_arquivo .  ".xml");
}

?>
</body>
</html>

Я получаю эту ошибку:

Эта страница содержит следующие ошибки:
ошибка в строке 12 в столбце 18: объявление XML разрешено только в начале документа
Ниже приведено отображение страницы до первой ошибки. **

У меня есть другой PHP-файл, который отлично работает, где функция header () после $ nome_arquivo = nome_aleatorio ();
Но в этом случае у меня нет циклов for в коде, потому что у меня есть только один цикл для файла … и в этом случае мне нужно поместить несколько тегов внутри тега …

Если я поставлю header () как другой файл, я получу:

Эта страница содержит следующие ошибки:
ошибка в строке 7 в столбце 18: объявление XML допускается только в начале документа
Ниже приведено отображение страницы до первой ошибки. **

как обойти это?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector