2012-02-06 49 views
1

所以我试图生成并保存一个Excel文件到服务器。这完美地与PHPExcel一起工作。下一步是读取文件,将其作为附件通过电子邮件发送,然后将其删除。用PHPExcel创建PHP邮件xlsx文件作为附件

出于某种原因,PHP不承认XLSX作为一个适当的文件:

/* excel is generated before here */ 
$filename = "/results/excel/export-" . $today . ".xlsx"; 
$writer = new PHPExcel_Writer_Excel2007($exc); 
$writer->save($filename); 
/* so far so good; the file is created and exists on the server */ 

$to = "[email protected]"; 
$sendermail = "[email protected]"; 
$from = "Sender <" . $sendermail . ">"; 
$subject = "Email with attachment"; 
$message = "Here you go"; 
$file = $filename; 

$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

$headers = "From: $from"; 
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"  {$mime_boundary}\""; 

$message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
"Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 

if(is_file($file)) { 
    $message .= "--{$mime_boundary}\n"; 
    $fp = @fopen($file, "rb"); 
    $data = @fread($fp, filesize($file)); 
    @fclose($fp); 
    $data = chunk_split(base64_encode($data)); 
    $message .= "Content-Type: application/octet-stream; name=\"" . basename($file). ";\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 

    $message .= "--{$mime_boundary}--"; 
    $returnpath = "-f" . $sendermail; 

    mail($to, $subject, $message, $headers, $returnpath); 
} else { 
    echo("This is not a file: " . $file); 
} 

它总是给我“这不是一个文件...”。我如何阅读XLSX文件?

+0

检查针对该文件夹的PHP用户,你都saveing Excel文件或写权限/ tmp – 2012-02-06 12:37:07

回答

0

好吧,我发现那是什么。 $ filename实际上是直接(http:// ...)链接到文件,而不是相对链接。改变它是相对的,它的工作:)。

0

输出的消息意味着is_file()失败。这可能发生的原因很多,但据我所知不是因为文件格式。因此,我建议您研究以下几点:

  1. 该文件是否真的存在?你说你保存了这个文件,但你必须确保它确实存在。

  2. xslx文件使用的文件路径是否正确?

  3. xslx文件的文件路径是实际的xml文件而不是它的符号链接?

  4. 设置xslx文件的权限是否允许php脚本访问它们?

我相信那一定是这些问题的一个...

+0

1.文件在那里。如果我选择它的回声并指向浏览器,我可以下载并在本地打开它。所以是的,那个文件路径是正确的。 3.我不确定你的意思:D 4.权限应该是多少?我如何将权限设置为保存时的任何内容?谢谢! – Rein 2012-02-06 12:31:50

+0

好吧,我发现它是什么。 '$ filename'实际上是一个到文件的直接('http:// ...')链接,而不是相对链接。改变它是相对的,它的工作:)。 – Rein 2012-02-06 12:39:12

1

这里的提示Excel和也发送文件作为附件不保存在服务器上的文件提示:

$objWriter = PHPExcel_IOFactory::createWriter  ($objPHPExcel, 'Excel2007');                           
$objWriter->save('php://output'); 

$data = ob_get_contents(); 

$sendmail=new ExcelMail($data); //this is your mail class; if you use zend mail use addattachement($data); and Zend_Mime