1 Востаннє редагувалося IS1971 (14.08.2018 15:21:59)

Тема: Помилка Server responded with 500 code

Добрий день!
Є сайт https://rahmenfrei.live/ua/podelitsya/ на Wordpress. Розробник його толком не доробив. Кілька функцій не працює. Знайома просить розібратись з помилкою. При спробі вкласти файл видається помилка "Server responded with 500 code". Доступ до хостингу/коду є. Але я не спец в PHP. Не усе зрозуміло, а часу на пошуки не дуже є. Бажано сайт запустити

Це код з шаблона сторінки
[code=PHP]<?php

get_header(); ?>
    <main class="main upload">
        <div class="upload__wrap">
            <h1 class="upload__h"><?php echo __('Мы очень благодарны всем, кто хочет поделиться', 'rahmenfrei'); ?> </h1>
            <h5 class="upload__hel"><?php echo __('Расскажите о своем материале - и он обязательно будет рассмотрен', 'rahmenfrei'); ?></h5>
            <form class="form"  method="post" id="message_form" action="/wp-admin/admin-ajax.php">
                <?php wp_nonce_field('user_message_form', 'user_message_form_nonce'); ?>
                <input type="hidden" name="action" value="user_message_form">
                <div class="form__fldst form__fldst--h">
                    <label for="name" class="form__l"><?php echo __('Меня зовут (подпись автора)', 'rahmenfrei'); ?></label>

                    <span class="name-c">
                        <input class="form__i" name="name" id="name" type="text">
                    </span>
                </div>
                <div class="form__fldst form__fldst--h">
                    <label for="email" class="form__l"><?php echo __('Мой контактный e-mail', 'rahmenfrei'); ?></label>

                    <span class="email-c">
                        <input class="form__i" type="email" name="email" id="email">
                    </span>
                </div>
                <div class="form__fldst">
                    <label for="subject" class="form__l"><?php echo __('Заголовок', 'rahmenfrei'); ?></label>

                    <span class="textarea-c">
                        <input class="form__i" name="subject" id="subject" type="text">
                    </span>
                </div>
                <div class="my-dz"></div>
                <div class="form__fldst form__fldst--btn"><button class="btn" type="submit"><?php echo __('Поделиться', 'rahmenfrei'); ?></button></div>
                <div class="form-d">
                    <img class="dz-message needsclick" src="<?php echo get_template_directory_uri(); ?>/assets/img/upload.svg" alt="dropzone">
                    <div class="dz-message needsclick"><?php echo __('Перетащите сюда файл или <span>откройте с компьютера</span>', 'rahmenfrei'); ?>
                    </div>
                </div>
            </form>
        </div>
    </main>

<style>
    #ifile{
        display:none;
    }
</style>

<?php
get_footer();[/code]


Це код з upload.php. Підключний в function.php теми
[code=PHP]<?php

add_action('init', 'register_upload_post_type');
function register_upload_post_type()
{
    register_post_type('user_message', array(
        'label' => null,
        'labels' => array(
            'name' => 'Сообщение',
            'singular_name' => 'Сообщение',
            'add_new' => 'Добавить Сообщение',
            'add_new_item' => 'Добавление Сообщение',
            'edit_item' => 'Редактирование Сообщение',
            'new_item' => 'Новое Сообщение',
            'view_item' => 'Смотреть Сообщение',
            'search_items' => 'Искать Сообщение',
            'not_found' => 'Не найдено',
            'not_found_in_trash' => 'Не найдено в корзине',
            'parent_item_colon' => '',
            'menu_name' => 'Сообщения',
        ),
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_icon' => 'dashicons-id-alt',
        'query_var' => true,
        'capability_type' => 'post',
        'has_archive' => false,
        'hierarchical' => false,
        'menu_position' => 10,
        'supports' => array('title'),
    ));
}

add_action('wp_ajax_nopriv_user_message_file_upload', 'user_message_file_upload');
add_action('wp_ajax_user_message_file_upload', 'user_message_file_upload');


