За последние 24 часа нас посетили 58372 программиста и 1780 роботов. Сейчас ищут 793 программиста ...

php COM MSWord скрипт исполняется до max_execution_time

Тема в разделе "PHP для новичков", создана пользователем AcMaNich, 1 июл 2008.

  1. AcMaNich

    AcMaNich Активный пользователь

    С нами с:
    1 июл 2008
    Сообщения:
    6
    Симпатии:
    0
    Нужно работать с *.doc файлом. Попробовал пример отсюда http://php.com.ua/ru/articles/bicycles/php_com_word.htm

    Копипастю код, сохраняю и запускаю. Скрипт выполняется до предела времени исполнения скрипта, после чего завершается фатальной ошибкой.
    Fatal error: Maximum execution time of 30 seconds exceeded in U:\projects\abit.local.server\htdocs\generate.php on line 42
    Строка №42 - последняя и в ней только "?>"
    Из-за чего это может происходить?

    Извините если повторяюсь.

    О системе:
    Apache 2.0.53
    PHP 5.2.4
    MySQL 5.0.45
    WinXP sp2
    MS Office 2003 (Конкретно Word - 2003 SP2 11.6568.6568)
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Скрипт работает дольше указаного времени (30 секунд) в настройках и дохнет.
    Поставь set_time_limit(0) куда-нить наверх скрипта и он будет работать столько, сколько потребуется.

    upd

    PHP:
    1.  
    2. <?php
    3. set_time_limit(0); // !!!
    4.  
    5. $app = new COM("word.application")
    6.        or die("Невозможно инициализировать Word");
    7. $version=$app->Version;
    8.  
    9. //Открываем заготовку документа
    10. $app->Documents->Open("blank.doc");
    11.  
    12. //Пишем текст
    13. $app->Selection->TypeText("Привет");
    14.  
    15. //Переводим курсор в следующую строку
    16. $app->Selection->TypeParagraph();
    17. $app->Selection->TypeText("Как дела?");
    18.  
    19. //Выделяем весь документ
    20. $app->Selection->WholeStory();
    21.  
    22. //Обращаемся к свойствам абзаца (для всего выделения)
    23. $f=$app->Selection->ParagraphFormat();
    24.         $f->LineSpacingRule=1; // выставляем 1.5 интервала
    25.         $f->Alignment=3; // выравниваем по ширине
    26.  
    27. //Обращаемся к свойствам страницы
    28. $f=$app->ActiveDocument->PageSetup();
    29.         $f->Orientation = 0; // 0-книжная 1-альбомная
    30.         $f->TopMargin = 28.34646; // 1 см = 28.34646pt
    31.         $f->BottomMargin = 28.34646; // 1 см
    32.         $f->LeftMargin = 28.34646; // 1 см
    33.         $f->RightMargin = 28.34646; // 1 см
    34.  
    35. // Сохраняемся
    36. $app->Documents[1]->SaveAs("Doc1.doc");
    37.  
    38. // Закрываемся
    39. $app->Quit();
    40. // Освобождаем память
    41. $app->Release();
    42. $app=Null;
    43. $f=Null;
    44. ?>
     
  3. AcMaNich

    AcMaNich Активный пользователь

    С нами с:
    1 июл 2008
    Сообщения:
    6
    Симпатии:
    0
    Замечательно. Фатал еррор поменялся. Теперь он следующий:

    Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `word.application': Ошибка при выполнении приложения-сервера ' in U:\projects\abit.local.server\htdocs\generate.php:3 Stack trace: #0 U:\projects\abit.local.server\htdocs\generate.php(3): com->com('word.applicatio...') #1 {main} thrown in U:\projects\abit.local.server\htdocs\generate.php on line 3

    Код 3й строки:
    ...
    3 $app = new COM("word.application")
    ...

    Как обработать особое состояние? try-catch это понятно.... в каком формате com_exception возвращается?

    Может быть в пхп модуля какого-н-ть не хватает?
     
  4. Anonymous

    Anonymous Guest

    угу. установленного Ворда, например...
     
  5. AcMaNich

    AcMaNich Активный пользователь

    С нами с:
    1 июл 2008
    Сообщения:
    6
    Симпатии:
    0
    Здоровый юмор хорошо, но сейчас дело не двигается без решения этого вопроса.
    Ворд установлен.
     
  6. alBoo

    alBoo Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    63
    Симпатии:
    0
    посмотри в реестре как зареген ворд.
    если не ошибаюсь должно быть Word.Application.8
     
  7. AcMaNich

    AcMaNich Активный пользователь

    С нами с:
    1 июл 2008
    Сообщения:
    6
    Симпатии:
    0
    Если про ветку
    HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046}\ProgID
    то там Word.Application.11

    Заменил на ...8 но ничего не поменялось. Таже фаталка что и во втором моём посте.
    Вообще по идеи 11 означает версию ворда... Как-то критично сказаться не должно.
    ... не забыть бы поменять назад)

    ЗЫ.... Покапался дальше... Встретил Word.Application, Word.Application.11, Word.Application.8 все они ссылаются на этот {000209FF-0000-0000-C000-000000000046} id класса.... равнозначны получается.

    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID и HKEY_CLASSES_ROOT\CLSID\ идентичны в плане Word.Application