PHP Mail xlsx-ファイルを添付ファイルとしてPHPExcelで作成

だから私は生成し、サーバーにExcelファイルを保存しようとしている。これはPHPExcelで完璧に動作します。次のステップでは、ファイルを読み取り、添付ファイルとして電子メールで送信してから削除します。

何らかの理由で、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ファイルを読むにはどうしたらいいですか?

1
excelファイルを保存しているフォルダまたは/ tmpファイルに対してphp userの書き込み権限を確認してください
追加された 著者 Elzo Valugi,

3 答え

ここでは、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
1
追加された

出力されたメッセージは、 is_file()が失敗したことを意味します。これは、いくつかの理由で起こりますが、私が知っている限り、ファイル形式のせいではありません。このように、私は次のことを調べることをお勧めします:

  1. ファイルは実際にそこにありますか?ファイルが保存されているとしますが、実際にファイルを保存する必要があります。

  2. xslxファイルが使用しているファイルパスは正しいですか?

  3. xslxファイルへのファイルパスは、実際のxmlファイルへのシンボリックリンクではありませんか?

  4. xslxファイルのアクセス権は、PHPスクリプトがアクセスできるように設定されていますか?

私はそれがそれらの問題の一つでなければならないと信じています...

0
追加された
1.ファイルがそこにあります。パスをコピーしてブラウザに指示すると、ダウンロードしてローカルに開くことができます。 2.はい、そのファイルパスは正しいです。 3.私はあなたが何を意味するか分からない:D 4.許可は何であるべきですか?そして、私はどのように彼らが保存する必要がありますに権限を設定するのですか?ありがとう!
追加された 著者 Rein,
さて、私はそれが何であるかを知った。 $ filename は相対リンクではなく、ファイルへの直接のリンク( http:// ... )でした。それは相対的に変更され、それは働いた:)。
追加された 著者 Rein,

さて、私はそれが何であるかを知った。 $ filenameは実際には相対リンクではなくファイルへの直接リンク(http:// ...)でした。それは相対的に変更され、それは働いた:)。

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com