function user_message_file_upload()
{
    $status = 0;
    $message = '';
    $allowed_myme_types = [
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'image/gif',
        'image/jpeg',
        'image/png',
        'application/pdf',
        'text/plain'
    ];
    if (!empty($_FILES)) {
        $files = $_FILES;
        foreach ($files as $file) {
            $newfile = array(
                'name' => $file['name'],
                'type' => $file['type'],
                'tmp_name' => $file['tmp_name'],
                'error' => $file['error'],
                'size' => $file['size']
            );
            $mime_type = mime_content_type($file['tmp_name']);
            if (!in_array($mime_type, $allowed_myme_types)) {
                $message = __('type not allowed', 'rahmenfrei');
            } else {
                $_FILES = array('upload' => $newfile);
                foreach ($_FILES as $file => $array) {
                    $id = media_handle_upload($file, 0);
                    if ($id) {
                        $status = 1;
                        $message = $id;
                    }
                }
            }
        }
    }
    wp_send_json(['status' => $status, 'message' => $message]);
}

add_action('wp_ajax_nopriv_user_message_file_delete', 'user_message_file_delete');
add_action('wp_ajax_user_message_file_delete', 'user_message_file_delete');

function user_message_file_delete()
{
    $responce = ['status' => 'FAILED'];
    if (isset($_REQUEST['media_id'])) {
        $post_id = absint($_REQUEST['media_id']);
        $status = wp_delete_attachment($post_id, true);

        if ($status) {
            $responce['status'] = 'DELETED';
        }
    }
    wp_send_json($responce);
}

add_action('wp_ajax_nopriv_user_message_form', 'user_message_form');
add_action('wp_ajax_user_message_form', 'user_message_form');

function user_message_form()
{
    if ( empty($_POST) || !wp_verify_nonce($_POST['user_message_form_nonce'],'user_message_form') )
    {
        die('invalid nonce field');
    }

    $s = false;
    $errors = array();
    $message = '';
    $data = rahmenfrei_sanitize_data($_POST);

    if (empty($data['name'])) {
        $errors['name'] = __('Ім\'я не може бути пустим', 'rahmenfrei');
    } else if (mb_strlen($data['name']) > 100) {
        $errors['name'] = __('Name can not be longest then 100 symbols', 'rahmenfrei');
    }

    if (empty($data['email'])) {
        $errors['email'] = __('Емейл не може бути пустим', 'rahmenfrei');
    } else if (!preg_match('/^\S+@\S+\.\S+$/isD', $data['email'])) {
        $errors['email'] = __('Incorrect email', 'rahmenfrei');
    }

    if (empty($data['subject'])) {
        $errors['subject'] = __('Заголовок не може бути пустим', 'rahmenfrei');
    }

//    if (!empty($data['name']) && !preg_match('/^[\'\p{L}.\-\s]+$/i', str_replace("\'", "'", $data['name']))) {
//        $errors['name'] = __('You have invalid symbols in this field', 'rahmenfrei');
//    }


    if (empty($errors)) {
        $id = wp_insert_post(array(
            'post_title' => date('d.m.Y H:i:s') . ' ' . $data['name'] . ' (' . $data['email'] . ')',
            'post_type' => 'user_message',
            'post_status' => 'publish'
        ));
        if ($id > 0) {
            $unreaded_messages = get_option('unreaded_messages', 0);
            update_option('unreaded_messages', $unreaded_messages + 1);
            update_post_meta($id, 'message_name', $data['name']);
            update_post_meta($id, 'message_email', $data['email']);
            update_post_meta($id, 'message_subject', $data['subject']);
            if (!empty($data['file'])) {
                foreach ($data['file'] as $file) {
                    add_post_meta($id, 'message_attachment', $file);
                }
            }
            $from_name = get_option('blogname');
            $from_email = 'no-reply@rahmenfrei.com';
            $mail_headers = "From: " . $from_name . " <" . $from_email . ">" . "\r\n";
            $mail_headers .= "MIME-Version: 1.0\r\n";
            $mail_headers .= "Content-Type: text/html; charset=utf-8\r\n";
//            $mail_headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
            $mail_headers .= "Reply-To: {$from_email}" . "\r\n" . $mail_headers .= "X-Mailer: PHP/" . phpversion();
            $mail_body = "<p><strong>" . __('Name:', 'rahmenfrei'). " </strong>{$data['name']}</p>";
            $mail_body .= "<p><strong>" . __('E-mail:', 'rahmenfrei'). " </strong>{$data['email']}</p>";
            $mail_body .= "<p><strong>" . __('Subject:', 'rahmenfrei'). " </strong>{$data['subject']}</p>";

            if (!empty($data['files'])) {
                $mail_body .= "<h2>" . __('Attachments', 'rahmenfrei') . "</h2>";
                foreach ($data['file'] as $file) {
                    $mail_body .= "<p><a href='" . wp_get_attachment_url($file)  ."' download>" . wp_get_attachment_url($file) . "</a></p>";
                }
            }

            wp_mail(get_option('admin_email'), 'New Message', $mail_body, $mail_headers);
            $s = true;
            $message =  __("Your message was send. We'll be in touch with you soon", 'rahmenfrei') ;
        }
    }
    $response = json_encode(array(
        'status' => $s,
        'errors' => $errors,
        'message' => $message
    ));
    die($response);
}


