2012-09-21 72 views
3

我試圖使用openfiles.exe來獲取遠程服務器上當前打開的文件的信息。我可以從命令提示符下運行該命令,即網絡服務器處於打開狀態,所以我知道它可以在Web服務器和我試圖定位的服務器之間運行。但是,當我嘗試在PHP中調用相同的命令時,我得到一個Apache錯誤日誌條目:「錯誤:目標系統必須運行Windows XP或更高版本。」 Web服務器在Xp Pro上運行,目標服務器在Windows Server 2003上。從命令提示符下,該命令完美運行,即使是在網絡上的較舊的Windows 2000服務器上,也只是當我從PHP運行它時,它似乎有一個問題。有沒有人有任何想法,爲什麼和/或如何解決這個問題?無法將遠程Openfiles.exe數據導入到PHP

,我正在使用的代碼是:

$output = shell_exec("openfiles /query /s servername"); 
echo $output; 
    $i = 0; 
    $c = count($output); 

    while ($i < $c) { 
    $dump = $output[$i]; 
    echo $dump ."<br>"; 
    $i++; 
    } 

了shell_exec(),系統()和exec()的行爲都完全一樣,因爲它從一個批處理文件運行命令。稍微有趣的轉變是,如果我把「/ S服務器名」的一部分,它的輸出如下:

Files Opened Remotely via local share points: 
--------------------------------------------- 
INFO: No shared open files found. 

...所以就好像/ s標誌是什麼把它扔。就像我說的那樣,它可以在命令提示符下正常工作,所以我知道可執行文件能夠從目標服務器獲取信息;我只需要找出爲什麼PHP似乎與做同樣的一個問題...

回答

3

Apache服務器是錯誤的帳戶下運行,並且沒有權限遠程IPC $共享;)

編輯 - 完整的文章:

可能是權限? Apache運行的用戶是什麼?當你通過命令提示符執行操作時,你可能會將其作爲域管理員帳戶或其他帳戶進行訪問,而其他帳戶將具有連接到遠程計算機上的IPC $共享的正確權限(IIRC就是這樣完成的)。鑑於Apache可能不會,並且它可能只是一個誤導性的錯誤消息,當實際發生的事情是它不能聯繫IPC $共享並假定遠程計算機不具有Windows XP或更高版本......

看起來像XP版本的openfiles,有/ u和/ p選項來傳遞用戶名和密碼;堅持域管理員憑據在那裏測試,看看是否有效。如果有,請創建一個沒有文件存儲權限的受限制的AD帳戶並使用這些憑據或其他內容,以確保沒有人能夠竊取您的主域管理員帳戶。

+0

這樣做,你的天才!不幸的是,我不能給你任何代表,但謝謝! – Gazhenry

+1

啊,現在我可以 - 世界上一切都很好:D – Gazhenry

相關問題