php echo line导致服务器上出现500内部服务器错误 - 在本地运行

时间:2014-11-19 03:01:33

标签: php phpmailer muse

我的客户在Adobe Muse中创建了一个网站,我需要修改它以使用经过身份验证的smtp服务器。

这一切在本地都可以正常工作但不能在服务器上工作(非adobe服务器)。电子邮件发送正常,但email_form_submission函数返回500错误。

它在共享主机上,所以我似乎无法访问当前的日志。服务器上的哪些配置会导致此错误?我无法想象它的编码错误,因为它在本地工作正常。我已重命名htmaccess文件以禁用它。

在表单提交时执行的代码:

<?php 
/*  
If you see this text in your browser, PHP is not configured correctly on this hosting provider. 
Contact your hosting provider regarding PHP configuration for your site.

PHP file generated by Adobe Muse CC 2014.2.1.284
*/

require_once('form_process.php');

$form = array(
    'subject' => 'CONNECT Form Submission',
    'heading' => 'New Form Submission',
    'success_redirect' => 'Thanks.html',
    'resources' => array(
        'checkbox_checked' => 'Checked',
        'checkbox_unchecked' => 'Unchecked',
        'submitted_from' => 'Form submitted from website: %s',
        'submitted_by' => 'Visitor IP address: %s',
        'too_many_submissions' => 'Too many recent submissions from this IP',
        'failed_to_send_email' => 'Failed to send email',
        'invalid_reCAPTCHA_private_key' => 'Invalid reCAPTCHA private key.',
        'invalid_field_type' => 'Unknown field type \'%s\'.',
        'unknown_method' => 'Unknown server request method'
    ),
    'email' => array(
        'from' => 'name@omain.org.nz',
        'to' => 'name@domain.org.nz'
    ),
    'fields' => array(
        'custom_U1619' => array(
            'type' => 'string',
            'label' => 'Name',
            'required' => true,
            'errors' => array(
                'required' => 'Field \'Name\' is required.'
            )
        ),
        'Email' => array(
            'type' => 'email',
            'label' => 'Email',
            'required' => true,
            'errors' => array(
                'required' => 'Field \'Email\' is required.',
                'format' => 'Field \'Email\' has an invalid email.'
            )
        ),
        'custom_U1624' => array(
            'type' => 'string',
            'label' => 'Message',
            'required' => false,
            'errors' => array(
            )
        ),
        'custom_U15959' => array(
            'type' => 'string',
            'label' => 'Cell Phone',
            'required' => false,
            'errors' => array(
            )
        ),
        'custom_U15963' => array(
            'type' => 'string',
            'label' => 'Home Phone',
            'required' => false,
            'errors' => array(
            )
        )
    )
);

process_form($form);
?>

从上述脚本调用的代码:

<?php 
/*  
If you see this text in your browser, PHP is not configured correctly on this hosting provider. 
Contact your hosting provider regarding PHP configuration for your site.

PHP file generated by Adobe Muse CC 2014.2.1.284
*/

require_once('form_throttle.php');



function process_form($form) {
    if ($_SERVER['REQUEST_METHOD'] != 'POST')
        die(get_form_error_response($form['resources']['unknown_method']));

    if (formthrottle_too_many_submissions($_SERVER['REMOTE_ADDR']))
        die(get_form_error_response($form['resources']['too_many_submissions']));

    // will die() if there are any errors
    check_required_fields($form);

    // will die() if there is a send email problem
    email_form_submission($form);
}

function get_form_error_response($error) {
    return get_form_response(false, array('error' => $error));
}

function get_form_response($success, $data) {
    if (!is_array($data))
        die('data must be array');

    $status = array();
    $status[$success ? 'FormResponse' : 'MusePHPFormResponse'] = array_merge(array('success' => $success), $data);

    return json_serialize($status);
}

function check_required_fields($form) {
    $errors = array();

    foreach ($form['fields'] as $field => $properties) {
        if (!$properties['required'])
            continue;

        if (!array_key_exists($field, $_REQUEST) || empty($_REQUEST[$field]))
            array_push($errors, array('field' => $field, 'message' => $properties['errors']['required']));
        else if (!check_field_value_format($form, $field, $properties))
            array_push($errors, array('field' => $field, 'message' => $properties['errors']['format']));
    }

    if (!empty($errors))
        die(get_form_error_response(array('fields' => $errors)));
}