if (!function_exists('rahmenfrei_sanitize_data')) {
    function rahmenfrei_sanitize_data($data_to_sanitize)
    {
        if (!$data_to_sanitize) {
            return null;
        }
        $sanitized_data = [];
        foreach ($data_to_sanitize as $k => $v) {
            if (is_array($v)) {
                $sanitized_data[$k] = rahmenfrei_sanitize_data($v);
            } else {
                $sanitized_data[$k] = trim(strip_tags($v));
            }
        }
        return $sanitized_data;
    }
}

add_action('add_meta_boxes', 'user_message_metabox');
function user_message_metabox()
{

    add_meta_box(
        'message_metabox_id',           // Unique ID
        'Данные сообщения',  // Box title
        'message_metabox_html',
        'user_message'
    );

    add_meta_box(
        'attachment_metabox_id',           // Unique ID
        'Файлы',  // Box title
        'attachment_metabox_html',
        'user_message'
    );
}

function message_metabox_html($post)
{
    ?>
    <p>
        <label for="user_name"
               style="width:150px; display:inline-block;"> <?php echo esc_html__('User name', 'text-domain') ?></label>
        <input type="text" name="order_meta[user_name]" id="user_name" class="title_field"
               value="<?php echo get_post_meta($post->ID, 'message_name', true); ?>"
               style="width:300px;"/>
    </p>
    <p>
        <label for="user_name"
               style="width:150px; display:inline-block;"> <?php echo esc_html__('User email', 'text-domain') ?></label>
        <input type="text" name="order_meta[user_name]" id="user_name" class="title_field"
               value="<?php echo get_post_meta($post->ID, 'message_email', true); ?>"
               style="width:300px;"/>
    </p>
    <p>
        <label for="user_name"
               style="width:150px; display:inline-block;"> <?php echo esc_html__('subject', 'text-domain') ?></label>
        <input type="text" name="order_meta[user_name]" id="user_name" class="title_field"
               value="<?php echo get_post_meta($post->ID, 'message_subject', true); ?>"
               style="width:300px;"/>
    </p>

    <?php
}

function attachment_metabox_html($post)
{
$attachments = get_post_meta($post->ID, 'message_attachment');
?>
<?php if (!empty($attachments)): ?>
    <ul>
        <?php foreach ($attachments as $attachment): ?>
            <li> <a href="<?php echo wp_get_attachment_url($attachment); ?>" download><?php echo wp_get_attachment_url($attachment); ?></a></li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>
<?php
}

add_action('admin_init', 'cancel_unreaded_messages');
function cancel_unreaded_messages()
{
    // Global object containing current admin page
    global $pagenow;
    if ($pagenow === 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'user_message') {
        update_option('unreaded_messages', 0);
    }
}

function unreaded_messages_menu_bubble()
{
    global $menu;
    $count = get_option("unreaded_messages", 0);
    if ($count) {
        foreach ($menu as $k => $v) {
            if ($v[0] == 'Сообщения') {
                $menu[$k][0] .= ' <span class="update-plugins"><span class="application_menu_counter">' . $count . '</span></span>';
                return;
            }
        }
    }
}

add_action('admin_menu', 'unreaded_messages_menu_bubble');
[/code]


Був би дуже вдячний за допомогу. Підштовхніть куди рити? Науковим медотом закоментарення рядків так і толком не прийшов до якогось результату. Що можу давати цю помилку?

2

Re: Помилка Server responded with 500 code

А ці хлопці чого не фіксять? https://otakoyi.com/en/

Подякували: leofun011

3

Re: Помилка Server responded with 500 code

Вони дуже довго розробляли, ще довше передавали. Клієнт просто уже не має сил з ними боротись. Буде пробувати в понеділок писати, але у них то розробник змінився, то людина звільнилась. Хотів би допомогти, але своїх сил не вистачає. Тому прошу all.

4

Re: Помилка Server responded with 500 code

