所以我试着在2个不同的服务器上发布一个PHP联系表单页面,我不能让它们中的任何一个都完美地工作。
服务器1:
在提交时返回500 internal error
页面。
我联系了网络支持,他们回复说我有一个:
从脚本'index.php':错误的头:
index.php的代码如下:
<?php
if(isset($_POST['submit']))
{
$name = $_POST['name'];
$email = $_POST['email'];
$query = $_POST['message'];
$email_from = $name.'<'.$email.'>';
$to="testemail@email.com";
$subject="test subject";
$headers = 'MIME-Version: 1.0' . "'r'n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "'r'n";
$headers .= "From: ".$email_from."'r'n";
$message="
Name:
$name
<br>
Email:
$email
<br>
Message:
$query
";
if(mail($to,$subject,$message,$headers))
header("Location:../contact.php?msg=Successful Submission!<br />
Thank you for contacting us.");
else
header("Location:../contact.php?msg=Error To send Email !");
}
?>
服务器2:
链接我到我的"感谢页面"正确,但它显示"发送电子邮件出错!"而不是"成功提交!"
任何帮助或建议将不胜感激!
我认为问题出在这部分:
if(mail($to,$subject,$message,$headers))
header("Location:../contact.php?msg=Successful Submission!<br />
Thank you for contacting us.");
else
header("Location:../contact.php?msg=Error To send Email !");
特别是在header();
- 每个空格将转换为%20,因为没有带空格的url;
- 没有像<,>, !在url
-
<br />
中的"/"表示一个名为">Thank you for contact us"的文件。
查看:http://www.w3schools.com/tags/ref_urlencode.asp;
还将exit();
放在每个头之后,以防止进一步执行脚本
问题似乎是标头位置重定向调用应该提供一个完整的url,例如:
header("Location: http://www.example.com");
相对url是根据浏览器的最大努力处理的,你的浏览器显然不喜欢…/,因此有"坏头文件"的抱怨。
这是在php.net页面上根据官方URL规范标注的