Solution au problème selon lequel php ne peut pas appeler le composant com : 1. Confirmez la version de php et les outils système requis ; 2. Configurez php.ini et activez "com.allow_dcom = true" ; 3. Activez la fonction com de php ou vérifiez que "php_com_dotnet. dll" est chargé avec succès.
L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 8.1, ordinateur Dell G3.
Que dois-je faire si php ne peut pas appeler le composant com ? Enregistrement des pièges des composants COM de référence PHP
Récemment, un "gig job" est apparu dans les éléments de travail. Il est nécessaire d'ajouter une fonction au projet PHP existant, et le projet et le projet de code source nécessaires à l'implémentation de la fonction le sont également. disponible. Ce livre C'est une chose très simple. Bien que j'utilise rarement PHP, ce n'est pas le "facteur limitant" le plus important. Ce qui me donne mal à la tête, c'est que la bibliothèque de fonctions est implémentée à l'aide du framework .NET. Il existe de nombreux ajustements au format des données, ce qui est relativement compliqué. n'est pas un manuel de logique fonctionnelle, difficile à copier en PHP. Par conséquent, référencer directement la bibliothèque dynamique de .NET en php est devenu la clé pour accomplir la « tâche »
De nombreux seniors sur Internet ont enregistré ce problème, mais ils n'ont pas réussi à le copier. Cet article est en train de « vivre des petits boulots ». " , rencontrez et remplissez les enregistrements des fosses
Générer une bibliothèque dynamique de composants COM
Le composant COM (composant COM) est une technologie de développement logiciel développée par Microsoft. Son essence réside dans quelques petits programmes exécutables binaires qui peuvent fournir des services aux applications, aux systèmes d'exploitation et à d'autres composants. En PHP, si vous souhaitez référencer une bibliothèque dynamique tierce, vous devez utiliser la nouvelle méthode COM("Component.class"). Le composant doit être un composant COM
1 Créer un projet de bibliothèque de classes Windows
. Quelle que soit la version de Framework, vous devriez pouvoir trouver le projet de bibliothèque de classes sous l'onglet Windows
De cette façon, il y aura par défaut un fichier PropertiesAssemblyInfo.cs dans le projet, qui enregistre les informations requises pour l'ensemble du projet
2. Le framework cible doit correspondre
créer le projet Vous pouvez sélectionner le framework à ce moment
S'il s'agit d'un ajustement ultérieur, vous pouvez le modifier dans le framework cible dans Propriétés du projet > Application
Remarque que le framework doit être cohérent lors de l'enregistrement ultérieur de la dll
3. Configurer les composants COM Cela peut être vu
Dans le fichier PropertiesAssemblyInfo.cs, modifiez ComVisible comme suit
[assembly: ComVisible(true)]
4 Pour définir la signature et définir le fort. name key
Project Properties> Dans la signature, cochez "Signer l'assembly" et en même temps cliquez ci-dessous Créez un nouveau fichier de clé dans "Sélectionner un fichier de clé de nom fort" puis générez-le. Répertoire binDebug
5. S'il existe une bibliothèque dynamique qui ne peut pas être intégrée
Si la version du Framework du projet est inférieure, ou,
La bibliothèque référencée ne dispose pas des fonctionnalités requises pour l'interopérabilité
En bref, l'interopérabilité intégrée ne peut pas être réalisée. sur la bibliothèque référencée.
Ensuite, la dll dépendante doit également effectuer un enregistrement ultérieur et d'autres opérations
Enregistrer la DLL sur le serveur
Impliqué Lorsqu'il s'agit d'opérations au niveau du système, il existe de nombreux pièges.
1. Confirmez la version de PHP
La version 5.3.22 testée personnellement n'est pas disponible, la version 5.4.5 est disponible, alors essayez d'utiliser la version 5.4 ou supérieure
Maintenant, la version la plus élevée de PHP est la version 8.0, je ne le fais pas. Je ne sais pas si la méthode de fonctionnement est toujours la même
2. Confirmez les outils système requis
Vous avez besoin de deux outils, gacutil et regasm, et les deux doivent correspondre à la version du Framework
C'est-à-dire la dll du généré. Le composant COM est utilisé Quelle version du framework, vous devez également utiliser la version correspondante de l'outil ici
Normalement, le système Windows aura certainement l'outil regasm intégré
Chemin du répertoire Par exemple,
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe
If. il est appliqué sur un système 64 bits, puis dans le répertoire Framework64, Sinon, utilisez le répertoire Framework et sélectionnez le numéro de version correspondant au framework Framework, où vous devriez pouvoir trouver le fichier RegAsm.exe. L'outil gacutil se trouve. inclus dans le SDK Windows fourni par Microsoft. S'il n'a pas été installé, vous pouvez cliquer pour le télécharger depuis le site officiel. Après l'installation par défaut, le chemin de l'outil pour les versions inférieures à Frameworkd 4.0,
C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\gacutil.exe
Si vous avez besoin de la version 4.0, le chemin est
c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\gacutil.exe
3. Configurez php.ini
et activez com.allow_dcom = true
Assurez-vous qu'il y a php_com_dotnet dans votre répertoire extension_dir
Ouvrez ou ajoutez extension=php_com_dotnet.dll
4. . Cachez et enregistrez la DLL
Prenez le système 64 bits, version 4.0 my.dll comme exemple
Copiez la dll générée dans la première partie dans c :Program FilesMicrosoft SDKsWindowsv7.1BinNETFX 4.0 Tools
Allez dans le répertoire c : Fichiers de programmeMicrosoft SDKsWindowsv7.1BinNETFX 4.0 Tools et exécutez gacutil /i my.dll
Allez dans le répertoire C:WindowsMicrosoft.NETFramework64v4.0.30319 et exécutez regasm my.dll
5. Désenregistrez la DLL
Prenez le système 64 bits, version 4.0 my.dll à titre d'exemple
Allez dans le répertoire C:WindowsMicrosoft.NETFramework64v4.0.30319 et exécutez regasm my.dll /unregister
Allez dans le répertoire c:Program FilesMicrosoft SDKsWindowsv7.1BinNETFX 4.0 Exécutez gacutil /u my
php sous Outils pour appeler le composant COMUne fois le contenu ci-dessus configuré correctement, vous pouvez l'appeler dans le fichier php. La méthode est la suivante. Si
$comClass = new COM('namespace.className'); $comClass -> methodName();
vous indique qu'il n'y a pas de méthode COM, vous devez en tenir compte. si elle a été activée. la fonction com de php, ou si php_com_dotnet.dll est chargé avec succès S'il vous indique qu'aucune méthode dll n'est appelée ou que la dll n'est pas enregistrée, vous devez déterminer si le fichier dll a été enregistré avec succès Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!