Зайдіть на сервер і подивіться  що в php_error_log пишеться. Там буде все ясно.
А взагалі влом помагати російськомовному сайту.

5 Востаннє редагувалося IS1971 (30.07.2018 08:31:44)

Re: Помилка Server responded with 500 code

Vo_Vik написав:

Зайдіть на сервер і подивіться  що в php_error_log пишеться. Там буде все ясно.
А взагалі влом помагати російськомовному сайту.

Дякую. Буду дивитись. А де його шукати? Пошук нічого не дав
Сайт є двомовний. Не знаю чого так. Можливо тому, що розрахований і на російськомовних німців в Європі.

6

Re: Помилка Server responded with 500 code

https://stackoverflow.com/questions/433 … r-log-file

Подякували: IS1971, leofun012

7 Востаннє редагувалося IS1971 (30.07.2018 10:56:37)

Re: Помилка Server responded with 500 code

Дивно, але такий каталог не знайшов. Щось аналогічне пробував шукати, але ні php.ini ні його логи не знайшов. Але проблему вирішив. Хлопці не усі модулі активували в налаштунках PHP сервера. І не перевірили.

Лишились ще дві проблеми. Якщо можливо підскажіть куди рити. На цій же формі https://rahmenfrei.live/ua/podelitsya/ якщо пробувати вкласти файл формату Word картинка з вкладеним файлов в вікні завантаження не така як має бути. Інші можливі типи файлів - Excel, PDF, TXT, JPG - показуються правильно.
Файл зображення для цього формату присутній. Пройшовся по усіх шляхах. В двох файлах *.js є ссилка на цей файл, шлях правильний. Пробував міняти на картинку для іншого типу. Результат нульовий.

Post's attachments

Буфер обміну01.jpg 61.28 kb, 149 downloads since 2018-07-30 

8

Re: Помилка Server responded with 500 code

Формату word це яке розширення, бо там їх міліон. Може не те розширення.

9

Re: Помилка Server responded with 500 code

Vo_Vik написав:

А ці хлопці чого не фіксять? https://otakoyi.com/en/

Два роки тому хотів працювати там, навіть тестове виконав.

10

Re: Помилка Server responded with 500 code

Vo_Vik написав:

Формату word це яке розширення, бо там їх міліон. Може не те розширення.

