COM(Windows + Apache)を使用してWord文書をphpに変換します

こんにちは、Habr!

COMオブジェクトを使用してワードファイルを利用可能な形式に変換するときに必要なことについて少しお話ししたいと思います 。 私自身は多くの問題に直面し、多くのフォーラムに登りましたが、ロシアのマニュアルはほとんどありません。 自分のためにもっと書くことにしましたが、他の誰かが便利になったらどうしますか?



IISを使用している場合は、IISを必要としない可能性があります。この記事は、Apacheでの作業のセットアップについてのみ説明しています。



脳破裂を引き起こした最初の主要な問題:

Call to undefined method variant::SaveAs()





ドキュメントを保存しようとしたとき。

多くの場合、実験により、オブジェクトにプロパティが存在しないというエラー、またはドキュメントの解析エラーが発生しました。これは最も一般的なものです-

Fatal error: Uncaught exception 'com_exception'

with message ' Source: Unknown<br/> Description: Unknown'








とにかくプロセスが機能するために必要なこと:

  1. Windowsサーバーが必要
  2. インストールされたMsOfficeパッケージ(またはパッケージ全体ではなく、必要な部分のみ)
  3. COMの解像度設定

    1. 次に、[スタート]-> [管理ツール]-> [コンポーネントサービス]に移動します。
    2. メニューを展開しますコンポーネントサービス->コンピューター->マイコンピューター-> DCOM Config
    3. リストで、必要なCOMアプリケーションを探します(原則として、すべてMicrosoftという言葉で始まります...)
    4. 興味のあるものを右クリックして、[プロパティ]を選択し、[アクセス許可]セクションの[セキュリティ]タブに移動し、[カスタマイズ]にポイントを入れて[編集]ボタンをクリックします。
    5. 表示されるウィンドウで、[追加]をクリックし、Apacheを実行する権限を持つユーザーを追加します(下部のフィールドにユーザー名を入力し、[名前の確認]をクリックします。すべて問題なければ、Windowsはそれを見つけ、[OK]をクリックします)
    6. リストで、追加したユーザーを選択し、[リモートアクセス]チェックボックスをオンにします。
    7. すべての変更を確認します([OK]を2回クリックします)
    8. 目的のアプリケーションに対して手順4〜7を繰り返します。


  4. Apacheを構成する

    1. COMの権利が同じウィンドウ(コンポーネントサービス)で配布されたら、[サービス]セクションに移動し、そこでApacheを見つけて右クリックし、[プロパティ]を選択して[ログオン]タブに移動し、[参照]ボタンをクリックし、上記のCOMと同じユーザーを入力しますオブジェクト、[OK]をクリックし、ユーザーアカウントのパスワードを入力して、Apacheが[OK]をクリックして起動できるようにします
    2. すべてが正しい場合、Apacheを再起動し、再起動は成功します


  5. Php.iniセットアップ

    1. php.iniを開きます
    2. セクションを探しています[COM]
    3. 行のコメントを解除します。

        com.allow_dcom = true com.autoregister_typelib = true com.autoregister_casesensitive = false com.autoregister_verbose = true
            
            







      動的拡張セクションを探しています

      次の行を追加します。

        extension=php com_dotnet.dll
            
            







      Apacheを再起動します

    4. 重要: COMオブジェクトに権限を設定した後、wordを実行する必要があります(少なくとも、これなしでは権限を変更していません)
    5. 利益




    PS は、実験が失敗した場合にWordプロセスを強制終了することを忘れないでください。これは、開始して読み取り用にファイルを開き、ハングするためです。



    さらに、次のように、標準のCOM関数を使用してオブジェクトを操作できます。



     com_load_typelib('Word.Application'); $name = 'test.docx'; $path = dirname(__FILE__) . "\\tmp\\". $name ; $word = new COM("word.application") or die ("  COM "); $word->Documents->Open( $path ); mkdir(dirname(__FILE__) . "\\tmp\\{$name}"); $folder = dirname(__FILE__) . "\\tmp\\{$name}"; $word->ActiveDocument->SaveAs( $folder . "\\{$name}.html", 8); $word->Quit(); $word = null;
          
          






All Articles