#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。php com コンポーネント エラーの解決策: 1. php.ini の構成「com.allow_dcom」と「php_com_dotnet.dll」を変更します; 2. vs2013 を使用して COM コンポーネントを作成します。
PHP が COM コンポーネントのロードに失敗する理由とその解決策
個人的には、他のプログラミング言語のインターフェイスを呼び出す最も便利な方法php の「COM コンポーネントを使用する」です。最近PHPに触れ始めたのですが、C言語で書かれたCOMコンポーネントを呼び出す勉強をしていたところ、「COMオブジェクトの作成に失敗しました」というエラーに遭遇し、解決するまでにかなり苦労しました。
php の上位バージョンでは、COM サポートを手動で有効にする必要があります。基本的に、php.ini の設定を com.allow_dcom = true および extension=php_com_dotnet.dll に変更します。 。これがエラーであれば、簡単に解決できます。実際、このような設定ミスをする人はほとんどいないと思いますが、WPS や Word コンポーネントを読み込んでテストすることで、COM コンポーネントのサポートが正常かどうかをテストできると言っている人が多いのですが、権限の問題があるため、このテスト方法は使用できません。あまり実用的ではありませんが、使いやすいです。その後、http://php.net/manual/zh/class.com.php ドキュメントの説明で $db = new COM("ADODB.Connection",NULL, 65001); を見つけました。テスト後、これは、私が作成した COM コンポーネントに何か問題があるに違いないことを示しており、実際にそのとおりであることが判明しました。
C で書かれた COM コンポーネントを PHP で読み込む例は以前インターネット上にたくさんありましたが、PHP のバージョンが低すぎるためか、そのようなコンポーネントの作成方法はphp5.2より前のバージョンを使用している場合は、これが正しい可能性があります。私はphp5.5を使用していますが、誤解されました。 私の PHP バージョンは 5.5.12 で、COM コンポーネントの作成に vs2013 を使用しています。プロセスは次のとおりです: 1. 起動バーで vs2013 を見つけ、右クリックして開きます管理者権限があるため、管理者IDを使用します。後でCOMコンポーネントを登録するときに便利なのでオンにします。 c で新しい ATL プロジェクト 2 を作成し、[完了] をクリックし、プロジェクトを右クリックしてクラスを追加し、[ATL COM 10] を選択します。 #3. プロジェクトを右クリックしてクラスを追加します。ここが最も重要な点です。右下のProgIDは手動で追加する必要があります。形式は「プロジェクト名.略称」です。プロジェクト名は生成されるDLLの名前です。ロード時にもこのように記述されます。 2 番目の項目はクラス名ではなく略語です。ここの書き方を間違えると、コンポーネントは登録できてもPHP上で認識されなくなります。 #4. Itest にメソッドを追加します。詳しくは書きませんが、次のように追加しました [推奨学習: "PHPビデオ チュートリアル>>]
STDMETHODIMP Ctest::add(LONG a, LONG b, LONG* c) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加实现代码 *c = a + b; return S_OK; }5 を実行し、コンパイルしてコンポーネントとして自動的に登録し、Apache サービスを再起動します。 PHP スクリプトでは次の呼び出しが行われます。
<?php $conn = new COM("ATLProject3.test") or die("Cannot start ADO"); $com = 2; $conn->add(10, 2, $com); echo $com; ?>「コンポーネント名.略語」の形式が正しいことに注意してください。オンラインの例では、
"コンポーネント名.クラス名" です。バージョンの問題である可能性があります。とにかく、私の呼び出しは失敗しました。
6. PHP プロジェクト ディレクトリをブラウザに入力すると、COM コンポーネントが正常に読み込まれたことが表示されます。COM コンポーネントは、次のように 10 プラス 2 の出力を作成するために正常に使用されています。 12.
以上がphp comコンポーネントのエラー問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。