Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2011, 18:46   #1
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию Уменьшение скорости работы скрипта

Добрый день! Пишу скрипт для парсинга xml документа и создания записей в CMS WordPress. Наблюдаю проблему: при старте скрипта записи добавляются быстро, затем скорость замедляется. Сначала за 10 секунд добавляется 5-6 записей, а потом мне приходится ждать добавления каждой записи всё больше и больше времени. После добавления 100 записей, каждая запись добавляется по пол минуты. Может быть я намутил что-то в скрипте, подскажите, пожалуйста.
PHP код:
 <?php
 error_reporting
(E_ALL E_NOTICE);
 
set_time_limit(3600); //часа не хватает на 700 записей
 
require('../../../wp-blog-header.php'); //подключение функций WordPress
 
if (!$xml_datasimplexml_load_file('games.xml')) //Использую simplexml
    
echo "Звездец";
else

    
$url_array = array ();
    
parse_xml_make_post(); //вот, собственно, основная функция

    
$c_file='command_file.txt';
    
$fileh fopen ($c_file'w+');    
    
fwrite ($fileh,$url_array);
    
fclose ($fileh);
    
    
function 
parse_xml_make_post ()
    {
    global 
$xml_data;
    foreach (
$xml_data->Languages->Language->Catalogs->Catalog[0]->Items->Item as $item)
        { 
//Записываем значение полей итема в переменные
        
$post_id_ab intval ($item['ID']);
        
$db_post['post_name'] = strval($item->Name);
        
$db_post['post_title'] = strval($item->Name);
        
$db_post['post_content'] = strval($item->Properties->Property[5]);
        
$db_post['post_short_excerpt'] = strval($item->Properties->Property[3]);
        
$db_post['post_excerpt'] = strval($item->Properties->Property[4]);
        
$db_post['post_date'] = strval($item->Properties->Property[1]);
        
$db_post['download_url'] = strval($item->Files->File);
        
$db_post['download_size'] = strval($item->Files->File[Size]);
        
$db_post['image_iconbg'] = copy_image ($item->Images->Image[1]);
        
$db_post['image_picbg'] = copy_image ($item->Images->Image[3]);
        
$db_post['image_banner'] = copy_image ($item->Images->Image[4]);
        foreach (
$item->Screenshots->Screenshot as $screenshot)
            {
            if (
$screenshot['Type']=='small')
                
$db_post['screenshots_l'][] = copy_image ($screenshot); 
            else 
                
$db_post['screenshots_b'][] = copy_image ($screenshot); 
            }
        
insert_post_wp ($db_post$post_id_ab);
        echo 
'<br />';
        }
    }

function 
copy_image ($image_url//функция для скачивания изображений на свой сервер. Отключил скачивание, чтоб ускорить работу.
    
{
    global 
$url_array;
    
$image_name strrchr($image_url,'/');
    
$upload_dir=wp_upload_dir(); //функция определения адреса папки upload (WordPRess)
    
$image_path $upload_dir['baseurl'].$image_name;
    
$url_array[]=$image_url//сохраняем значения для последующего скачивания
    //if (!copy($image_url, 'images/'.$image_name))
    //    echo 'ошибка бл <br />';
    
return $image_path;
    }
    
function 
insert_post_wp ($db_post$post_id_ab)
    {
    echo 
$post_id_ab;

    
    
$my_post=array (    'post_content' => $db_post['post_content'], //The full text of the post.
                   
'post_date' => $db_post['post_date'], //The time post was made.
                 //'post_date_gmt' => [ Y-m-d H:i:s ] //The time post was made, in GMT.
                   
'post_excerpt' => $db_post['post_excerpt'], //For all your post excerpt needs.
                   
'post_name' => $db_post['post_name'], // The name (slug) for your post
                   
'post_status' => 'publish'//Set the status of the new post. 
                   
'post_title' => $db_post['post_title'], //The title of your post.
                   
'post_type' => 'post'//You may want to insert a regular post, page, link, a menu item or some custom post type
                // 'tags_input' => [ '<tag>, <tag>, <...>' ]  //For tags. 
                
); //создание массива значений для функции wp_insert_post()
    
$post_id wp_insert_post ($my_post); //создаёт пост, возвращает ID
    
add_post_meta ($post_id,'post_id_ab',$post_id_ab); //добавляет дополнительные поля 
    
add_post_meta ($post_id,'post_rating',$post_rating);
    
add_post_meta ($post_id,'download_url',$db_post['download_url'] );
    
add_post_meta ($post_id,'download_size',$db_post['download_size']);
    
add_post_meta ($post_id,'short_excerpt',$db_post['post_short_excerpt']);
    
add_post_meta ($post_id,'image_iconbg',$db_post['image_iconbg']);
    
add_post_meta ($post_id,'image_picbg',$db_post['image_picbg']);
    
add_post_meta ($post_id,'image_banner',$db_post['image_banner']);
    
$i=0;
    foreach (
$db_post['screenshots_l'] as $screenshot)
        {
        
add_post_meta ($post_id,'screenshot_l'.$i,$screenshot);
        
$i++;
        }
    
$i=0;
    foreach (
$db_post['screenshots_b'] as $screenshot)
        {
        
add_post_meta ($post_id,'screenshot_b'.$i,$screenshot);
        
$i++;
        }
    echo 
'<br />'.$image_iconbg;
    }
    
  
?>
amdbodia вне форума Ответить с цитированием
Старый 16.01.2011, 19:52   #2
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Попробовать после каждой итерации очищать переменные?
Если бы можно было сделать пошаговую отладку, как при программировании на микроконтроллерах...
Как можно посмотреть, где скрипт тормозит? Натыкать функции вывода времени?
amdbodia вне форума Ответить с цитированием
Старый 16.01.2011, 20:13   #3
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Как я сразу не додумался? Действительно, вывод текущего значения времени помогает отследить место, в котором скрипт начинает тормозить. Оказалось, вся проблема в функции WordPress add_post_meta(). Кто же знал, что эта CMS, написанная профессионалами так глючит?
amdbodia вне форума Ответить с цитированием
Старый 16.01.2011, 20:49   #4
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Зря наехал на разработчиков WordPress. Ошибка действительно была в моём коде. Решалась добавлением двух строчек:
PHP код:
        unset($db_post['screenshots_l']);
        unset(
$db_post['screenshots_b']); 
Перед заполнением двумерного массива. А я сразу не заметил ((
Вывод: надо всегда инициализировать переменные.
Тему можно закрыть.
amdbodia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замедление работы скрипта в чём причина? Alkov74 Microsoft Office Word 2 12.11.2010 20:32
Тест скорости инета и вывод скрипта bionicle12 PHP 6 06.09.2010 10:28
ajax индикатор работы скрипта ssdm JavaScript, Ajax 3 08.04.2010 17:04
С++ под Linux увеличение скорости работы с болванкой Yulka Помощь студентам 0 16.12.2009 21:42
Уменьшение загрузки ЦП и увеличение скорости программы. Shadow_1329 Gamedev - cоздание игр: Unity, OpenGL, DirectX 80 18.08.2009 15:22