2014-11-02 1 views
0

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

Код:

header('Content-Disposition: attachment;filename=License.xml'); 
    header('Content-Type: text/xml'); 
    $document = new DOMDocument('1.0'); 
    $document->formatOutput = true; 
    $element_account = $document->createElement("Account"); 
    $attr_name = $document->createAttribute("Username"); 
    $attr_pass = $document->createAttribute("Password"); 
    $attr_key = $document->createAttribute("Key"); 

    $attr_name->value = $user; 
    $attr_pass->value = $pass; 
    $attr_key->value = $key; 

    $element_account->appendChild($attr_name); 
    $element_account->appendChild($attr_pass); 
    $element_account->appendChild($attr_key); 

    $document->appendChild($element_account); 

    $file_to_attach = 'tmp/License'.$user.'.xml'; 

    $document->save($file_to_attach); 

    require '../PHPMailer/PHPMailerAutoload.php'; 

    $pemail = new PHPMailer(); 
    $pemail->From  = '[email protected]'; 
    $pemail->FromName = 'OGServer Licensing'; 
    $pemail->Subject = 'Your OGServer License has arrived!'; 
    $pemail->Body  = 'Thank you for registering your product, you will find your License attached to the e-mail, if you have any questions about how to set up your license, you can view the tutorial here: http://ogserver.net/licensing/tutorial.html'; 
    $pemail->AddAddress($email); 

    $pemail->AddAttachment($file_to_attach, 'License.xml'); 

    $pemail->Send(); 

    $filepath = realpath($file_to_attach); 

    echo readfile($file_to_attach); 
+0

Вы имеете в виду цифры, сгенерированные автоматически? –

+0

Я бы предположил, что в конце моего файла есть всего несколько случайных чисел (обычно три из них), они разные, каждый раз, когда я создаю файл. – Hobbyist

+0

Можете ли вы просто опубликовать/URL-адрес вашего образца XML? –

ответ

1

Вы выход эти цифры после вы выводимые файл для вложения. Вы что здесь:

echo readfile($file_to_attach); 

Это просто, что readfile возвращает количество прочитанных байтов, и вы затем повторить этот номер. Цитируя раздел под названием «Возвращаемые значения»:

Возвращает количество байтов, считанных из файла. Если возникает ошибка, возвращается FALSE, и если функция не была вызвана как @readfile(), выводится сообщение об ошибке.

Как readfile уже выход содержимого файла в STDOUT, вы просто добавить целое число в файле размера (байт прочитан readfile) впоследствии.


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

Так же вы можете хранить XML в строку:

$licenseXml = $document->saveXML(); 

А затем прикрепить его к письму:

$pemail->AddStringAttachment($licenseXml, 'License.xml'); 

, а затем вывести его:

echo $licenseXml; 

Это должен делать это одинаково хорошо.

+0

К сожалению, библиотека электронной почты, которую я использую, не позволяет отправлять динамически сохраненный файл, поэтому я пишу его на диск, отправляя его, а затем удаляя его с диска. После обновления моего хоста я смогу получить новую библиотеку рассылки. Спасибо за объяснение, хотя, это помогло мне исправить мою проблему! – Hobbyist

+0

@ Christian.tucker: ** PHPMailer ** поддерживает это с возрастов. В противном случае я бы не предложил его, я сначала проверил, что такое правильное имя метода. Дайте мне знать, если у вас есть какие-либо проблемы с этим. – hakre

+0

Странно, для меня это означает, что значение параметра должно быть строкой, а не строкой объекта. Я обновлю свою библиотеку и посмотрю, исправляет ли она проблему. Благодаря! – Hobbyist

Смежные вопросы