php echo line causes 500 internal server error on server - runs locally

1.4k views Asked by At

A client of mine created a site in Adobe Muse and I need to modify it to use a authenticated smtp server.

It all works fine locally but will not work on the server (non adobe server). The email is sent fine but email_form_submission function returns a 500 error.

Its on shared hosting so I don't seem to have access to logs currently. What configuration on the server would cause this error? I don't imagine its a coding error as it works fine locally. I have renamed the htmaccess file to disable it.

Code executed on form submit:

<?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' => '[email protected]',
        'to' => '[email protected]'
    ),
    '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);
?>

Code called from the above script:

<?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 = '[email protected]'; // 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

There are 0 answers