Открытие документа Word с использованием PHP-объекта COM - PullRequest
0 голосов
/ 23 декабря 2009

У меня есть некоторый код, который генерирует документ Word, следующим образом:

$word->Documents [1]->SaveAs ( $localDir . $filename );

Теперь я надеялся, что смогу открыть файл после его сохранения, выполнив следующие действия:

$word->Documents->Open($remoteDir . $filename)

// remotedir = 'word/', so for example the above would be '/word/document1.doc'

Но, похоже, его открывают на хост-машине, а не на пользователях! Есть ли способ открыть его на компьютере пользователя, а не на сервере?

edit: просто для наглядности он будет использоваться исключительно в интрасети одним пользователем, который будет постоянно находиться на компьютере с Windows, с установленным Word и т. Д., Просто хочу попытаться сделать ее жизнь немного проще!

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Я думаю, что вы в корне ошибаетесь в отношении того, что и где работает. PHP - это чисто серверный язык. Вы не можете использовать его, чтобы открыть файл на клиентском ПК, чтобы перед ним открылся экземпляр Word.

Вы можете возможно добиться этого с помощью сценариев на стороне клиента, а именно в VBScript или другом сценарии Microsoft. Будьте готовы к огромным препятствиям и несовместимости, потому что такие вещи блокируются по соображениям безопасности по умолчанию во всех браузерах, и иногда эти блоки нельзя обойти даже с помощью специальных настроек («Надежные сайты») в клиентском браузере.

Возможно, вы сможете отобразить документ в браузере пользователя как внедренный объект HTML.

Самой простой вещью на самом деле может быть создание файла и предложение его пользователю для загрузки. Затем пользователь может сохранить его и открыть. Работа выполнена.

2 голосов
/ 23 декабря 2009

/word/document1.doc - это путь к файлу на сервере, а не на клиенте. В Windows, если для клиентского ПК включен общий доступ к файлам, можно использовать путь, например \\IP\word\document1.doc, где IP - это IP-адрес клиентского ПК.
Вы можете получить IP-адрес компьютера, подключенного к серверу, с помощью $_SERVER['REMOTE_ADDR']; $_SERVER['REMOTE_HOST'] - это результат обратного просмотра DNS, который может вернуть то же значение $_SERVER['REMOTE_ADDR'], в вашем случае.

Вероятно, PHP не будет открывать удаленные файлы, если это не было задано (есть директива или что).

Если прямой доступ к общему файлу из COM-объекта не работает, вы можете скопировать файл с клиентского ПК на сервер во временный файл, а затем передать этот файл в COM-объект. Таким образом, если при доступе к сетевому файлу будут какие-либо ошибки, вы сможете их получить.

В любом случае я нахожу странным, что, передавая путь к сетевому файлу, вы получаете локальный файл. Вы уверены, что COM-объект не копирует с сервера файл, найденный по пути удаления файла? Вы пробовали с другим файлом? Если это происходит и с разными файлами, то мы что-то упускаем; Мне показалось бы странным, что для всех сетевых файлов, которые вы пытаетесь открыть, уже существует локальный файл с таким же именем. Попробуйте также переименовать сетевые файлы.

...