От частина коду в PHP файлі. Це якби перевірка чи дозволений тип
[code=PHP]
function user_message_file_upload()
{
    $status = 0;
    $message = '';
    $allowed_myme_types = [
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'image/gif',
        'image/jpeg',
        'image/png',
        'application/pdf',
        'text/plain'
    ];
[/code]
Далі знайшов *.js де
[code=JavaScript]
myDropzone.on("addedfile", function (file) {
    // if (!file.type.match(/image.*/)) {
    //     myDropzone.emit("thumbnail", file, "http://path/to/image");
    // }
    switch (file.type) {
        case 'application/pdf':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/008-pdf.svg");
            break;
        case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/007-doc.svg");
            break;
        case 'application/zip':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/001-zip.svg");
            break;
        case 'text/plain':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/004-txt.svg");
            break;
        case 'image/gif':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/009-gif.svg");
            break;
        case 'application/vnd.ms-excel':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/003-xls.svg");
            break;
        case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/003-xls.svg");
            break;
        case 'application/msword':
            myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/007-doc.svg");
            break;
    }
});
[/code]

Файл 007-doc.svg існує по тому шляху

11

Re: Помилка Server responded with 500 code

Або включити вивід помилок в php, і  тоді не буде 500 помилки, і буде показувати все гарно і на сторінці.

12

Re: Помилка Server responded with 500 code

IS1971 написав:
Vo_Vik написав:

Формату word це яке розширення, бо там їх міліон. Може не те розширення.

От частина коду в PHP файлі. Це якби перевірка чи дозволений тип
function user_message_file_upload()
{
    $status = 0;
    $message = '';
    $allowed_myme_types = [
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'image/gif',
        'image/jpeg',
        'image/png',
        'application/pdf',
        'text/plain'
    ];
Далі знайшов *.js де
        myDropzone.on("addedfile", function (file) {
            // if (!file.type.match(/image.*/)) {
            //     myDropzone.emit("thumbnail", file, "http://path/to/image");
            // }
            switch (file.type) {
                case 'application/pdf':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/008-pdf.svg");
                    break;
                case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/007-doc.svg");
                    break;
                case 'application/zip':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/001-zip.svg");
                    break;
                case 'text/plain':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/004-txt.svg");
                    break;
                case 'image/gif':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/009-gif.svg");
                    break;
                case 'application/vnd.ms-excel':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/003-xls.svg");
                    break;
                case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/003-xls.svg");
                    break;
                case 'application/msword':
                    myDropzone.emit("thumbnail", file, "/wp-content/themes/rahmenfrei/assets/img/svg/007-doc.svg");
                    break;
            }
        });

Файл 007-doc.svg існує по тому шляху

Я про те як той file.type визначається. Швидше всього воно дивитсь на розширення файлу.

13

Re: Помилка Server responded with 500 code

IS1971 написав:

якщо пробувати вкласти файл формату Word картинка з вкладеним файлов в вікні завантаження не така як має бути. Інші можливі типи файлів - Excel, PDF, TXT, JPG - показуються правильно.
...
От частина коду в PHP файлі. Це якби перевірка чи дозволений тип ...
    $allowed_myme_types = [
        'application/msword',
        'application/vnd.ms-excel',
        ...
    ];
            switch (file.type) {
                case 'application/vnd.ms-excel':
                    myDropzone.emit("thumbnail", file, "/path/003-xls.svg");
                    break;
                case 'application/msword':
                    myDropzone.emit("thumbnail", file, "/path/007-doc.svg");
                    break;
            }

Ви вже якось визначтесь в якому форматі зберігати імена MIME-типів.
application/vnd.ms-excel
application/vnd.ms-word

або
application/msexcel
application/msword

Ну і незалежно від формату імен, в налаштуваннях сервера (.htaccess, php.ini, або в панелі хостера) кожному MIME-типу має бути поставлено у відповідність список розширень файлів.

morgot написав:

Або включити вивід помилок в php, і  тоді не буде 500 помилки, і буде показувати все гарно і на сторінці.

Помилка 500 (і інші 5xx) - це помилка сервера. Спроба включити вивід помилок в php в таких випадках нічого не дасть.

14

Re: Помилка Server responded with 500 code

leofun01 написав:

Ви вже якось визначтесь в якому форматі зберігати імена MIME-типів.
application/vnd.ms-excel
application/vnd.ms-word

або
application/msexcel
application/msword

Ну і незалежно від формату імен, в налаштуваннях сервера (.htaccess, php.ini, або в панелі хостера) кожному MIME-типу має бути поставлено у відповідність список розширень файлів.

Я привів код який був написаний не мною. Якраз шукаю помилку. До речі файли Excel вкладаються з правильною картинкою. Тільки Word не правильна картинка. Розширення *.doc i *.docx.

В панелі хостера MIME-тип описані так

application/msword    doc dot
application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx

15

Re: Помилка Server responded with 500 code

Пошукайте по всьому коду де оте application/msword присвоюжться в якусь змінну і при яких умовах. Можливо воно пишеться в якусь константу, то подивіться де та константа використовується.

Подякували: IS19711

16

Re: Помилка Server responded with 500 code

leofun01 написав:

Помилка 500 (і інші 5xx) - це помилка сервера. Спроба включити вивід помилок в php в таких випадках нічого не дасть.

Деколи я зустрічав дивну річ, коли іменно PHP скріпт давав таку помилку. Який саме PHP код може кинути сервер у 500 помилку (навіть якщо написати щось зовсім дурне, буде php fatal error)? І це "лікувалось" іменно включеням виводу помилок на сторінку. Чому таке, який тут механізм - я реально не знаю, я далекий від системного адміністрування (знаю ламп на рівні користувача, не більше).

Подякували: leofun011

17 Востаннє редагувалося leofun01 (02.08.2018 12:50:29)

Re: Помилка Server responded with 500 code

morgot написав:

Який саме PHP код може кинути сервер у 500 помилку (навіть якщо написати щось зовсім дурне, буде php fatal error)?

В мене 500 помилка вилазила лише у випадках, коли до виконання коду PHP не доходило. Наприклад, коли є Apache+PHP і обробка запиту застрягла в Apache, бо .htaccess був неправильно написаний. Ще один приклад, nginx+PHP і допущена помилка в якомусь *.conf, або в mime.types .

Подякували: morgot1

18

Re: Помилка Server responded with 500 code

leofun01, я на днях постараюсь вам змоделювати ту 500 помилку на сервері. Мені чисто технічно цікаво , яка там причина, чому включення пхпшної директиви міняє ситуацію.

Подякували: leofun011