2009-12-23 73 views
0

我有一個生成word文檔的一些代碼的Word文件,內容如下:打開使用的PHP COM對象

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

現在,我有點希望,我現在就可以打開該文件,一旦它的保存通過執行以下操作:

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

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

但似乎打開它的主機上,而不是用戶!無論如何在用戶的機器上而不是在服務器上打開它?

編輯:只是爲了清楚起見,它將被一個單一的用戶獨佔使用,它將隨時在Windows機器上安裝Word等等......只是想嘗試讓她的生活變得有點更輕鬆!

感謝

回答

2

/word/document1.doc是在服務器中的文件的路徑,而不是在客戶端。在Windows上,假設爲客戶端PC啓用了文件共享,則可以使用諸如\\IP\word\document1.doc之類的路徑,其中IP是客戶端PC的IP。
您可以通過$_SERVER['REMOTE_ADDR']獲得連接到服務器的PC的IP地址; $_SERVER['REMOTE_HOST']是DNS反向查找的結果,在您的情況下,它可能會返回相同的值$_SERVER['REMOTE_ADDR']

可能PHP不會打開遠程文件,如果它沒有被設置(這是一個指令或那)。

如果直接從COM對象訪問共享文件不起作用,則可以將文件從客戶端PC複製到臨時文件中的服務器,然後將該文件提供給COM對象。這樣,如果在訪問網絡文件時出現錯誤,您應該可以獲取它們。

我發現奇怪的是,無論如何,通過網絡文件路徑你得到一個本地文件。你確定COM對象不是複製它在傳遞的刪除文件路徑中找到的文件的服務器嗎?你有沒有嘗試過不同的文件?如果這種情況發生在不同的文件上,那麼我們錯過了一些東西;我會發現奇怪的是,對於您嘗試打​​開的所有網絡文件,已經有一個同名的本地文件。嘗試重命名網絡文件。

+0

非常感謝 - 我現在的路可以正常工作,所以當我將它複製並粘貼到地址欄(使用http://等)時,它仍然可以工作,但它仍然在做它打開的地方它在服務器上代替客戶端:( – Nick 2009-12-23 11:38:50

+0

檢查分配給兩個PC的名稱和IP,'$ _SERVER ['REMOTE_ADDR']'的值,以及在客戶端PC上是否啓用了文件共享。路徑I報告的是用於訪問網絡文件的路徑;如果您獲取本地文件,則可能是PHP未啓用訪問遠程文件,就好像它們是本地文件一樣,或者PHP COM不訪問遠程文件 – kiamlaluno 2009-12-23 11:46:49

+0

非常感謝 - 只是嘗試過,不幸的是,同樣的事情,它打開它們,但它打開它們在服務器上!不在客戶端:( – Nick 2009-12-23 13:29:57

3

我認爲你從根本上弄錯了什麼運行在哪裏。 PHP是純粹的服務器端語言。您不能使用它在客戶端的PC上打開文件,以便用戶在其前面打開一個Word實例。

您可以也許通過客戶端腳本實現,即在VBScript或其他Microsoft腳本風格。儘管如此,由於默認情況下在所有瀏覽器中出於安全原因阻止了這些內容,並且即使在客戶端瀏覽器中使用特殊設置(「受信任的站點」),也無法繞開這些阻止。

您可能能夠在用戶瀏覽器中將文檔顯示爲嵌入式HTML對象。

最簡單的事情可能是生成該文件,並將其作爲下載提供給用戶。用戶可以保存並打開它。任務完成。