Приветствую. При попытке выполнить аяксовый скрипт загрузки контента(вордпресс, тема Avada, демо-контент) на личном хостинге процесс отваливается по таймауту. На полноценном хостинге всё закачивается без проблем. Ошибка в вордпрессе: Ошибка в логах пхп-фпм: max_execution_time увеличивал, set_time_limit(0) прописывал, память давал, один хрен... куда копать?
Ну дай 24 часа времени и терабайт оперативки, может поможет. Шутка. Можно ещё с помощью xdebug найти что так долго работает. Читай код как всё устроено, перепроверь.
тогда бы и на другом хостинге не работало... =\ Добавлено спустя 1 минуту 36 секунд: за xdebug спасибо, посмотрю эх... не хотел я лезть в это болото говнокода... да видимо придется
У меня уже бывали проблемы со скриптами, причем именно с использующими аякс... поэтому всё-таки подозреваю, что дело не в скрипте
ну тогда расскажи нам в чем проблема. как бывалый. Добавлено спустя 3 минуты 15 секунд: могу рассказать о своих наблюдениях: бывает тормозят сетевые функции потому что не могут разрезолвить адрес или доступа наружу нет. этим хостинг может отличаться от локалки.
Немного трэша. Я нашел прикольную строчку в настройках: Код (Text): request_terminate_timeout = 30s Именно из-за неё рвалось соединение. Но трэш не только в этом. Смотрим лог: Код (Text): [04-Feb-2015 10:38:42] WARNING: [pool unrecovered] child 11880, script '/home/unrecovered/wptest.ru/public_html/wp-admin/admin-ajax.php' (request: "POST /wp-admin/admin-ajax.php") execution timed out (305.554360 sec), terminating [04-Feb-2015 10:38:42] WARNING: [pool unrecovered] child 11880 exited on signal 15 (SIGTERM) after 430.069442 seconds from start [04-Feb-2015 10:38:42] NOTICE: [pool unrecovered] child 11936 started То есть 300 секунд кагбе не хватает... Текст самого скрипта прилагаю, извините что не под спойлером - не нашел, где он тут =( Подскажите, как корректно отдебажить? Код (PHP): <?php /** * WordPress AJAX Process Execution. * * @package WordPress * @subpackage Administration * * @link http://codex.wordpress.org/AJAX_in_Plugins */ /** * Executing AJAX process. * * @since 2.1.0 */ define( 'DOING_AJAX', true ); if ( ! defined( 'WP_ADMIN' ) ) { define( 'WP_ADMIN', true ); } /** Load WordPress Bootstrap */ require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' ); /** Allow for cross-domain requests (from the frontend). */ send_origin_headers(); // Require an action parameter if ( empty( $_REQUEST['action'] ) ) die( '0' ); /** Load WordPress Administration APIs */ require_once( ABSPATH . 'wp-admin/includes/admin.php' ); /** Load Ajax Handlers for WordPress Core */ require_once( ABSPATH . 'wp-admin/includes/ajax-actions.php' ); @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); @header( 'X-Robots-Tag: noindex' ); send_nosniff_header(); nocache_headers(); /** This action is documented in wp-admin/admin.php */ do_action( 'admin_init' ); $core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache', 'autocomplete-user', 'dashboard-widgets', 'logged-in', ); $core_actions_post = array( 'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link', 'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment', 'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment', 'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'closed-postboxes', 'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax', 'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink', 'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order', 'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post', 'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor', 'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs', 'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail', 'parse-media-shortcode', 'destroy-sessions' ); // Register core Ajax calls. if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], $core_actions_get ) ) add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '_', $_GET['action'] ), 1 ); if ( ! empty( $_POST['action'] ) && in_array( $_POST['action'], $core_actions_post ) ) add_action( 'wp_ajax_' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '_', $_POST['action'] ), 1 ); add_action( 'wp_ajax_nopriv_heartbeat', 'wp_ajax_nopriv_heartbeat', 1 ); if ( is_user_logged_in() ) { /** * Fires authenticated AJAX actions for logged-in users. * * The dynamic portion of the hook name, `$_REQUEST['action']`, * refers to the name of the AJAX action callback being fired. * * @since 2.1.0 */ do_action( 'wp_ajax_' . $_REQUEST['action'] ); } else { /** * Fires non-authenticated AJAX actions for logged-out users. * * The dynamic portion of the hook name, `$_REQUEST['action']`, * refers to the name of the AJAX action callback being fired. * * @since 2.8.0 */ do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ); } // Default status die( '0' );
Если "некогда разбираться", можешь локализовать проблему просто втыкая die() в разные места. Еще идейка насчет причины: блокировка сессии или еще какого-то ресурса. Типичный кейс: где-то стоит file_get_content('http://адрес на этом же сайте') и дочерний запрос пытается открыть сессию/другую херню, которую захватил родительский запрос. Если адрес захардкоден, на одном сайте будет проходить, а на другом нет.
Я, конечно, извиняюсь, но... xdebug на автологгировании родил 200-метровую портянку лога, что именно в ней искать?