Php 内容传输编码问题

Php 内容传输编码问题,php,transfer-encoding,Php,Transfer Encoding,我这里有个问题。我创建了一个mail()PHP脚本来发送附件,您通常会向常规电子邮件提供商发送附件。问题是我只能发送一定数量的字符。例如,我可以发送一个名为“New Text Document”的文件,但如果我尝试发送一个名为“New Document of Microsoft Word(3)”的文件,它将永远不会到达我的电子邮件 有人能告诉我为什么会这样吗 error_reporting(-1); if(empty($_POST) === false){ $errors = array();

我这里有个问题。我创建了一个mail()PHP脚本来发送附件,您通常会向常规电子邮件提供商发送附件。问题是我只能发送一定数量的字符。例如,我可以发送一个名为“New Text Document”的文件,但如果我尝试发送一个名为“New Document of Microsoft Word(3)”的文件,它将永远不会到达我的电子邮件

有人能告诉我为什么会这样吗

error_reporting(-1);
if(empty($_POST) === false){
$errors = array();

$name = $_POST['name'];
$email = $_POST['email'];
$file = $_FILES['filename'];

if(empty($name) === true || empty($email) === true || empty($_POST['message']) === true){
  $errors[] = 'Name, email and message are required!';
} else {
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
   $errors[] ='Not a valid email';
  }
  if(ctype_alpha($name) === false){
   $errors[] ='Name must only contain letters';
  }
}
$message;
if(empty($errors) === true){
  if($_FILES['filename']['error'] == UPLOAD_ERR_OK){
   $boundary = '-----' . md5(rand()) . '---';
   $headers = array(
    'MIME-Version: 1.0',
    "Content-type: multipart/mixed; boundary=\"{$boundary}\"",
    "From: {$email}"
   );
   $message = array(
    "--{$boundary}",
    'Content-type: text/html',
    'Content-Transfer-Encoding: 7bit',
    '',
    chunk_split($_POST['message']),
    "--{$boundary}",
    "Content-type: {$file['type']}; name=\"{$file['name']}\"",
    "Content-Disposition: attachment; filename=\"{$file['name']}\"",
    'Content-Transfer-Encoding: base64',
    '',
    chunk_split(base64_encode(file_get_contents($file['tmp_name']))),
    "--{$boundary}--"
   );
   $message = implode("\r\n", $message);
  } else {
   $headers = array(
    "From: {$email}"
   );
   $message = &$_POST['message'];
  }
  //send email
  var_dump(mail($email, 'Contact form', $message, implode("\r\n", $headers)));

   echo $_FILES['filename']['name'];
  /*//redirect user
  header('Location: index.php?sent');
  exit();*/
}  
}
?

<!doctype html>
<html>
<head>
  <title>A contact form</title>
</head>
<body>
  <?php
   if(isset($_GET['sent']) === true){
    echo '<p>Thanks for contacting us</p>';
   } else {
    if(empty($errors) === false){
         echo '<ul>';
         foreach($errors as $error){
          echo '<li>', $error ,'</li>';
         }
         echo '</ul>';
    }
            ?>
            <form action="" method="post" enctype="multipart/form-data">
                    <p>
                            <label for="name">Name:</label><br />
                            <input type="text" name="name" id="name" <?php     if(isset($_POST['name']) === true){ echo 'value="', strip_tags($_POST['name']), '"';} ?>>
                    </p>
                    <p>
<label for="email">Email:</label><br />
                            <input type="text" name="email" id="email" <?php     if(isset($_POST['email']) === true){ echo 'value="', strip_tags($_POST['email']), '"';} ?>>
                    </p>
                    <p>
                            <label for="message">Message:</label><br />
                            <textarea name="message" id="message"><?php     if(isset($_POST['message']) === true){ echo strip_tags($_POST['message']); } ?></textarea>
                    </p>
                    <p>
                            List of files allowed: .pdf, .odt, .doc(x), xls(x), ppt(x), >xps, xml
                    </p>
                    <p>
                            <input type="file" name="filename">
                    </p>
                    <p>
                            <input type="submit" value="submit">
                    </p>
            <?php
                    }
            ?>
            </form>
</body>
</html>
错误报告(-1);
if(空($\u POST)==false){
$errors=array();
$name=$_POST['name'];
$email=$_POST['email'];
$file=$_文件['filename'];
如果(空($name)==true | |空($email)==true | |空($_POST['message'])==true){
$errors[]=“需要姓名、电子邮件和消息!”;
}否则{
if(filter\u var($email,filter\u VALIDATE\u email)==false){
$errors[]=“不是有效的电子邮件”;
}
if(ctype_alpha($name)==false){
$errors[]=“名称必须仅包含字母”;
}
}
$message;
if(空($errors)==true){
如果($\u FILES['filename']['error']==上传错误确定){
$boundary='-'.md5(rand())'-';
$headers=数组(
'MIME版本:1.0',
“内容类型:多部分/混合;边界=\”{$boundary}\”,
“发件人:{$email}”
);
$message=数组(
“{$boundary}”,
'内容类型:text/html',
'内容传输编码:7bit',
'',
区块分割($\u POST['message']),
“{$boundary}”,
“内容类型:{$file['type']};名称=\”{$file['name']}\”,
“内容处置:附件;文件名=\”{$file['name']}\”,
'内容传输编码:base64',
'',
区块分割(base64编码(文件获取内容($file['tmp\u name'])),
“{$boundary}--”
);
$message=内爆(“\r\n”,$message);
}否则{
$headers=数组(
“发件人:{$email}”
);
$message=&$_POST['message'];
}
//发送电子邮件
var_dump(邮件($email,'Contact form',$message,introde(“\r\n”,$headers));
echo$_文件['filename']['name'];
/*//重定向用户
标题('Location:index.php?sent');
退出()*/
}  
}
?
联系方式

名称:
>

消息:

允许的文件列表:.pdf、.odt、.doc(x)、xls(x)、ppt(x),>xps、xml

它发送附件,但仅当文件名包含10个字符时,例如文件名包含10个字符,但如果文件名包含15个字符,则不会发送附件

   $filename = preg_replace("/[^A-Za-z0-9\.]/", "" $file['name']); ;

   "Content-Disposition: attachment; filename=\"{$filename}\""

应该有用。不是字符数,而是奇怪的字符(“(”,”)等)把事情搞砸了。

但字符并不奇怪“新文本文档”和“Microsoft Word新文档(3)”非常正常,此外,我试图发送一个名为(3).zip的文件,但发送得很好。我无法回复,所以我只在这里发表评论。