Вызов Excel из PHP 5 через COM завершается ошибкой в ​​Windows 7, когда Apache запускается через Task Planner

Привет, ребята, этот вопрос не может быть слишком сложным. Предоставьте решение, по крайней мере, для выяснения первопричины проблемы.

В настоящее время я пишу приложение, которое управляет Excel через COM : приложение создает экземпляр Excel на основе COM, открывает некоторые файлы XLS и считывает их содержимое.

Сценарий I

В Windows 7 я запускаю Apache и mySQL, используя xmapp-control с правами системного администратора . Все работает как положено. Сценарий контроллера на основе PHP взаимодействует с Excel, как и ожидалось.

Сценарий II

Проблема возникает, если я запускаю Apache и mySQL как «фоновые задания». Вот как:

  • Я создал два задания с помощью Планировщика задач Windows 7 . Один запускает apache_start.bat, другой - mysql_start.bat.
  • Обе задачи выполняются как СИСТЕМА с повышенными привилегиями при загрузке Windows 7.

Apache и mySQL работают должным образом. В частности, Apache обслуживает HTTP-запросы от клиентов, а PHP может взаимодействовать с mySQL.

Когда я вызываю контроллер PHP, который вызывает Excel и взаимодействует с ним через COM, я получаю сообщение об ошибке.

Сообщение об ошибке поступает из Excel [не самого COM] и выглядит следующим образом:

  • Excel не может прочитать указанный файл Excel
  • Excel не удалось сохранить файл из-за ошибки ill-name worksheet

Интересно, что при первом запуске скрипта контроллера на основе PHP для отображения сообщения об ошибке требуется несколько секунд. Каждый последующий запуск немедленно отображает сообщение об ошибке.

В системных журналах Windows не было ни одной записи отчета о проблеме.

Обратите внимание, что программа PHP и экземпляр Apache не изменились - за исключением способа запуска Apache.

По крайней мере, скрипт контроллера PHP прекрасно может читать файловую систему , поскольку он предоставляет пути к XLS-файлу через scandir () определенного каталога.

Проблемы с параллелизмом не могут быть причиной проблемы. Один экземпляр конкретного контроллера PHP взаимодействует с Excel.

Вопрос

Не могли бы вы предоставить подробности, почему это происходит? Или предоставить способы изолировать основную причину проблемы (например, с помощью сценария PowerShell 2)?

UPDATE-1 :: 2011-11-29

Как было предложено, я переключил задание планировщика задач с SYSTEM на обычный пользователь . Работает. Apache и MySQL приступают к работе и обрабатывают запрос.

К сожалению, ситуация с Excel ничуть не изменилась. Тем не менее, я вижу ошибку.

Как предполагалось ранее, запускается COM-сервер EXCEL. Я могу без проблем изменять различные настройки (например, подавлять диалоги) через COM-экземпляр.

Проблема возникает при вызове этого:

$excelComObject->Workbooks->Open( 'PathToXLSFile' );

UPDATE-2 :: 2011-11-30

Добавлены учетные записи USER, GUEST и EVERYONE с правом READABLE в список управления доступом файл XLS. Без изменений.

Приложение изменено таким образом, что часть PHP создает копию файла XLS как временный файл и перемещает в него содержимое исходного файла. Просто чтобы убедиться, что проблема не вызвана странными именами файлов / путей.

Тем не менее, проблема не устранена.

UPDATE-2 :: 2011-12-05

Я собираюсь отправить методы COM-сервера EXCEL таким образом, чтобы Excel создавал пустой файл и сохранял его в / tmp. Посмотрим, не сможет ли Excel даже прочитать этот файл.

5
задан 14 revs 5 December 2011 в 22:54
поделиться