2013-03-21 53 views
0

我試圖做一個聯繫表,我得到這個通用錯誤:聯繫我們的電子郵件PHP錯誤

Internal Server Error 

The server encountered an internal error or misconfiguration and was unable to complete your request. 

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error. 

More information about this error may be available in the server error log. 

我無法弄清楚如何得到它實際登錄或回聲錯誤。這是我的PHP文件:

<?php 
ini_set('display_errors', true); 
ini_set('log_errors', true); 
error_reporting(E_ALL); 
ini_set('error_log', 'php.log'); 
$field_fname = $_GET['fname'] ; 
$field_lname = $_GET['lname'] ; 
$field_bname = $_GET['bname'] ; 
$field_email = $_GET['email'] ; 
$field_address = $_GET['address'] ; 
$field_city = $_GET['city'] ; 
$field_state = $_GET['state'] ; 
$field_zip = $_GET['zip'] ; 
$field_country = $_GET['country'] ; 
$field_comments = $_GET['comments'] ; 

$mail_to = '[email protected]'; 
$subject = 'Message from a site visitor '.$field_fname .$field_lname; 

$body_message = 'From: '.$field_fname .$field_lname 'at' .$field_bname "\n"; 
$body_message = 'E-mail: '.$field_email "\n"; 
$body_message = 'Address:'.$field_address "\n"; 
$body_message = 'City:'.$field_city "\n"; 
$body_message = 'State:'.$field_state "\n"; 
$body_message = 'Zip Code:'.$field_zip "\n"; 
$body_message = 'Country:'.$field_country "\n"; 
$body_message = 'Message: '.$field_comments; 

$headers = 'From: '.$field_email."\r\n"; 
$headers .= 'Reply-To: '.$field_email."\r\n"; 

$mail_status = mail($mail_to, $subject, $body_message, $headers); 

if ($mail_status) { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Thank you for the message. We will contact you shortly.'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
else { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Message failed. Please, send an email to [email protected]'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
?> 

我不知道我在做什麼是錯的。如果有人能夠幫助我找到錯誤或指示我登錄或迴應錯誤,我會非常感激。

感謝

+0

什麼版本的PHP?在5.4之前,你應該做'error_reporting(E_ALL | E_STRICT)'。看到這裏:http://php.net/manual/en/function.error-reporting.php – Raekye 2013-03-21 22:07:31

+0

你也錯過了20號線上的另一個時期,一個21,一個22,一個23,一個24,一個25和26上的一個。 – 2013-03-21 22:12:12

回答

1

構建$body_message當你丟失級聯器的堆(.)。

$body_message = 'From: '.$field_fname .$field_lname.'at' .$field_bname."\n"; 
$body_message = 'E-mail: '.$field_email."\n"; 

等等。

任何體面的編輯器都會在保存文件之前將其標記爲錯誤。

1

我把你的代碼在一個名爲so.php 文件,它有一個語法錯誤行20

PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in so.php on line 20

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in so.php on line 20

Errors parsing so.php

你錯過在之後的第20行上的連接點之前和之前'at'

您可能有興趣在本地安裝php(例如簡單的wamp),然後將php可執行文件放在您的路徑中,以便您可以運行命令行php -l filename.php以獲得即時解析錯誤像上面那樣的消息。

這裏是你的代碼與固定全解析錯誤:

<?php 
ini_set('display_errors', true); 
ini_set('log_errors', true); 
error_reporting(E_ALL); 
ini_set('error_log', 'php.log'); 
$field_fname = $_GET['fname'] ; 
$field_lname = $_GET['lname'] ; 
$field_bname = $_GET['bname'] ; 
$field_email = $_GET['email'] ; 
$field_address = $_GET['address'] ; 
$field_city = $_GET['city'] ; 
$field_state = $_GET['state'] ; 
$field_zip = $_GET['zip'] ; 
$field_country = $_GET['country'] ; 
$field_comments = $_GET['comments'] ; 

$mail_to = '[email protected]'; 
$subject = 'Message from a site visitor '.$field_fname .$field_lname; 

$body_message = 'From: '.$field_fname .$field_lname .'at' .$field_bname ."\n"; 
$body_message = 'E-mail: '.$field_email ."\n"; 
$body_message = 'Address:'.$field_address ."\n"; 
$body_message = 'City:'.$field_city ."\n"; 
$body_message = 'State:'.$field_state ."\n"; 
$body_message = 'Zip Code:'.$field_zip ."\n"; 
$body_message = 'Country:'.$field_country ."\n"; 
$body_message = 'Message: '.$field_comments; 

$headers = 'From: '.$field_email."\r\n"; 
$headers .= 'Reply-To: '.$field_email."\r\n"; 

$mail_status = mail($mail_to, $subject, $body_message, $headers); 

if ($mail_status) { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Thank you for the message. We will contact you shortly.'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
else { ?> 
    <script language="javascript" type="text/javascript"> 
     alert('Message failed. Please, send an email to [email protected]'); 
     window.location = 'index.html'; 
    </script> 
<?php 
} 
?> 
+0

謝謝我現在看到並修復了它。儘管如此,我仍然遇到了一般錯誤。生病繼續搜索 – vman411gamer 2013-03-21 22:20:31

+0

也許值得一提的是,PHP中的郵件功能在許多共享服務器上被禁用。 – 2013-03-21 22:24:52

+0

嘗試註釋郵件行並查看它是否不再提供通用服務器錯誤。 – 2013-03-21 22:25:23

1

您很可能在默認情況下關閉顯示錯誤的服務器上。你應該能夠讓他們在腳本(假設你不能訪問服務器的conf或只希望它爲一個腳本)在你的PHP的頂部,這樣的:

ini_set("display_errors", "on"); 

那麼就應該輸出你的錯誤。

+0

不幸的是,大多數服務器配置不會給你分析錯誤的行號。在命令行模式下,'php -l'對於這類事情非常有用。 – 2013-03-21 22:13:07

+1

你知道,我從來沒有shell訪問服務器,我無法display_errors,所以我從來沒有遇到過。這就是爲什麼我開發一個不同的系統...... – 2013-03-21 22:15:45

+0

是的,如果一個人運行Windows操作系統,他們可以安裝wamp並將包含php.exe的目錄添加到他們的路徑中,並運行我在說的命令行模式lint check。 +1爲您在開發期間關閉display_errors的建議! – 2013-03-21 22:18:43

0

你在日誌中沒有得到任何東西的原因是因爲設置錯誤日誌和日誌文件的php文件包含語法錯誤,因此無法解析,所以錯誤日誌選項從不設置。爲了避免這種情況,我建議把它放在php.ini文件或者.htaccess文件中,如果可能的話。你可以看到這是如何完成的:http://perishablepress.com/advanced-php-error-handling-via-htaccess/