我早些时候发布的,但有更多的信息,所以想再试一次。我正试图帮助一位朋友解决他的网页上的联系表单的问题,这是使用SiteMan建立的。他的页面上有一个基本的"联系我"表单和一个"请求报价"表单。这个页面是meadowwoodpedestals.com,它托管在BlueHost上。这些表单已经工作多年了,但是我们刚刚发现他没有接收到通过这些表单发送的消息。经过测试,我们发现,当单击这两个页面中的任何一个的提交按钮时,不是得到一个确认屏幕,而是显示一个空白屏幕,并且没有发送任何消息。他已经几个月没有对SiteMan编辑器做任何修改了。
(1)我联系主机寻求支持,回复告诉我错误表明这两个页面的页面代码有问题:
脚本头过早结束:500.php, referer: http://www.meadowwoodpedestals.com/content/index.php?page=quote
脚本头过早结束:500.php, referer: http://www.meadowwoodpedestals.com/content/index.php?page=contact
回复说:正如你将看到的,问题似乎出在代码本身。为了解决这些问题,你需要让你的网页设计师或脚本专家检查这两个页面的代码。(注:网页设计师破产了)
(2)我在Bluehost论坛(这是一个Bluehost网站)发现了以下内容,我不确定它是否相关?
"在Bluehost服务器上,脚本头过早结束很可能是由于CPU配额(或内存?),脚本由于资源限制而被终止。"
(3)我查看了联系人表单的页面代码,它使用method="post" action="/cgi-bin/frmcact .php",所有的基本html看起来都很好-我不知道javascript,所以我不确定这一点(我以前从未见过那个小十字符号?):
<script type="text/javascript" language="javascript">
function m_sfcon (u) {
pre = "mail";
url = pre + "to:" + u;
document.location.href = url + "@meadowwoodpedestals.com";
}†</script>
(4)我查看了引用表单的页面代码,它使用method="post" action="/cgi-bin/mail/mail.php",并且该页上根本没有脚本标签。
(5)没有张贴大量的代码(因为我不确定什么是有用的),这是我的想法,请让我知道这是一个合理的轨道:
- 由于有两个不同的页面有相同的错误,我认为这不是一个真正的问题在quote.php或contact.php
- 这两种形式使用不同的动作,所以我猜它不是mail.php或frmcact .php
- ==>两个页面之间一定有一些共同之处,但它是什么呢?也许index . php ?
(6)我查看了index.php,当我单击开始的php标记时,它在这条语句的第六行结束了一个标记(在'si"之前的?>,):
$adress = "http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
include("data/page_header.php");
switch ($do) {
case "prevphp":
if ($Siteman->mlevel >= 4) {
echo preg_replace("'<'?php.*?'?>'si","",stripslashes($_POST["content"]));
}
break 1;
case "default":
if ($info[2] == 1 || $Siteman->mlevel >= $info[2]) {
include_once($content);
if ($Siteman->mlevel < 5) {
if ($page == "index") {
if (substr_count($_SERVER["HTTP_REFERER"],$adress) == 0) {
echo "<script language='"Javascript'" type='"text/javascript'">
var res = screen.width.toString() + 'x' + screen.height.toString();
var referer = '" . urlencode($_SERVER["HTTP_REFERER"]) . "';
document.write('<img width='"1'" height='"1'" src='"stats.php?new=1&res=' + res + '&referer=' + referer + ''" id='"stat'" name='"stat'" />');
</script>";
}
}
}
}
break 1;
}
include("data/page_footer.php");
?>
(我不知道为什么这个页面的地址拼写错误…)
我应该张贴完整的代码在cgi-bin/mail/mail.php和cgi-bin/frmcact .php到这个区域?
我真诚地感谢任何/所有的帮助!艾比编辑-这里是完整的框架。php -我删除了一些空白行和重复的警告
<?
// ##########################################################################
//
// DynaForm v1.4 - Created by the Webligo Group
// http://www.webligo.com
//
//--> I deleted license text here
// ###########################################################################
// #### CONFIGURE FROM: ADDRESS ##############################################
// If you would like to specify the From: address of emails sent by DynaForm,
// enter it between the double quotes below. If you leave this blank, the
// server will assign the default email address.
$from_address = "info@meadowwoodpedestals.com";
// ###########################################################################
// #### ACTIVATE REQUIRED FIELDS? ############################################
//
// If you would like to make some fields of your form required, change "no" to
// "yes" below.
$required_on = "yes";
// If you have set $required_on to "yes" above, you can make fields required
// by beginning their name with "r_". For example, if you want to require
// a user to enter their name, use the following HTML:
//
// <input type='text' name='r_Name'>
//
// If a user fails to enter a required field, they will be taken to a page
// where a message such as "You have not completed all the required fields."
// will be displayed. Please specify the URL to this file below:
$required_errorpage = "/content/index.php?page=formerror";
// ###########################################################################
// #### OVERRIDE REQUIRED VARIABLES? #########################################
//NOTE: THIS WILL NOT
// AFFECT YOUR 'TURN ON REQUIRED FIELDS?' SECTION SETTINGS ABOVE.
//
// If you would like to override the three required variables in
// order to hide your email address, email subject, and thank you page
// URL from your email form, change "no" to "yes" below.
$override = "yes";
// If override is set to "yes", the hidden variables on your HTML
// email form named "rec_mailto", "rec_subject", and "rec_thanks" will be
// overridden and can therefore be removed from the form.
// If you have set override to "yes" above, you must specify new values for
// each of these variables below.
// Enter the email address(es) to send the email to.
$incoming_mailto = "info@meadowwoodpedestals.com";
// Enter the email subject.
$incoming_subject = "Website form";
// Enter the thank you page URL.
$incoming_thanks = "/content/index.php?page=formthanks";
// ###########################################################################
// #### BAN IP ADDRESSES? ####################################################
//
// If you would like to ban certain IP addresses from submitting your form,
// change "no" to "yes" below.
$ban_ip_on = "no";
// If you have set $ban_ip_on to "yes" above, please enter a list of the
// IP addresses you would like to ban, seperated only by commas.
// An example has been provided below:
$ban_ip_list = "111.222.33.55,11.33.777.99";
// ###########################################################################
// #### ACTIVATE DOMAIN SECURITY? ############################################
//
// This setting, when set to "yes" (default), will check to make sure other
// people are not submitting data to your dynaform.php file from their
// external domains. This means that if your domain name is "www.mysite.com",
// only forms on "www.mysite.com" will be able to use this dynaform.php.
// IF YOU ARE RECEIVING ERRORS SUCH AS "INVALID DOMAIN" FOR NO REASON, PLEASE
// CHANGE "yes" TO "no" BELOW.
$secure_domain_on = "no";
// ###########################################################################
// #### ACTIVATE AUTO-RESPONSE? ##############################################
//
//
// This setting, when set to "yes", will make DynaForm automatically reply to
// the user who submitted your form with an email message. If you would like
// to use this feature, change "no" to "yes" below.
$autorespond_on = "no";
// If you have set $autorespond_on to "yes" above, you must specify a subject,
// from-address, and message to include in the auto-response email.
// The following setting is the subject of the auto-response email:
$autorespond_subject = "Your Form Submission";
// The following setting is the from-address of the auto-respond email:
$autorespond_from = "youremail@yoursite.com";
// The following setting is the message of your auto-response email:
$autorespond_contents = "Your submission from our website has been received. Thank you!";
// DynaForm also needs to know how to retrieve the user's email address.
// You must specify the name of the field into which the user will enter
// their email address. For example, if your email form contains an input
// field like "<input type='text' name='Email'>" you would set the
// following setting to "Email".
$autorespond_mailto_field = "Email";
// ###########################################################################
// MAKE SURE DYNAFORM IS NOT BEING LOADED FROM THE URL
if($HTTP_SERVER_VARS['REQUEST_METHOD'] == "GET") {
echo "
<html>
<head><title>Webligo PHP DynaForm is installed correctly.</title></head>
<body>
<font style='font-family: verdana, arial; font-size: 9pt;'>
<b>DynaForm is installed correctly.</b></font><br>
<font style='font-family: verdana, arial; font-size: 8pt;'>
DynaForm Easy PHP Form Mailer was created by <a href='http://www.webligo.com'>Webligo Developments</a>.
</font>
</body></html>
";
exit();
}
// SET VARIABLES
$incoming_fields = array_keys($HTTP_POST_VARS);
$incoming_values = array_values($HTTP_POST_VARS);
if($override == "no") {
$incoming_mailto = @$HTTP_POST_VARS['rec_mailto'];
$incoming_subject = @$HTTP_POST_VARS['rec_subject'];
$incoming_thanks = @$HTTP_POST_VARS['rec_thanks'];
}
$incoming_mailto_cc = @$HTTP_POST_VARS['opt_mailto_cc'];
$incoming_mailto_bcc = @$HTTP_POST_VARS['opt_mailto_bcc'];
$form_url = @$HTTP_REFERER;
// MAKE SURE DYNAFORM IS BEING RUN FROM THE RIGHT DOMAIN
if($secure_domain_on == "yes") {
$form_url_array = parse_url($form_url);
$form_domain = $form_url_array[host];
if($form_domain != $HTTP_SERVER_VARS[HTTP_HOST]) {
echo "<h2>DynaForm Error - Invalid Domain</h2>
You have accessed DynaForm from an external domain - this is not allowed.<br>
You may only submit forms to a DynaForm file that exists on the same domain name.<br>
If you believe to be receiving this message in error, please refer to your readme.txt file.
<br><br>";
$error = "yes";
}
}
// CHECK IF MAILTO IS SET
if($incoming_mailto == "") {
echo "<h2>DynaForm Error - Missing Field</h2>
Your form located at <a href='$form_url'>$form_url</a> does not work because you forgot to include
the required '"<b>rec_mailto</b>'" field within the form. This field specifies who the email will
be sent to.
<br><br>
This should look like:<br>
<input type='"hidden'" name='"rec_mailto'" value='"youremail@yoursite.com'">
<br><br>
If you are still confused, please refer to the readme.txt for more information and examples.<br><br><br><br>
";
$error = "yes";
}
// CHECK IF SUBJECT IS SET
if($incoming_subject == "") {
echo "<h2>DynaForm Error - Missing Field</h2>
Your form located at <a href='$form_url'>$form_url</a> does not work because you forgot to include
the required '"<b>rec_subject</b>'" field within the form. This field specifies the subject of
the email that will be sent.
<br><br>
This should look like:<br>
<input type='"hidden'" name='"rec_subject'" value='"New DynaForm Email'">
<br><br>
If you are still confused, please refer to the readme.txt for more information and examples.<br><br><br><br>
";
$error = "yes";
}
// CHECK IF THANKS IS SET
if($incoming_thanks == "") {
echo "<h2>DynaForm Error - Missing Field</h2>
Your form located at <a href='$form_url'>$form_url</a> does not work because you forgot to include
the required '"<b>rec_thanks</b>'" field within the form. This field specifies what page the user
will be taken to after they submit the form.
<br><br>
This should look like:<br>
<input type='"hidden'" name='"rec_thanks'" value='"thanks.html'">
<br><br>
If you are still confused, please refer to the readme.txt for more information and examples.<br><br><br><br>
";
$error = "yes";
}
// CHECK IF IP ADDRESS IS BANNED
if($ban_ip_on == "yes") {
if(strstr($ban_ip_list, $HTTP_SERVER_VARS[REMOTE_ADDR])) {
echo "<h2>DynaForm Error - Banned IP</h2>
You cannot use this form because your IP address has been banned by the administrator.<br>
";
$error = "yes";
}
}
if($error == "yes") {
exit();
}
// SET EMAIL INTRODUCTION
$message = "This email was received from your DynaForm located at $form_url 'n'n";
// LOAD EMAIL CONTENTS
for ($i = 0; $i < count($incoming_fields); $i++) {
if($incoming_fields[$i] != "rec_mailto") {
if($incoming_fields[$i] != "rec_subject") {
if($incoming_fields[$i] != "rec_thanks") {
if($incoming_fields[$i] != "opt_mailto_cc") {
if($incoming_fields[$i] != "opt_mailto_bcc") {
// CHECK FOR REQUIRED FIELDS IF ACTIVATED
if($required_on == "yes") {
$sub = substr($incoming_fields[$i], 0, 2);
if($sub == "r_") {
if($incoming_values[$i] == "" OR !isset($incoming_values[$i]) OR $incoming_values[$i] == " ") {
header("Location: $required_errorpage");
exit();
}}}
// ADD FIELD TO OUTGOING MESSAGE
$message .= "$incoming_fields[$i]:'n$incoming_values[$i]'n'n";
}}}}}}
// SET EMAIL FOOTER
$message .= "'n'nEnd";
// CLEAR HEADERS
$headers = "";
// ADD FROM ADDRESS
if($from_address != "") {
$headers .= "From: $from_address'r'n";
}
// CHECK FOR CC OR BCC
if($incoming_mailto_cc != "") {
$headers .= "Cc: $incoming_mailto_cc'r'n";
}
if($incoming_mailto_bcc != "") {
$headers .= "Bcc: $incoming_mailto_bcc'r'n";
}
// SEND EMAIL
mail($incoming_mailto, $incoming_subject, $message, $headers);
// SEND AUTO-RESPONSE IF ACTIVATED
if($autorespond_on == "yes") {
$autorespond_mailto = @$HTTP_POST_VARS[$autorespond_mailto_field];
$autorespond_headers = "From: $autorespond_from";
mail($autorespond_mailto, $autorespond_subject, $autorespond_contents, $autorespond_headers);
}
// FORWARD TO THANK YOU PAGE
header("Location: $incoming_thanks");
?>
500个错误表示PHP正在崩溃。您需要查看apache错误日志(bluehost在cpanel, IIRC中有一个图标),并希望看到一些PHP错误消息。
[人们说]"由于资源限制,脚本被杀死了。"
我不认为是这样,因为500错误在提交表单后立即发生。