0

添付ファイルを追加すると、既存の PDF ファイルを電子メールに添付できないという警告メッセージが表示されます。スクリプトが以前の文字列によって生成された vcard を正常に添付しているため、それが私のヘッダーではないことはわかっています。私はファイルを編集していないので、TDPDF と FPDF は必要ありません。(ただし、100%ではありません)これが私が取り組んできたコードです。出力テスト行とコメントを含めました。

//File Definition
        $filepath = "docs/";
        //$filepath = "./docs/"; //tried: same result
        $fullpath = $filepath . $filename; //$filename defined earlier

    //File Manipulation
        $file = fopen($fullpath,'rb');
        $pdfdata = fread($file, filesize($fullpath));
        fclose($file);

    //Testing
        echo $fullpath . "<br />\n";
        echo "Filename: " .$filename . "<br />\n";
        echo "Filesize: " .filesize($fullpath). "<br />\n";
        echo "String Length: " .strlen($pdfdata). "<br />\n";

    //The Following line proved the variable is dumping properly, 
    //but its content cannot be used for file_get_contents...huh?
        //var_dump($pdfdata); //Only used for proofing

        echo "Probable Errors for file_get_contents<br />\n";
        $data = file_get_contents($pdfdata);

    // The following line: Sends File, but is 0 bytes
        //$attachment = chunk_split(base64_encode($pdfdata));
    //default 
        $attachment = chunk_split(base64_encode(file_get_contents($pdfdata)));

これは以下を出力します:

docs/pdf-to-send.pdf
Filename: pdf-to-send.pdf
Filesize: 37907
String Length: 37907
Probable Errors for file_get_contents

Warning: file_get_contents(%PDF-1.5 % ... (truncated by me)
        ... ) [function.file-get-contents]: failed to open stream: No such file or directory in /my/hosting/directory/mailer.php on line 337
Warning: file_get_contents(%PDF-1.5 % ... (truncated by me )
        ... ) [function.file-get-contents]: failed to open stream: No such file or directory in /my/hosting/directory/mailer.php on line 339

$pdfdata と $filesize の 2 つの異なる変数で確認できるファイル サイズを教えてくれます。彼らは一致します。私が (文字セットのために) 切り捨てた応答は、サーバーによって既に切り捨てられていることに言及します。それが私が長さをチェックし始めた理由です。

最後に、0バイトのファイルを正常に送信できたので、ヘッダーである可能性がある場合に備えて、これらの行を以下に示します...

$body .= "--". $mime_boundary. "\r\n" ;
$body .= "Content-Type: application/octet-stream; name=\"".$filename."\"". "\r\n";
$body .= "Content-Transfer-Encoding: base64" . "\r\n";
$body .= "Content-Disposition: attachment;" . "\r\n";
$body .= "filename=\"".$filename."\"" . "\r\n\n";
$body .= $attachment . "\n\n";

「Content-Type」を「application/pdf」に変更できる(そして試した)ことは承知しています。

私の文字セットはUTF-8です。fopen() と fread() の「バイナリ セーフ」な説明を誤解している可能性がありますが、それによってスクリプトが失敗することはありません。それはすべきですか?

これを解決するための助けをいただければ幸いです。

4

1 に答える 1

1

Ok。それを私が直した。奇妙なことに、それは私のヘッダーにありました。

私が投稿したヘッダーコマンドは実際には正しかったです。悲しいことに、vcard 添付ファイル本文の修正を投稿しました。したがって、質問にはすでに私の答えが含まれていました。::ボンク::

この行は正しいです。

$body .= "filename=\"".$filename."\"" . "\r\n\n";
$body .= $attachment . "\n\n";

これは私が実際に持っていたものです。

$body .= "filename=\"".$filename."\"" . "\r\n";

これは、添付ファイルが 0 バイトだった理由を説明しています。

そして、実際に機能したスニペットを表示するだけです:

//File Manipulation
        $file = fopen($fullpath,'rb');
        $pdfdata = fread($file, filesize($fullpath));
        fclose($file);

    //Testing
        // echo $fullpath . "<br />\n";
        //echo "Filename: " .$filename . "<br />\n";
        //echo "Filesize: " .filesize($fullpath). "<br />\n";
        // echo "String Length: " .strlen($pdfdata). "<br />\n";
        //var_dump($pdfdata); // Don't remove this (as a comment) again. LOL
        // echo "Probable Errors for file_get_contents<br />\n";
        //$data = file_get_contents($pdfdata, true);

        $attachment = chunk_split(base64_encode($pdfdata));
        //$attachment = chunk_split(base64_encode(file_get_contents($pdfdata)));

誰かの時間を無駄にしたらごめんなさい。

于 2012-09-06T15:15:18.787 に答える