2012-02-06 166 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