function check_field_value_format($form, $field, $properties) {
    $value = get_form_field_value($field, $properties, $form['resources']);

    switch($properties['type']) {
        case 'checkbox':
        case 'string':
        case 'captcha':
            // no format to validate for those fields
            return true;

        case 'recaptcha':
            if (!array_key_exists('recaptcha', $form) || !array_key_exists('private_key', $form['recaptcha']) || empty($form['recaptcha']['private_key']))
                die(get_form_error_response($form['resources']['invalid_reCAPTCHA_private_key']));
            $resp = recaptcha_check_answer($form['recaptcha']['private_key'], $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
            return $resp->is_valid;

        case 'email':
            return 1 == preg_match('/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i', $value);

        default:
            die(get_form_error_response(sprintf($form['resources']['invalid_field_type'], $properties['type'])));
    }
}

function email_form_submission($form) {


    $form_email = ((array_key_exists('Email', $_REQUEST) && !empty($_REQUEST['Email'])) ? cleanup_email($_REQUEST['Email']) : '');

    $to = $form['email']['to'];
    $subject = $form['subject'];
    $message = get_email_body($subject, $form['heading'], $form['fields']);

    require 'PHPMailer/PHPMailerAutoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'server.domain.org.nz'; // update this line
    $mail->SMTPAuth = true;
    $mail->Username = 'email address'; // update this line
    $mail->Password = 'Passward'; // update this line

    $mail->From = 'name@domain.org.nz'; // update this line
    $mail->FromName = 'dpc website'; // update this line
    $mail->addAddress($form['email']['to']);
    $mail->isHTML(true);

    $mail->Subject = $form['subject'];
    $mail->Body = get_email_body($subject, $form['heading'], $form['fields'], $form['resources']);

    $sent = $mail->send();

    if(!$sent)
        die(get_form_error_response('Failed to send email'));

    $success_data = array(
        'redirect' => $form['success_redirect']
    );



    echo get_form_response(true, $success_data);


}

function get_email_headers($to_email, $form_email) {
    $headers = 'From: ' . $to_email . PHP_EOL;
    $headers .= 'Reply-To: ' . $form_email . PHP_EOL;
    $headers .= 'X-Mailer: Adobe Muse CC 2014.2.1.284 with PHP' . PHP_EOL;
    $headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL;

    return $headers;
}

function get_email_body($subject, $heading, $fields, $resources) {
    $message = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
    $message .= '<html xmlns="http://www.w3.org/1999/xhtml">';
    $message .= '<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><title>' . encode_for_form($subject) . '</title></head>';
    $message .= '<body style="background-color: #ffffff; color: #000000; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: 18px; font-family: helvetica, arial, verdana, sans-serif;">';
    $message .= '<h2 style="background-color: #eeeeee;">' . $heading . '</h2>';
    $message .= '<table cellspacing="0" cellpadding="0" width="100%" style="background-color: #ffffff;">'; 

    foreach ($fields as $field => $properties) {
        // Skip reCAPTCHA from email submission
        if ('recaptcha' == $properties['type'])
            continue;

        $message .= '<tr><td valign="top" style="background-color: #ffffff;"><b>' . encode_for_form($properties['label']) . ':</b></td><td>' . get_form_field_value($field, $properties, $resources) . '</td></tr>';
    }

    $message .= '</table>';
    $message .= '<br/><br/>';
    $message .= '<div style="background-color: #eeeeee; font-size: 10px; line-height: 11px;">' . sprintf($resources['submitted_from'], encode_for_form($_SERVER['SERVER_NAME'])) . '</div>';
    $message .= '<div style="background-color: #eeeeee; font-size: 10px; line-height: 11px;">' . sprintf($resources['submitted_by'], encode_for_form($_SERVER['REMOTE_ADDR'])) . '</div>';
    $message .= '</body></html>';

    return cleanup_message($message);
}

function is_assoc_array($arr) {
    if (!is_array($arr))
        return false;

    $keys = array_keys($arr);
    foreach (array_keys($arr) as $key)
        if (is_string($key)) return true;

    return false;
}

function json_serialize($data) {

    if (is_assoc_array($data)) {
        $json = array();

        foreach ($data as $key => $value)
            array_push($json, '"' . $key . '": ' . json_serialize($value));

        return '{' . implode(', ', $json) . '}';
    }

    if (is_array($data)) {
        $json = array();

        foreach ($data as $value)
            array_push($json, json_serialize($value));

        return '[' . implode(', ', $json) . ']';
    }

    if (is_int($data) || is_float($data))
        return $data;

    if (is_bool($data))
        return $data ? 'true' : 'false';

    return '"' . encode_for_json($data) . '"';
}

function encode_for_json($value) {
    return preg_replace(array('/([\'"\\t\\\\])/i', '/\\r/i', '/\\n/i'), array('\\\\$1', '\\r', '\\n'), $value);
}

function encode_for_form($text) {
    return htmlentities($text, ENT_COMPAT, 'UTF-8');
}

function get_form_field_value($field, $properties, $resources) {
    $value = $_REQUEST[$field];

    switch($properties['type']) {
        case 'checkbox':
            return (($value == '1' || $value == 'true') ? $resources['checkbox_checked'] : $resources['checkbox_unchecked']);

        case 'string':
        case 'captcha':
        case 'recaptcha':
        case 'email':
            return encode_for_form($value);

        default:
            die(get_form_error_response(sprintf($resources['invalid_field_type'], $properties['type'])));
    }
}

function cleanup_email($email) {
    $email = encode_for_form($email);
    $email = preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', null, $email);
    return $email;
}

function cleanup_message($message) {
    $message = wordwrap($message, 70, "\r\n");
    return $message;
}
?>

0 个答案:

没有答案