警告:file_get_contents(image.jpg)[function.file-get-contents]:无法打开流:php中没有这样的文件或目录

时间:2012-07-07 06:21:40

标签: php wordpress email-attachments

1.我正在尝试使用php mail()将我的jpg图像文件作为附件发送到邮件   功能

2.我的邮件附件用word文档(.doc作为附件)发送正常。但是,抛出   当我尝试将.jpg作为附件发送时出错。我使用的代码:

<?php
/*If there is no error, send the email*/
if(isset($_POST['submit-button-name'])) {       
  $uname=$_POST['uname'];                           
  $to = $_POST['mailid'];
  $mobileno=$_POST['mobile'];
  $location=$_POST['location'];
  $from = "Urname <urname@domainname.com>";
  $subject = $_POST['uname']." testing";
  $separator = md5(time());
  /* carriage return type (we use a PHP end of line constant)*/
    $eol = PHP_EOL;
  /*attachment name*/
    $filename = "image.jpg";
    $attachment = chunk_split(base64_encode(file_get_contents('image.jpg')));
  /*main header*/
    $headers  = "From: ".$from.$eol;
    $headers .= "MIME-Version: 1.0".$eol; 
    $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";
  /*no more headers after this, we start the body!*/
    $body = "--".$separator.$eol;
    $body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
    $body .= "Check out the attachment.".$eol;
 /*message*/
    $body .= "--".$separator.$eol;
    $body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
    $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
    $body .= $message.$eol;
 /*attachment*/
    $body .= "--".$separator.$eol;
$body .= "Content-Type: image/jpg; name=\"".$filename."\"".$eol; 
$body .= "Content-Transfer-Encoding: base64".$eol;
$body .= "Content-Disposition: attachment; file=\"".$filename."\"".$eol.$eol;
$body .= $attachment.$eol;
$body .= "--".$separator."--";
 /*send message*/
if (mail($to, $subject, $body, $headers)) {
    $mail_sent=true;
    echo "<font color='white'>Mail sent</font>";
    $frm="urname@domainname.com";
    $subj="Acknowledgement mail for Brochure form";
    $msg = $_POST['username'] . ",\n\nThank you for your recent enquiry.";
    $body = "Name: ".$_POST['uname'] ."\n\nEmail: ".$_POST['mailid'] ."\n\nMobile: 
        ".$_POST['mobile'] ."\n\nLocation: ".$_POST['location'];
    $headers = 'From: '.'careers@domainname.com';
    mail($frm,$subj,$body,$headers);
} else {
    $mail_sent=false;
}
if($mail_sent == true)
{
/*to clear the post values*/
  $uname="";
  $to="";
  $mobileno="";
  $location="";
}
else{
  echo "Error,Mail not sent";
}
    }
    ?>

3.出现错误:

警告:file_get_contents(image.jpg)[function.file-get-contents]:未能
open stream:第48行的footer.php中没有这样的文件或目录

4.我过去常常收到带有正文内容的邮件(“查看附件”)并且有   附件为image.jpg,带0k(没有打开图像)。

5.请帮忙。谢谢。紧急。

3 个答案:

答案 0 :(得分:0)

我认为内容类型是jpeg而不是jpg。

Content-Type: image/jpeg;

在添加附件的部分中。

还有一行:

$body .= "Content-Disposition: attachment; file=\"".$filename."\"".$eol.$eol;

$body .= "--".$separator."--";

可能应该是:

$body .= "Content-Disposition: attachment;".$eol.$eol;

$body .= "--".$separator."--".$eol;

答案 1 :(得分:0)

通过给予我的绝对路径来解决问题 -     file_get_contents(&#39;绝对路径&#39;); 我使用了$ _SERVER [&#39; DOCUMENT_ROOT&#39;]。&#39; filename&#39 ;; 它成功地完成了。 此外,我将图像/ jpg更改为image / jpeg。 谢谢大家。

答案 2 :(得分:0)

我通过在我的代码行中为我的图像提供完整的绝对路径来解决我的问题:

$attachment = chunk_split(base64_encode(file_get_contents('http://wordpress1/wp-content/themes/MyTheme/VyTCDC-brochure.jpg')));

所以,你可以走完全路。现在,它的工作就像一个魅力。