2014-11-02 24 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

你是指数字自动生成? – 2014-11-02 13:00:56

+0

我会假设,在我的文件结尾处只有几个随机数(通常是三个),每次生成文件时它们都不相同。 – Hobbyist 2014-11-02 13:04:33

+0

你可以只发布/您的示例生成的XML的URL? – 2014-11-02 13:05:51

回答

1

你输出之后你输出附加的文件这些数字。您在这里这样做:

echo readfile($file_to_attach); 

这只是个字节的readfile返回读取数量,然后你回声这个数字。引用标题为返回值的部分:

返回从文件中读取的字节数。如果发生错误,则返回FALSE,除非该函数被称为@readfile(),否则会打印一条错误消息。

由于readfile已输出文件的内容输出到标准输出,你只需要添加的文件大小(字节由readfile读取)的整数之后。


由于文件大小实际上是没有那么大,有使用readfile这里,因为它需要你有磁盘上的文件,即使没有什么好处。

所以,或者你可以将XML存储到一个字符串:

$licenseXml = $document->saveXML(); 

然后将其附加到电子邮件:

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

,然后将它输出:

echo $licenseXml; 

那应该同样做得很好。

+0

不幸的是,我使用的电子邮件库不允许我发送动态存储的文件,这就是为什么我将它写入磁盘,发送附件,然后从磁盘上擦除它。升级主机后,我将能够获得新的邮件库。感谢您的解释,但它帮助我解决了我的问题! – Hobbyist 2014-11-03 06:33:48

+0

@ Christian.tucker:** PHPMailer **支持自年龄以来。否则,我不会建议它,我首先检查了正确的方法名是什么。如果您有任何问题,请告诉我。 – hakre 2014-11-03 09:46:00

+0

奇怪的是,对我来说它指出参数值必须是一个字符串,而不是一个对象。我会更新我的库,看看它是否解决了这个问题。谢谢! – Hobbyist 2014-11-03 09:58:04