[COM的功能](https://www.php.net/manual/zh/faq.com.php)
[Windows API 参考手册](http://www.office-cn.net/t/api/api_content.htm)
COM是*组件对象模型*的缩写;它是DCE RPC(开放标准)之上的面向对象的层(和相关服务),并定义了通用的调用约定,该约定使使用任何语言编写的代码可以调用并与使用任何其他语言编写的代码进行互操作(前提是这些语言是COM意识)。这些代码不仅可以用任何语言编写,甚至都不必成为同一可执行文件的一部分。可以从DLL加载代码,在同一计算机上运行的另一个进程中找到代码,或者使用DCOM(分布式COM)在远程计算机上的另一个进程中找到代码,而这些代码甚至都不需要知道组件的位置居住。
有一个称为OLE Automation的COM子集,它包含一组COM接口,这些接口允许松散地绑定到COM对象,因此可以在运行时对它们进行自省和调用,而无需在编译时知道该对象的工作方式。PHP COM扩展利用OLE自动化接口允许您从脚本中创建和调用兼容对象。从技术上讲,这实际上应称为“*PHP的OLE自动化扩展*”,因为并非所有COM对象都是OLE兼容的。
现在,为什么或应该使用COM?COM是在Windows平台上将应用程序和组件粘合在一起的主要方法之一。使用COM可以启动Microsoft Word,填写文档模板并将结果另存为Word文档,然后将其发送给您的网站的访问者。您还可以使用COM来执行网络的管理任务和配置IIS。这些只是最常见的用途;您可以使用COM做更多的事情。
此外,我们支持使用Microsoft提供的COM互操作性层实例化和创建.Net程序集
从PHP 5.3.15 / 5.4.5开始,这个扩展要求在PHP .ini中启用 **`php_com_dotnet.dll`** ,以便使用这些函数。以前的PHP版本默认支持这些扩展。您负责安装您打算使用的各种COM对象的支持(例如MS Word);我们不能把所有这些都和PHP捆绑在一起。
**php.ini启用此扩展**
```
[com_dotnet]
extension=php_com_dotnet.dll
;当它打开时,PHP 将被允许作为 D-COM(分布式 COM)客户端运行,并允许 PHP 脚本在远程服务器上实例化 COM 对象
com.allow_dcom=0
;当此选项打开时(默认),在初始化 COM 对象时在自动加载的类型库中找到的常量将区分大小写注册。 有关更多详细信息,请参阅 com_load_typelib()
com.autoregister_casesensitive=1
;当它打开时,PHP 将尝试从它实例化的 COM 对象的类型库中注册常量,如果这些对象实现了获取该信息所需的接口。 它注册的常量的大小写敏感度由配置指令控制。
com.autoregister_typelib=0
;启用此选项后,将使用 PHP 错误机制报告在对象实例化期间加载类型库的任何问题。 默认值为关闭,如果发现或加载类型库时出错,则不会发出任何指示。
com.autoregister_verbose=0
;它控制默认字符集代码页,以便在传递字符串往返 COM 对象时使用。如果设置为空字符串,PHP 将假设您想要CP_ACP,这是默认系统 ANSI 代码页面。
;如果使用默认情况下设置的不同编码/字符对脚本中的文本进行编码,则设置此指令将避免您将代码页面作为参数传递给com类构造器。请注意,使用此指令(与任何 PHP 配置指令一样),您的 PHP 脚本变得不那么便携;您应该尽可能使用 COM 构造参数
com.code_page=""
;设置后,这应保留包含应在启动时加载的类型图书馆列表的文件的路径。文件的每行将被视为类型库名称,并加载,仿佛你已经调用com_load_typelib()。常数将持续注册,因此库只需加载一次。如果一个类型的库名称以字符串结尾,或者,则该库的常数将麻不仁地进行注册。#cis#case_insensitive
com.typelib_file=""
;用于点网对象的.NET 框架版本。设置的价值是框架版本编号的前三个部分,按点分离,并预设,例如。vv4.0.30319
com.dotnet_version=""
```
示例:
```
$word = new COM("C:\docs\word.doc");
$obj = new COM("ABC.MyObj"); //一般前边是主文件名、后边是类名,注册表里找这个文件可以找到
```
调用vbscript的Wscript.Shell执行windows的ifconfig命令
```
$cmd="ipconfig";
$phpwsh=new \COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");
$phpexec=$phpwsh->exec("cmd.exe /c $cmd");
$execoutput=$phpexec->stdout();
$result=$execoutput->readall();
echo $result;
结果
Windows IP ����
��̫�������� ��̫��:
�����ض��� DNS �� . . . . . . . : ctc
�������� IPv6 ��ַ. . . . . . . . : fe83::a18b:99be:461c:7166%5
IPv4 ��ַ . . . . . . . . . . . . : 192.168.2.6
�������� . . . . . . . . . . . . : 255.255.255.0
Ĭ������. . . . . . . . . . . . . : 192.168.2.1
��̫�������� VMware Network Adapter VMnet1:
�����ض��� DNS �� . . . . . . . :
�������� IPv6 ��ַ. . . . . . . . : fe83::8c8a:e576:bed4:620f%7
IPv4 ��ַ . . . . . . . . . . . . : 192.168.148.1
�������� . . . . . . . . . . . . : 255.255.255.0
Ĭ������. . . . . . . . . . . . . :
��̫�������� VMware Network Adapter VMnet8:
�����ض��� DNS �� . . . . . . . :
�������� IPv6 ��ַ. . . . . . . . : fe83::10cd:f9f7:4a1d:b8b5%16
IPv4 ��ַ . . . . . . . . . . . . : 192.168.159.1
�������� . . . . . . . . . . . . : 255.255.255.0
Ĭ������. . . . . . . . . . . . . :
```
WshShell提供对本地Windows外壳程序的访问。可以通过Wshshell对象模拟键盘,向激活窗口发送键值实现选择,弹出定时提示框,注册表的读写,程序的启动,系统等待,添加Event Log,创建快捷方式等下面我们介绍一下WshShell的几个方法:
**Wscript.shell是Wshshell的ProID**
>[warning]Wshshell是一个对象,存放在windows系统中的wshom.ocx文件中,可供在windows上运行的程序调用。他可对windows的外壳程序进行访问。
对象(object)是一些相关变量和方法的软件集,或者说库。当你需要这个对象里面的变量,方法,功能的时候,你就可以使用相关语言(代码)来调用。
ProID是程序员给某个CLSID指定的一个易记名字。组成如..
CLSID是windows系统对于不同的应用程序,文件类型,OLE对象,特殊文件夹以及各种系统组件分配的一个唯一表示它的代码。为Class ID的缩写。
**Wscript : Windows Script Host object model (注意,前三个缩写为Wsh )**
简单的说,Wscript就是Windows脚本宿主对象模型(WSHOM) , 而Wscript就是windows内对象存放的一个根对象(官方语言:Wscript是一个基于windows系统脚本宿主对象的根对象), 利用它可以创造两种COM对象:WshShell 与 WshNetwork(主要用于访问局域网环境下的[资源](http://zy.anjian.com/?action-resource)共享).
注释1:(八卦一下,不知道现在的诸如WshEnvironment, WshCollection, WshExec等对象是不是也存放在该根对象下,依照我的理解是的,因为他们都有前缀Wsh,但他们应该不是COM组件,故不再上面列出,应该是这样吧。另需注意Wsh是Wscript对象内置的变量,故在你载入WshShell后,在没有声明的情况下不能使用Wsh作为变量,否则会出现错误)
注释2:(COM对象即the Component Object Model,组件对象模型。COM组件是遵行COM规范编写,以Win32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行二进制代码,能够满足组建对框架的所有需求。简单理解COM对象就是可执行二进制代码存放的根对象)(貌似我搞不懂,如果真是这样,他们为什么非要用model模型这个单词呢,为什么不用Root根或family集合这类单词呢)
对于WshShell对象,其中的Shell是外壳的意思,应该是此对象能够调用windows的外壳程序,故取名shell,个人觉得那么Wscript.shell这个ProID堪称完美。
*****
例子3
```
$obj = new COM("server.object")
即可以使用COM对象的属性和方法。
下面以word为例
// 启动 word
$word = new COM("word.application") or die("Unable to instanciate Word");
print "ioaded Word, version {$word->Version}\\n";
//将其置前
$word->Visible = 1;
//打开一个空文档
$word->Documents->Add();
//随便做些事情
$word->Selection->TypeText("This is a test...");
$word->Documents\[1\]->SaveAs("Useless test.doc");
//关闭 word
$word->Quit();
//释放对象
$word->Release();
$word = null;
```
例子4:PHP隐藏文件的方法
```
$com=new COM('Scripting.FileSystemObject'); // FSO要使用绝对路径的
$file=$com ->getfile(\_\_FILE\_\_); //绝对路径
$file ->attributes='6'; //修改属性为系统、隐藏
//常数 值 描述
//Normal 0 普通文件。不设置属性。
//ReadOnly 1 只读文件。属性为读/写。
//Hidden 2 隐藏文件。属性为读/写。
//System 4 系统文件。属性为读/写。
//Volume 8 磁盘驱动器卷标。属性为只读。
//Directory 16 文件夹或目录。属性为只读。
//Archive 32 文件在上次备份后已经修改。属性为读/写。
//Alias 64 链接或者快捷方式。属性为只读。
//Compressed 128 压缩文件。属性为只读。
```
例子5
```
//这个就可以实现asp的XMLHTTP传马功能
$xmlhttp=new COM('Microsoft.XMLHTTP') or die("Create Microsoft.XMLHTTP Failed!");
$xmlhttp->open('GET','http://localhost/1.txt',false);
$xmlhttp->send();
echo $xmlhttp->responseText;//输出1.txt的内容
/\*
XMLHTTP方法
Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即异步执行。False,为同步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send(varBody)
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
setRequestHeader(bstrHeader, bstrvalue)
bstrHeader:HTTP 头(header)
bstrvalue: HTTP 头(header)的值 如果Open方法定义为POST,可以定义表单方式上传:
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
XMLHTTP属性
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody: 结果返回为无符号整数数组。
responseStream: 结果返回为IStream流。
responseText : 结果返回为字符串。
responseXML: 结果返回为XML格式数据。
\*/
```
例子6
Windows Management Instrumentation(WMI)是Microsoft基于Web的企业管理(WBEM)的实现,WBEM是一项行业倡议,旨在开发用于在企业环境中访问管理信息的标准技术
WMI提供了机器的全面知识,包括硬件和软件。 它具有所谓的CIM([通用信息模型](http://msdn.microsoft.com/en-us/library/aa389234.aspx)),以面向对象的方式封装信息。 它还提供了几个编程接口来检索所述信息。 在纯Windows环境中,它们将是[PowerShell](http://technet.microsoft.com/en-us/library/bb978526.aspx),VB脚本和.NET语言。 但是在我们的例子中,它将是PHP
使用WMI进行编程时的基本问题之一是:哪些“信息”可用? 换句话说,哪些对象/类可用? 幸运的是,Microsoft提供了有关WMI提供的类及其属性的完整列表。 请访问[此处](http://msdn.microsoft.com/en-us/library/aa394554.aspx)以获取完整参考。 在WMI编程中,大多数时候我们指的是[Win32类](http://msdn.microsoft.com/en-us/library/aa394084.aspx)。
### 先决条件(Pre-requisites)
步骤1:计算机管理-服务中查看`Windows Management Instrumentation`服务是否启动,这里需要启动它
步骤2:启动后WIN+R打开cli命令窗口输入`wbemtest`打开标题为“`Windows Management Instrumentation Test`”的对话框该对话框中的许多按钮当前都处于禁用状态,但是我们可以单击“`Connect...`”按钮来调用一个类似于以下所示的新对话框:
![](https://img.kancloud.cn/d2/e4/d2e47c31417747096467e4300989c7bd_520x567.png)
通常,我们不需要更改任何东西。`root\cimv2`是WMI接口的系统内置名称空间。 只需单击此对话框中的“`Connect`”按钮。 启用所有按钮后,它将带我们回到上一个窗口。
能够连接到机器的WMI接口只是前提条件之一。 我们还需要确保Windows防火墙将允许WMI呼叫通过。
在Windows防火墙中,选择“`Advanced Settings`”,然后为WMI相关条目启用入站和出站访问规则。 请查看下面的屏幕截图
![](https://img.kancloud.cn/89/0e/890e84a4fbcdc2a646b51554ebfd53b4_1038x770.png)
![](https://img.kancloud.cn/56/50/56503330259b50765a83df259907ef4a_1031x740.png)
在远程计算机上启用WMI防火墙规则后,我们可以按照上面的步骤2中所示测试连接。 要连接到远程计算机,我们需要在默认名称空间(“`root\cimv2`”)`root\cimv2`加上我们需要连接的PC的IP或名称(例如“`\\192.168.1.2\root\cimv2`”)并提供该远程计算机的用户名和密码。
我们可以期望WMI提供有关BIOS,CPU,磁盘,内存使用情况等的信息。但是如何显示这些信息?
步骤2WIN+R打开cli命令窗口输入`wbemtest`打开`wbemtest`对话框并连接到我们的本地计算机。 在“`WMI Tester`对话框中,单击“`Enum Classes...(枚举类)`按钮,并弹出以下对话框:
![](https://img.kancloud.cn/16/ee/16eebac296802e7298b37207178f13fa_527x493.png)
在此对话框中,不要在文本框中输入任何内容,选择“`Recursive(递归)`,然后单击“`OK(确定)`。 它应该弹出另一个对话框,如下所示:
![](https://img.kancloud.cn/53/c3/53c320c645a1917cae20cbe773592cc2_555x396.png)
这是一个很长的列表(在Windows 8.1 PC中为1,110个对象)。 您的PC可能会给出不同的列表,但应该与此列表大致相同。 请花一些时间浏览它,并查看WMI提供的类的名称。 例如,在上图中,我们突出显示了`Win32_LogicalDisk`类。 其中包含与计算机逻辑磁盘有关的所有信息。 要深入了解此类提供的内容,请双击该类,然后将出现另一个“`Object editor`对话框,如下图:
![](https://img.kancloud.cn/30/74/3074e0d3607946f7acf73628bc753e7e_551x572.png)
仔细查看“属性”面板。 此处列出的所有属性都是我们可以检索的属性。 例如,`VolumeName`将是我们为逻辑磁盘分配的名称。
WMI的Win32类有很多条目可供浏览。 一些最常用的是:
* 计算机系统硬体类,包括冷却设备,输入设备(键盘,鼠标等),大容量存储,主板,网络设备,打印,视频和监视器等。
* 已安装的应用程序类,包括字体等。
* 操作系统类,包括驱动程序,内存,进程,注册表,用户等
* 性能计数器类,包括所有与性能相关的类。
* ...
下面的代码段显示了有关IP 192.168.1.4上的远程计算机的逻辑磁盘的一些基本信息:
```
$pc = "192.168.1.4"; //IP of the PC to manage
//首先,创建一个`WbemScripting.SWbemLocator`类型的COM对象实例。
$WbemLocator = new COM ("WbemScripting.SWbemLocator");
//然后,将通过`ConnectServer`方法建立与PC的连接。 此方法调用的四个参数不言自明。 最后,我们需要将安全模拟设置为适当的级别。 建议将级别3用于WMI脚本。 有关级别的详细说明,请参见[此处](http://msdn.microsoft.com/en-us//library/system.security.principal.tokenimpersonationlevel.aspx)。 第3级的意思是“`Impersonation`”,这意味着我们引用:服务器进程可以在其本地系统上模拟客户端的安全上下文。 服务器无法模拟远程系统上的客户端。
$WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', 'your account', 'your password');
$WbemServices->Security_->ImpersonationLevel = 3;
$disks = $WbemServices->ExecQuery("Select * from Win32_LogicalDisk");
foreach ($disks as $d)
{
$str=sprintf("%s (%s) %s bytes, %4.1f%% free\n", $d->Name,$d->VolumeName,number_format($d->Size,0,'.',','), $d->FreeSpace/$d->Size*100.0);
echo $str;
}
```
结果:
```
C: (System) 104,864,059,392 bytes, 60.4% free
D: (Data) 209,719,963,648 bytes, 84.3% free
E: (Misc) 185,521,188,864 bytes, 95.3% free
```
请注意,上面的代码是创建远程COM连接以管理远程PC的方法。 要管理本地PC,语法会稍有不同,但差别不大:
```
<?php
$pc = ".";
$obj = new COM ("winmgmts:\\\\".$pc."\\root\\cimv2");
$disks = $obj->ExecQuery("Select * from Win32_LogicalDisk");
// Rest of the code is the same as previous remote connection sample
//其实本地的也可以这样操作
$pc = "127.0.0.1"; //IP of the PC to manage
$WbemLocator = new \COM ("WbemScripting.SWbemLocator");
$WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', '', '');//object(variant)#13 (0) { }
$WbemServices->Security_->ImpersonationLevel = 3;
```
这有点简单,因为我们不需要提供凭据和模拟,但这是基于以下假设:运行此代码段的用户具有管理员权限
为了获得类及其相关数据,我们使用了WQL(WMI查询语言)语句。 它与我们发布给MySQL服务器SQL语句非常相似,但是在这种情况下,我们正在从WMI检索数据。`Win32_LogicalDisk`是WMI中的一个“表”,用于存储与逻辑磁盘有关的所有信息。 要访问其他*表中的数据*,请使用“`Query Result`对话框中列出的名称,如上所示。 这也使我们可以过滤结果。 例如,`Select * from Win32_LogicalDisk where size > 150000000000`将仅返回大小超过150G(大约)的那些逻辑设备
如果成功,则`ExecQuery`语句将返回`variant`类型的对象。 缺点是,如果我们尝试`var_dump`该对象,PHP将只打印类似`object (variant) #3...`。 当我们尝试`var_dump``$d`变量时,`var_dump`发生同样的事情。 实际上,对于输出中的进一步编程没有任何用处。
实际上,我们只需要知道对象是可迭代的即可。 在这种情况下,当我们使用`foreach`循环时,每个`$d`实例将保存一个对逻辑磁盘的对象引用。 然后,我们可以使用熟悉的`->`符号访问该逻辑磁盘实例中的属性。 可以在该特定类的“`Object editor`对话框中找到属性列表,如上所示。
确保正确拼写类名(`Win32_LogicalDisk`)和属性名(如`Size`,`Name`)。 Windows不区分大小写,但是如果我们提供了错误的名称,则会引发错误并返回错误。
正如我们前面提到的,WMI编程也可以使用其他语言(例如C#,VB Script等)来完成。但是,WMI COM接口是一种动态接口,我们不能依靠任何这些语言来提供代码完成提示可轻松访问所有属性。 我们必须依靠上面显示的对话。
帮助程序员的一种解决方案是使用必要的方法将每个WMI类进一步封装到PHP类中。 这应该是一个非常简单的任务,我将把它留给有兴趣的人一起玩。
[PHP and WMI - Dig deep into Windows with PHP - SitePoint](https://www.sitepoint.com/php-wmi-dig-deep-windows-php/)
```
$obj = new COM ( 'winmgmts://localhost/root/CIMV2' );
$wmi_computersystem = $obj->ExecQuery("Select * from Win32_ComputerSystem");
$wmi_bios = $obj->ExecQuery("Select * from Win32_BIOS");
foreach ( $wmi_computersystem as $wmi_call )
{
$model = $wmi_call->Model;
}
foreach ( $wmi_bios as $wmi_call )
{
$serial = $wmi_call->SerialNumber;
$bios_version = $wmi_call->SMBIOSBIOSVersion;
}
echo "Bios version : $bios_version\n".
"Serial number : $serial\n".
"Hardware Model : $model\n";
```
* WbemScripting.SWbemLocator通过ConnectServer方法获取[SWbemServices](https://docs.microsoft.com/zh-cn/windows/win32/wmisdk/swbemservices)对象的引用
* SWbemServices 可以返回三个不同的 WMI 脚本库对象之一 (SWbemObjectSet、SWbemObject或 SWbemEventSource) ,具体取决于调用下面的方法
* 例如,如果返回 SWbemObjectSet,则必须枚举集合以访问集合中的每个 SWbemObject。 如果返回 SWbemObject,可以立即访问对象方法和属性,而无需先枚举集合
* SWbemServices 对象具有这些方法。
方法 说明
AssociatorsOf 通过一个或多个关联类检索与指定资源关联的托管资源的实例。 为原始终结点提供对象路径, 而 AssociatorsOf 返回位于相反终结点的托管资源。 AssociatorsOf 方法执行与"ASSOCIATORS OF"WQL 查询执行的相同函数。如果调用成功,则返回 SWbemObjectSet 对象。
AssociatorsOfAsync 异步返回与指定对象 (类或) 对象的集合。
delete 从 CIM 存储库中删除托管资源 (或类定义) 。
DeleteAsync 异步删除对象路径中指定的类或实例。
ExecMethod 提供一种替代方法,用于执行由托管资源类定义定义的方法。 主要用于脚本语言不支持 out 参数的情况。 例如,JScript不支持 out 参数。
ExecMethodAsync 异步执行方法提供程序导出的方法。
ExecNotificationQuery 执行事件订阅查询以接收事件。 事件订阅查询是定义要监视的托管环境更改的查询。 发生更改时,WMI 基础结构会向调用脚本传递描述更改的事件。
ExecNotificationQueryAsync 异步执行查询以接收事件。
ExecQuery 执行查询以检索 WMI 托管资源的实例集合, (或类定义) 。 ExecQuery 可用于检索与传递给 ExecQuery 的查询中定义的条件匹配的实例的筛选集合。
ExecQueryAsync 异步执行查询以检索对象。
get 根据对象路径检索托管资源 (或类) 实例。
GetAsync 基于对象路径异步检索作为类定义或实例的对象。
InstancesOf 根据类名检索托管资源的所有实例。 默认情况下 ,InstancesOf 执行深层检索。 也就是说 ,InstancesOf 检索由传递给方法的类名标识的资源的实例,并检索所有资源的所有实例,这些子类 (在目标类的) 下定义。
InstancesOfAsync 根据用户指定的选择条件异步返回指定类的实例。
ReferencesTo 返回引用指定资源的所有关联。 了解 ReferencesTo 的最佳方法是 将其与 AssociatorsOf 方法进行比较。 AssociationorsOf 返回位于关联相反端的动态资源。 ReferencesTo 返回关联本身。 ReferencesTo 方法执行与"REFERENCES OF"WQL 查询执行的相同函数。
ReferencesToAsync 异步返回引用特定类或实例的所有关联类或实例的集合。
SubclassesOf 从 CIM 存储库中检索指定类的所有子类。
SubclassesOfAsync 异步返回指定类的子类的集合。
* SWbemServices 支持三种操作模式:同步、异步和半同步,除了 Delete、 ExecMethod、 Get和9个异步方法,半同步是默认的和建议的操作模式
[Win32\_Processor class - Win32 apps | Microsoft Docs](https://docs.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-processor)
```
function GetWMI($wmi,$strClass, $strValue = array())
{
$arrData = array();
$objWEBM = $wmi->Get($strClass);
//$arrProp = $objWEBM->Properties_;
//$arrWEBMCol = $objWEBM->Instances_();
if( PHP_VERSION < 5 ) {
$objProp = $objWEBM->Properties_;
$arrProp = $objProp->Next($objProp->Count);
$objWEBMCol = $objWEBM->Instances_();
$arrWEBMCol = $objWEBMCol->Next($objWEBMCol->Count);
} else {
$arrProp = $objWEBM->Properties_;
$arrWEBMCol = $objWEBM->Instances_();
}
foreach($arrWEBMCol as $objItem)
{
//reset($arrProp);
$arrInstance = array();
foreach($arrProp as $propItem)
{
eval("\$value = \$objItem->" . $propItem->Name . ";");
echo "<br>";
var_dump($propItem->Name.'<=>'.$value);
echo "<br>";
if (empty($strValue))
{
$arrInstance[$propItem->Name] = trim($value);
}
else
{
if (in_array($propItem->Name, $strValue))
{
$arrInstance[$propItem->Name] = trim($value);
}
}
}
$arrData[] = $arrInstance;
}
return $arrData;
}
if('/'==DIRECTORY_SEPARATOR){
$ip=$_SERVER['SERVER_ADDR'];
}else{
$ip= @gethostbyname($_SERVER['SERVER_NAME']);
}
if ($ip=="127.0.0.1"||$ip=="::1") {
$pc = "127.0.0.1"; //IP of the PC to manage
$WbemLocator = new \COM ("WbemScripting.SWbemLocator");
$WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', '', '');//object(variant)#13 (0) { }
$WbemServices->Security_->ImpersonationLevel = 3;
}else{
$objLocator = new COM("WbemScripting.SWbemLocator");
$WbemServices = $objLocator->ConnectServer();
$WbemServices->Security_->ImpersonationLevel = 3;
//$prop = $wmi->get("Win32_PnPEntity");
}
$cpuinfo =GetWMI($WbemServices,"Win32_Processor");
//$cpuinfo =GetWMI($WbemServices,"Win32_Processor", array("Name","L2CacheSize","NumberOfCores"));
```
打印结果
```
AddressWidth<=>64
Architecture<=>9
AssetTag<=>To Be Filled By O.E.M.
Availability<=>3
Caption<=>Intel64 Family 6 Model 94 Stepping 3
Characteristics<=>236
ConfigManagerErrorCode<=>
ConfigManagerUserConfig<=>
CpuStatus<=>1
CreationClassName<=>Win32_Processor
CurrentClockSpeed<=>3201
CurrentVoltage<=>11
DataWidth<=>64
Description<=>Intel64 Family 6 Model 94 Stepping 3
DeviceID<=>CPU0
ErrorCleared<=>
ErrorDescription<=>
ExtClock<=>100
Family<=>205
InstallDate<=>
L2CacheSize<=>1024
L2CacheSpeed<=>
L3CacheSize<=>6144
L3CacheSpeed<=>0
LastErrorCode<=>
Level<=>6
LoadPercentage<=>41
Manufacturer<=>GenuineIntel
MaxClockSpeed<=>3201
Name<=>Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
NumberOfCores<=>4
NumberOfEnabledCore<=>4
NumberOfLogicalProcessors<=>4
OtherFamilyDescription<=>
PartNumber<=>To Be Filled By O.E.M.
PNPDeviceID<=>
PowerManagementCapabilities<=>
PowerManagementSupported<=>
ProcessorId<=>BFEBFBFF000506E3
ProcessorType<=>3
Revision<=>24067
Role<=>CPU
SecondLevelAddressTranslationExtensions<=>1
SerialNumber<=>To Be Filled By O.E.M.
SocketDesignation<=>LGA1151
Status<=>OK
StatusInfo<=>3
Stepping<=>
SystemCreationClassName<=>Win32_ComputerSystem
SystemName<=>DESKTOP-MTE1PF3
ThreadCount<=>4
UniqueId<=>
UpgradeMethod<=>1
Version<=>
VirtualizationFirmwareEnabled<=>1
VMMonitorModeExtensions<=>1
VoltageCaps<=>
AddressWidth<=>64
Architecture<=>9
AssetTag<=>To Be Filled By O.E.M.
Availability<=>3
Caption<=>Intel64 Family 6 Model 94 Stepping 3
Characteristics<=>236
ConfigManagerErrorCode<=>
ConfigManagerUserConfig<=>
CpuStatus<=>1
CreationClassName<=>Win32_Processor
CurrentClockSpeed<=>3201
CurrentVoltage<=>11
DataWidth<=>64
Description<=>Intel64 Family 6 Model 94 Stepping 3
DeviceID<=>CPU0
ErrorCleared<=>
ErrorDescription<=>
ExtClock<=>100
Family<=>205
InstallDate<=>
L2CacheSize<=>1024
L2CacheSpeed<=>
L3CacheSize<=>6144
L3CacheSpeed<=>0
LastErrorCode<=>
Level<=>6
LoadPercentage<=>23
Manufacturer<=>GenuineIntel
MaxClockSpeed<=>3201
Name<=>Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
NumberOfCores<=>4
NumberOfEnabledCore<=>4
NumberOfLogicalProcessors<=>4
OtherFamilyDescription<=>
PartNumber<=>To Be Filled By O.E.M.
PNPDeviceID<=>
PowerManagementCapabilities<=>
PowerManagementSupported<=>
ProcessorId<=>BFEBFBFF000506E3
ProcessorType<=>3
Revision<=>24067
Role<=>CPU
SecondLevelAddressTranslationExtensions<=>1
SerialNumber<=>To Be Filled By O.E.M.
SocketDesignation<=>LGA1151
Status<=>OK
StatusInfo<=>3
Stepping<=>
SystemCreationClassName<=>Win32_ComputerSystem
SystemName<=>DESKTOP-MTE1PF3
ThreadCount<=>4
UniqueId<=>
UpgradeMethod<=>1
Version<=>
VirtualizationFirmwareEnabled<=>1
VMMonitorModeExtensions<=>1
VoltageCaps<=>
```
>[info]AddressWidth --在32位操作系统,该值是32,在64位操作系统是64。
Architecture --所使用的平台的处理器架构。
AssetTag --代表该处理器的资产标签。
Availability --设备的状态。
Caption --设备的简短描述
Characteristics --处理器支持定义的功能
ConfigManagerErrorCode --Windows API的配置管理器错误代码
ConfigManagerUserConfig --如果为TRUE,该装置是使用用户定义的配置
CpuStatus --处理器的当前状态
CreationClassName --出现在用来创建一个实例继承链的第一个具体类的名称
CurrentClockSpeed --处理器的当前速度,以MHz为单位
CurrentVoltage --处理器的电压。如果第八位被设置,位0-6包含电压乘以10,如果第八位没有置位,则位在VoltageCaps设定表示的电压值。 CurrentVoltage时SMBIOS指定的电压值只设置
DataWidth --在32位处理器,该值是32,在64位处理器是64
Description --描述
DeviceID --在系统上的处理器的唯一标识符
ErrorCleared --如果为真,报上一个错误代码的被清除
ErrorDescription --错误的代码描述
ExtClock --外部时钟频率,以MHz为单位
Family --处理器系列类型
InstallDate --安装日期
L2CacheSize --二级缓存大小
L2CacheSpeed --二级缓存处理器的时钟速度
L3CacheSize --三级缓存的大小
L3CacheSpeed --三级缓存处理器的时钟速度
LastErrorCode --报告的逻辑设备上一个错误代码
Level --处理器类型的定义。该值取决于处理器的体系结构
LoadPercentage --每个处理器的负载能力,平均到最后一秒
Manufacturer --处理器的制造商
MaxClockSpeed --处理器的最大速度,以MHz为单位
Name --处理器的名称
NumberOfCores --芯为处理器的当前实例的数目。核心是在集成电路上的物理处理器
NumberOfEnabledCore --每个处理器插槽启用的内核数
NumberOfLogicalProcessors --用于处理器的当前实例逻辑处理器的数量
OtherFamilyDescription --处理器系列类型
PartNumber --这款处理器的产品编号制造商所设置
PNPDeviceID --即插即用逻辑设备的播放设备标识符
PowerManagementCapabilities --逻辑设备的特定功率相关的能力阵列
PowerManagementSupported --如果为TRUE,该装置的功率可以被管理,这意味着它可以被放入挂起模式
ProcessorId --描述处理器功能的处理器的信息
ProcessorType --处理器的主要功能
Revision --系统修订级别取决于体系结构
Role --所述处理器的作用
SecondLevelAddressTranslationExtensions --如果为True,该处理器支持用于虚拟地址转换扩展
SerialNumber --处理器的序列号
SocketDesignation --芯片插座的线路上使用的类型
Status --对象的当前状态
StatusInfo --对象的当前状态信息
Stepping --在处理器家族处理器的版本
SystemCreationClassName --创建类名属性的作用域计算机的价值
SystemName --系统的名称
ThreadCount --每个处理器插槽的线程数
UniqueId --全局唯一标识符的处理器
UpgradeMethod --CPU插槽的信息
Version --依赖于架构处理器的版本号
VirtualizationFirmwareEnabled --如果真,固件可以虚拟化扩展
VMMonitorModeExtensions --如果为True,该处理器支持Intel或AMD虚拟机监控器扩展。
VoltageCaps --该处理器的电压的能力
*****
* [预定义常量](https://www.php.net/manual/en/com.constants.php)
* [错误和错误处理](https://www.php.net/manual/en/com.error-handling.php)
* [例子](https://www.php.net/manual/en/com.examples.php)
* [对于每个](https://www.php.net/manual/en/com.examples.foreach.php)
* [数组和数组样式的COM属性](https://www.php.net/manual/en/com.examples.arrays.php)
* [com](https://www.php.net/manual/en/class.com.php)— com类
* [com :: \_\_ construct](https://www.php.net/manual/en/com.construct.php)— com类的构造函数
* [dotnet](https://www.php.net/manual/en/class.dotnet.php)— dotnet类
* [dotnet :: \_\_ construct](https://www.php.net/manual/en/dotnet.construct.php)— dotnet类的构造函数
* [变体](https://www.php.net/manual/en/class.variant.php)—变体类
* [variant :: \_\_construct](https://www.php.net/manual/en/variant.construct.php)—变体类构造函数
* [COMPersistHelper](https://www.php.net/manual/en/class.compersisthelper.php)— COMPersistHelper类
* [COMPersistHelper :: \_\_ construct](https://www.php.net/manual/en/compersisthelper.construct.php)—构造一个COMPersistHelper对象
* [COMPersistHelper :: GetCurFileName](https://www.php.net/manual/en/compersisthelper.getcurfilename.php)—获取当前文件名
* [COMPersistHelper :: GetMaxStreamSize](https://www.php.net/manual/en/compersisthelper.getmaxstreamsize.php)—获取最大流大小
* [COMPersistHelper :: InitNew](https://www.php.net/manual/en/compersisthelper.initnew.php)—将对象初始化为默认状态
* [COMPersistHelper :: LoadFromFile](https://www.php.net/manual/en/compersisthelper.loadfromfile.php)—从文件加载对象
* [COMPersistHelper :: LoadFromStream](https://www.php.net/manual/en/compersisthelper.loadfromstream.php)—从流中加载对象
* [COMPersistHelper :: SaveToFile](https://www.php.net/manual/en/compersisthelper.savetofile.php)—将对象保存到文件
* [COMPersistHelper :: SaveToStream](https://www.php.net/manual/en/compersisthelper.savetostream.php)—将对象保存到流
* [com\_exception](https://www.php.net/manual/en/class.com-exception.php)— com\_exception类
* [COM功能](https://www.php.net/manual/en/ref.com.php)
* [com\_create\_guid](https://www.php.net/manual/en/function.com-create-guid.php)—生成全局唯一标识符(GUID)
* [com\_event\_sink](https://www.php.net/manual/en/function.com-event-sink.php)—将事件从COM对象连接到PHP对象
* [com\_get\_active\_object](https://www.php.net/manual/en/function.com-get-active-object.php)—返回对已运行的COM对象实例的句柄
* [com\_load\_typelib](https://www.php.net/manual/en/function.com-load-typelib.php)—加载[Typelib](https://www.php.net/manual/en/function.com-load-typelib.php)
* [com\_message\_pump](https://www.php.net/manual/en/function.com-message-pump.php)—处理COM消息,休眠时间长达ms
* [com\_print\_typeinfo](https://www.php.net/manual/en/function.com-print-typeinfo.php)—打印出可调度接口的PHP类定义
* [variant\_abs](https://www.php.net/manual/en/function.variant-abs.php)—返回变量的绝对值
* [variant\_add](https://www.php.net/manual/en/function.variant-add.php)—将两个变量值“相加”并返回结果
* [variant\_and](https://www.php.net/manual/en/function.variant-and.php)—在两个变量之间执行按位与运算
* [variant\_cast](https://www.php.net/manual/en/function.variant-cast.php)—将变量转换为另一种类型的新变量对象
* [variant\_cat](https://www.php.net/manual/en/function.variant-cat.php)—将两个变量值连接在一起并返回结果
* [variant\_cmp](https://www.php.net/manual/en/function.variant-cmp.php)—比较两个变体
* [variant\_date\_from\_timestamp](https://www.php.net/manual/en/function.variant-date-from-timestamp.php)—返回Unix时间戳的变体日期表示形式
* [variant\_date\_to\_timestamp](https://www.php.net/manual/en/function.variant-date-to-timestamp.php)—将变体日期/时间值转换为Unix时间戳
* [variant\_div](https://www.php.net/manual/en/function.variant-div.php)—返回将两个变量相除的结果
* [variant\_eqv](https://www.php.net/manual/en/function.variant-eqv.php)—对两个变量执行按位等效
* [variant\_fix](https://www.php.net/manual/en/function.variant-fix.php)—返回变量的整数部分
* [variant\_get\_type](https://www.php.net/manual/en/function.variant-get-type.php)—返回变量对象的类型
* [variant\_idiv](https://www.php.net/manual/en/function.variant-idiv.php)—将变体转换为整数,然后返回除以它们的结果
* [variant\_imp](https://www.php.net/manual/en/function.variant-imp.php)—对两个变量执行按位含义
* [variant\_int](https://www.php.net/manual/en/function.variant-int.php)—返回变量的整数部分
* [variant\_mod](https://www.php.net/manual/en/function.variant-mod.php)—划分两个变量,仅返回其余变量
* [variant\_mul](https://www.php.net/manual/en/function.variant-mul.php)—将两个变量的值相乘
* [variant\_neg](https://www.php.net/manual/en/function.variant-neg.php)—对一个变体执行逻辑取反
* [variant\_not](https://www.php.net/manual/en/function.variant-not.php)—对一个变体执行按位非[求](https://www.php.net/manual/en/function.variant-not.php)反
* [variant\_or](https://www.php.net/manual/en/function.variant-or.php)—对两个变体执行逻辑分离
* [variant\_pow](https://www.php.net/manual/en/function.variant-pow.php)—返回执行具有两个变体的幂函数的结果
* [variant\_round](https://www.php.net/manual/en/function.variant-round.php)—将变体四舍五入到指定的小数位数
* [variant\_set\_type](https://www.php.net/manual/en/function.variant-set-type.php)—将变量转换为“就地”另一种类型
* [variant\_set](https://www.php.net/manual/en/function.variant-set.php)—为变量对象分配新值
* [variant\_sub-](https://www.php.net/manual/en/function.variant-sub.php)从左侧变量值中减去右侧变量的值
* [variant\_xor](https://www.php.net/manual/en/function.variant-xor.php)—对两个变体执行逻辑排除
- php更新内容
- PHP PSR 标准规范
- 辅助查询(*)
- composer项目的创建
- composer安装及设置
- composer自动加载讲解
- phpsdudy的composer操作
- git
- Git代码同时上传到GitHub和Gitee(码云)
- Git - 多人协同开发利器,团队协作流程规范与注意事项
- 删除远程仓库的文件
- github查询方法
- 错误
- 其他
- php.ini
- php配置可修改范围
- php超时
- 防跨目录设置
- 函数可变参数
- 【时间】操作
- 时间函数例子
- Date/Time 函数(不包含别名函数)
- DateTime类别名函数
- 【数字】操作
- 【字符串】操作
- 【数组】操作
- 排序
- 合并案例
- empty、isset、is_null
- echo 输出bool值
- if真假情况
- 流程控制代替语法【if (条件): endif;】
- 三元运算
- 运算符优先级
- 常量
- define与const(php5.3) 类常量
- 递归
- 单元测试
- 面向对象
- 对象(object) 与 数组(array) 的转换
- php网络相关
- 支持的协议和封装协议(如http,php://input)
- php://协议
- file://协议
- http(s)://协议
- ftp(s)://协议
- zip://, bzip2://, zlib://协议
- data://协议
- glob://协议
- expect://协议
- phar://
- ssh2
- rar://
- ogg://
- 上下文(Context)选项和参数
- 过滤器
- http请求及模拟登录
- 常用的header头部定义汇总
- HTTP响应头和请求头信息对照表
- HTTP请求的返回值含义说明
- content-type对照表
- Cache-Control对照
- curl函数
- 防止页面刷新
- telnet模拟get、post请求
- 三种方式模拟表单发布留言
- 模拟登陆
- 防盗链
- php+mysql模拟队列发送邮件
- socket
- 使用websocket实现php消息实时推送完整示例
- streams
- Stream函数实现websocket
- swoole
- 网络编程基本概念
- 全局变量域超全局变量
- 超全局变量
- $_ENV :存储了一些系统的环境变量
- $_COOKIE
- $_SESSION
- $_FILES
- $_SERVER
- 正则
- php正则函数
- 去除文本中的html、xml的标签
- 特殊符号
- \r\n
- 模式修正符
- 分组
- 断言(环视?)
- 条件表达式
- 递归表达式 (?R)
- 固化分组
- 正则例子
- 提取类文件的公共方法
- 抓取网页内容
- 匹配中文字符
- 提取sql日志文件
- 框架
- 文件操作
- 自动加载spl_autoload_register
- 文件加载
- 文件的上传下载
- 常见的mimi类型
- 文件断点续传
- 下载文件防盗链
- 破解防盗链
- 将字节转为人可读的单位
- 无限分类
- 短信验证码
- 短信宝
- 视频分段加载
- 隐藏地址
- MPEG DASH视频分片技术
- phpDoc注释
- @错误抑制符
- 字符编码
- PHP CLI模式开发
- CGI、FastCGI和PHP-FPM关系图解
- No input file specified的解决方法
- SAPI(PHP常见的四种运行模式)
- assert断言
- 轮询(Event Loop)
- 异常处理
- 异常分类
- php系统异常
- 错误级别
- set_error_handler
- set_exception_handler
- register_shutdown_function
- try catch
- tp5异常处理类解析
- 文件上传相关设置
- 进程/线程/协程
- 协程
- 什么是协程
- 引用&
- Heredoc和Nowdoc语法
- 类基础
- 系统预定义类
- pdo
- 类的三大特性:封装,继承,多态
- 魔术方法
- extends继承
- abstract 抽象类
- interface 接口(需要implements实现)
- 抽象类和接口的区别
- 多态
- static
- final
- serialize与unserialize
- instanceof 判断后代子类
- 类型约束
- clone克隆
- ::的用法
- static::class、self::class
- new self()与new static()
- this、self、static、parent、super
- self、static、parent:后期静态绑定
- PHP的静态变量
- php导入
- trait
- 动态调用类方法
- 参数及类型申明
- 方法的重载覆盖
- return $a && $b
- 类型声明
- 设计思想
- 依赖注入与依赖倒置
- MVC模式与模板引擎
- 模版引擎
- smarty模版
- 系统变量、全局变量
- 语言切换
- 函数-给函数默认值
- 流程控制-遍历
- 模版加载
- 模版继承
- blade
- twig
- Plates
- 创建型模式(创建类对象)--单原二厂建
- (*)单例模式(保证一个类仅有一个实例)
- (*)工厂模式(自动实例化想要的类)
- 原型模式(在指定方法里克隆this)
- 创建者模式(建造者类组装近似类属性)
- 结构型模式 --桥(帮)组享外带装适
- 适配器模式(Adapter 用于接口兼容)
- 桥接模式(方法相同的不同类之间的快速切换)
- 装饰模式(动态增加类对象的功能 如游戏角色的装备)
- 组合模式(用于生成类似DOMDocument这种节点类)
- 外观模式(门面(Facade)模式 不同类的统一调用)
- 享元模式
- 代理模式
- 行为型模式--观摩职命状-备爹在房中洁厕
- (*)观察者模式
- (*)迭代器模式(Iterator)
- 模板方法模式 Template
- 命令模式(Command)
- 中介者模式(Mediator)
- 状态模式(State)
- 职责链模式 (Chainof Responsibility)
- 策略模式(Strategy)
- 已知模式-备忘录模式(Memento)
- 深度模式-解释器模式(Interpreter)
- 深度模式-访问者模式(Visitor)
- (*)注册树(注射器、注册表)模式
- PHP扩展库列表
- 函数参考
- 影响 PHP 行为的扩展
- APC扩展(过时)
- APCu扩展
- APD扩展(过时)
- bcompiler扩展(过时)
- BLENC扩展 (代码加密 实验型)
- Componere扩展(7.1+)
- Componere\Definition
- Componere\Patch
- Componere \ Method
- Componere\Value
- Componere函数
- 错误处理扩展(PHP 核心)
- FFI扩展
- 基本FFI用法
- FFI api
- htscanner扩展
- inclued扩展
- Memtrack扩展
- OPcache扩展(5.5.0内部集成)
- Output Control扩展(核心)
- PHP Options/Info扩展(核心)
- 选项、 信息函数
- phpdbg扩展(5.6+内部集成)
- runkit扩展
- runkit7扩展
- scream扩展
- uopz扩展
- Weakref扩展
- WeakRef
- WeakMap
- WinCache扩展
- Xhprof扩展
- Yac(7.0+)
- 音频格式操作
- ID3
- KTaglib
- oggvorbis
- OpenAL
- 身份认证服务
- KADM5
- Radius
- 针对命令行的扩展
- Ncurses(暂无人维护)
- Newt(暂无人维护)
- Readline
- 压缩与归档扩展
- Bzip2
- LZF
- Phar
- Rar
- Zip
- Zlib
- 信用卡处理
- 加密扩展
- Crack(停止维护)
- CSPRNG(核心)
- Hash扩展(4.2内置默认开启、7.4核心)
- Mcrypt(7.2移除)
- Mhash(过时)
- OpenSSL(*)
- 密码散列算法(核心)
- Sodium(+)
- 数据库扩展
- 数据库抽象层
- DBA
- dbx
- ODBC
- PDO(*)
- 针对各数据库系统对应的扩展
- CUBRID
- DB++(实验性)
- dBase
- filePro
- Firebird/InterBase
- FrontBase
- IBM DB2
- Informix
- Ingres
- MaxDB
- Mongo(MongoDB老版本)
- MongoDB
- mSQL
- Mssql
- MySQL
- OCI8(Oracle OCI8)
- Paradox
- PostgreSQL
- SQLite
- SQLite3
- SQLSRV(SQL Server)
- Sybase
- tokyo_tyrant
- 日期与时间相关扩展
- Calendar
- 日期/时间(核心)
- HRTime(*)
- 文件系统相关扩展
- Direct IO
- 目录(核心)
- Fileinfo(内置)
- 文件系统(核心)
- Inotify
- Mimetype(过时)
- Phdfs
- Proctitle
- xattr
- xdiff
- 国际化与字符编码支持
- Enchant
- FriBiDi
- Gender
- Gettext
- iconv(内置默认开启)
- intl
- 多字节字符串(mbstring)
- Pspell
- Recode(将要过时)
- 图像生成和处理
- Cairo
- Exif
- GD(内置)
- Gmagick
- ImageMagick
- 邮件相关扩展
- Cyrus
- IMAP
- Mail(核心)
- Mailparse
- vpopmail(实验性 )
- 数学扩展
- BC Math
- GMP
- Lapack
- Math(核心)
- Statistics
- Trader
- 非文本内容的 MIME 输出
- FDF
- GnuPG
- haru(实验性)
- Ming(实验性)
- wkhtmltox(*)
- PS
- RPM Reader(停止维护)
- RpmInfo
- XLSWriter Excel操作(*)
- php第三方库非扩展
- 进程控制扩展
- Eio
- Ev
- Expect
- Libevent
- PCNTL
- POSIX
- 程序执行扩展(核心)
- parallel
- pthreads(*)
- pht
- Semaphore
- Shared Memory
- Sync
- 其它基本扩展
- FANN
- GeoIP(*)
- JSON(内置)
- Judy
- Lua
- LuaSandbox
- Misc(核心)
- Parsekit
- SeasLog(-)
- SPL(核心)
- SPL Types(实验性)
- Streams(核心)
- stream_wrapper_register
- stream_register_wrapper(同上别名)
- stream_context_create
- stream_socket_client
- stream_socket_server
- stream_socket_accept
- stream_socket_recvfrom
- stream_socket_sendto
- Swoole(*)
- Tidy扩展
- Tokenizer
- URLs(核心)
- V8js(*)
- Yaml
- Yaf
- Yaconf(核心)
- Taint(检测xss字符串等)
- Data Structures
- Igbinary(7.0+)
- 其它服务
- 网络(核心)
- Sockets
- socket_create
- socket_bind(服务端即用于监听的套接字)
- socket_listen(服务端)
- socket_accept(服务端)
- socket_connect(客户端)
- socket_read
- socket_recv(类似socket_read)
- socket_write
- socket_send
- socket_close
- socket_select
- socket_getpeername
- socket_getsockname
- socket_get_option
- socket_getopt(socket_get_option的别名)
- socket_set_option
- socket_setopt( socket_set_option的别名)
- socket_recvfrom
- socket_sendto
- socket_addrinfo_bind
- socket_addrinfo_connect
- socket_addrinfo_explain
- socket_addrinfo_lookup
- socket_clear_error
- socket_last_error
- socket_strerror
- socket_cmsg_space
- socket_create_listen
- socket_create_pair
- socket_export_stream
- socket_import_stream
- socket_recvmsg
- socket_sendmsg
- socket_set_block
- socket_set_nonblock
- socket_shutdown
- socket_wsaprotocol_info_export
- socket_wsaprotocol_info_import
- socket_wsaprotocol_info_release
- cURL(*)
- curl_setopt
- Event(*)
- chdb
- FAM
- FTP
- Gearman
- Gopher
- Gupnp
- Hyperwave API(过时)
- LDAP(+)
- Memcache
- Memcached(+)
- mqseries
- RRD
- SAM
- ScoutAPM
- SNMP
- SSH2
- Stomp
- SVM
- SVN(试验性的)
- TCP扩展
- Varnish
- YAZ
- YP/NIS
- 0MQ(ZeroMQ、ZMQ)消息系统
- 0mq例子
- ZooKeeper
- 搜索引擎扩展
- mnoGoSearch
- Solr
- Sphinx
- Swish(实验性)
- 针对服务器的扩展
- Apache
- FastCGI 进程管理器
- IIS
- NSAPI
- Session 扩展
- Msession
- Sessions
- Session PgSQL
- 文本处理
- BBCode
- CommonMark(markdown解析)
- cmark函数
- cmark类
- Parser
- CQL
- IVisitor接口
- Node基类与接口
- Document
- Heading(#)
- Paragraph
- BlockQuote
- BulletList
- OrderedList
- Item
- Text
- Strong
- Emphasis
- ThematicBreak
- SoftBreak
- LineBreak
- Code
- CodeBlock
- HTMLBlock
- HTMLInline
- Image
- Link
- CustomBlock
- CustomInline
- Parle
- 类函数
- PCRE( 核心)
- POSIX Regex
- ssdeep
- 字符串(核心)
- 变量与类型相关扩展
- 数组(核心)
- 类/对象(核心)
- Classkit(未维护)
- Ctype
- Filter扩展
- 过滤器函数
- 函数处理(核心)
- quickhash扩展
- 反射扩展(核心)
- Variable handling(核心)
- Web 服务
- OAuth
- api
- 例子:
- SCA(实验性)
- SOAP
- Yar
- XML-RPC(实验性)
- Windows 专用扩展
- COM
- 额外补充:Wscript
- win32service
- win32ps(停止更新且被移除)
- XML 操作(也可以是html)
- libxml(内置 默认开启)
- DOM(内置,默认开启)
- xml介绍
- 扩展类与函数
- DOMNode
- DOMDocument(最重要)
- DOMAttr
- DOMCharacterData
- DOMText(文本节点)
- DOMCdataSection
- DOMComment(节点注释)
- DOMDocumentFragment
- DOMDocumentType
- DOMElement
- DOMEntity
- DOMEntityReference
- DOMNotation
- DOMProcessingInstruction
- DOMXPath
- DOMException
- DOMImplementation
- DOMNamedNodeMap
- DOMNodeList
- SimpleXML(内置,5.12+默认开启)
- XMLReader(5.1+内置默认开启 用于处理大型XML文档)
- XMLWriter(5.1+内置默认开启 处理大型XML文档)
- SDO(停止维护)
- SDO-DAS-Relational(试验性的)
- SDO DAS XML
- WDDX
- XMLDiff
- XML 解析器(Expat 解析器 默认开启)
- XSL(内置)
- 图形用户界面(GUI) 扩展
- UI
- PHP SPL(PHP 标准库)
- 数据结构
- SplDoublyLinkedList(双向链表)
- SplStack(栈 先进后出)
- SplQueue(队列)
- SplHeap(堆)
- SplMaxHeap(最大堆)
- SplMinHeap(最小堆)
- SplPriorityQueue(堆之优先队列)
- SplFixedArray(阵列【数组】)
- SplObjectStorage(映射【对象存储】)
- 迭代器
- ArrayIterator
- RecursiveArrayIterator(支持递归)
- DirectoryIterator类
- FilesystemIterator
- GlobIterator
- RecursiveDirectoryIterator
- EmptyIterator
- IteratorIterator
- AppendIterator
- CachingIterator
- RecursiveCachingIterator
- FilterIterator(遍历并过滤出不想要的值)
- CallbackFilterIterator
- RecursiveCallbackFilterIterator
- RecursiveFilterIterator
- ParentIterator
- RegexIterator
- RecursiveRegexIterator
- InfiniteIterator
- LimitIterator
- NoRewindIterator
- MultipleIterator
- RecursiveIteratorIterator
- RecursiveTreeIterator
- 文件处理
- SplFileInfo
- SplFileObject
- SplTempFileObject
- 接口 interface
- Countable
- OuterIterator
- RecursiveIterator
- SeekableIterator
- 异常
- 各种类及接口
- SplSubject
- SplObserver
- ArrayObject(将数组作为对象操作)
- SPL 函数
- 预定义接口
- Traversable(遍历)接口
- Iterator(迭代器)接口
- IteratorAggregate(聚合式迭代器)接口
- ArrayAccess(数组式访问)接口
- Serializable 序列化接口
- JsonSerializable
- Closure 匿名函数(闭包)类
- Generator生成器类
- 生成器(php5.5+)
- yield
- 反射
- 一、反射(reflection)类
- 二、Reflector 接口
- ReflectionClass 类报告了一个类的有关信息。
- ReflectionObject 类报告了一个对象(object)的相关信息。
- ReflectionFunctionAbstract
- ReflectionMethod 类报告了一个方法的有关信息
- ReflectionFunction 类报告了一个函数的有关信息。
- ReflectionParameter 获取函数或方法参数的相关信息
- ReflectionProperty 类报告了类的属性的相关信息。
- ReflectionClassConstant类报告有关类常量的信息。
- ReflectionZendExtension 类返回Zend扩展相关信息
- ReflectionExtension 报告了一个扩展(extension)的有关信息。
- 三、ReflectionGenerator类用于获取生成器的信息
- 四、ReflectionType 类用于获取函数、类方法的参数或者返回值的类型。
- 五、反射的应用场景
- phpRedis
- API
- API详细
- redis DB 概念:
- 通用命令:rawCommand
- Connection
- Server
- List
- Set
- Zset
- Hash
- string
- Keys
- 事物
- 发布订阅
- 流streams
- Geocoding 地理位置
- lua脚本
- Introspection 自我检测
- biMap
- 原生
- php-redis 操作类 封装
- redis 队列解决秒杀解决超卖:
- swoole+框架笔记
- 安装及常用Cli操作
- TCP
- 4种回调函数的写法
- easyswoole
- 目录结构
- 配置文件
- Linux+Nginx
- 前置
- linux
- 开源网站镜像及修改yum源
- 下载linux
- Liunx中安装PHP7.4 的三种方法(Centos8)
- yum安装
- 源码编译安装
- LNMP一键安装
- 查看linux版本号
- 设置全局环境变量
- 查看php.ini必须存放的位置
- 防火墙与端口开放
- nohup 后台运行命令
- linux 查看nginx,php-fpm运行用户及用户组
- 网络配置
- CentOS中执行yum update时报错
- 关闭防火墙
- 查看端口是否被占用
- 查看文件夹大小
- nginx相关
- 一个典型的nginx配置
- nginx关于多个项目的配置(易于管理)
- nginx.config配置文件的结构
- 1、events
- 2、http
- nginx的location配置详解
- Nginx相关命令
- Nginx安装
- 配置伪静态
- 为静态配置例子
- apache
- nginx
- pathinfo模式
- Shell脚本
- bash
- shell 语言中 0 代表 true,0 以外的值代表 false。
- 变量
- shell字符串
- shell数组
- shell注释
- 向Shell脚内传递参数
- 运算符
- 显示命令执行结果
- printf
- test 命令
- 流程控制与循环
- if
- case
- for
- while
- until
- break和continue
- select 结构
- shell函数
- shell函数的全局变量和局部变量
- 将shell输出写入文件中(输出重定向)
- Shell脚本中调用另一个Shell脚本的三种方式
- 定时任务
- PHP实现定时任务的五种方法
- 优化
- ab压力测试
- 缓存
- opcache
- memcache
- php操作
- 数据库
- 配置
- 数据库锁机制
- 主从分布
- 数据库设计
- 逻辑设计
- 物理设计
- 字段类型的选择
- 笔记
- SET FOREIGN_KEY_CHECKS
- 字符集与乱码
- SQL插入 去除重复记录的实现
- 分区表
- nginx 主从配置
- nginx 负载均衡的配置
- 手动搭建Redis集群和MySQL主从同步(非Docker)
- Redis Cluster集群
- mysql主从同步
- 用安卓手机搭建 web 服务器
- 软件选择
- url重写
- 大流量高并发解决方案
- 权限设计
- ACL
- RBAC
- RBAC0
- RBAC1(角色上下级分层)
- RBAC2(用户角色限约束)
- RBAC3
- 例子
- Rbac.class.php
- Rbac2
- Auth.class.php
- fastadmin Auth
- tree1
- ABAC 基于属性的访问控制
- 总结:SAAS后台权限设计案例分析
- casbin-权限管理框架
- 开始使用
- casbinAPI
- casbin管理API
- RBAC API
- Think-Casbin
- 单点登录(SSO)
- OAuth授权
- OAuth 2.0 的四种方式
- 授权码
- 隐藏式
- 密码式
- 凭证式
- 更新令牌
- 例子:第三方登录
- 微服务架构下的统一身份认证和授权
- 代码审计
- 漏洞挖掘的思路
- 命令注入
- 代码注入
- XSS 反射型漏洞
- XSS 存储型漏洞
- xss过滤
- HTML Purifier文档
- 开始
- id规则
- class规则
- 过滤分类
- Attr
- AutoFormat
- CSS
- Cache
- Core
- Filter
- html
- Output
- Test
- URI
- 其他
- 嵌入YouTube视频
- 加快HTML净化器的速度
- 字符集
- 定制
- Tidy
- URI过滤器
- 在线测试
- xss例子
- 本地包含与远程包含
- sql注入
- 函数
- 注释
- 步骤
- information_schema
- sql注入的分类
- 实战
- 防御
- CSRF 跨站请求伪造
- 计动态函数执行与匿名函数执行
- unserialize反序列化漏洞
- 覆盖变量漏洞
- 文件管理漏洞
- 文件上传漏洞
- 跳过登录
- URL编码对照表
- XXE
- 前端、移动端
- html5
- meta标签
- flex布局
- javascript
- jquery
- 选择器
- 精细分类
- 事件
- on事件无效:
- jquery自定义事件
- 表单操作
- 通用
- select
- checkbox
- radio
- js正则相关
- js中判断某字符串含有某字符出现的次数
- js匹配指定字符
- $.getjson方法配合在url上传递callback=?参数,实现跨域
- pajax入门
- jquery的extend插件制作
- jquery的兼容
- jquery的连续调用:
- $ 和 jQuery 及 $() 的区别
- 页面响应顺序及$(function(){})等使用
- 匿名函数:
- ajax
- 获取js对象所有方法
- dom加载
- ES6函数写法
- ES6中如何导入和导出模块
- 数组的 交集 差集 补集 并集
- phantomjs
- js数组的map()方法操作json数组
- 实用函数
- js精确计算CalcEval 【价格计算】 浮点计算
- js精确计算2
- js数组与对象的遍历
- bootstrap
- class速查
- 常见data属性
- data-toggle与data-target的作用
- 组件
- bootstrapTable
- 表选项
- 表选项2
- 示例
- 数据格式(json)
- 用法(row:行,column:列)
- Bootstrap-table使用footerFormatter做统计列功能
- 示例2
- JQuery-Jquery的TreeGrid插件
- 服务器端分页
- 合并单元格1
- 合并单元格2
- 合并单元格3
- 合并单元格4
- 合并单元格5(插件)
- 列求和
- 添加行,修改行、扩展行数据
- 扩展
- 开源项目
- PhpSpreadsheet
- 实例
- 会员 数据库表设计
- 程序执行
- 开发总结
- API接口
- API接口设计
- json转化
- app接口
- 杂项
- 三方插件库
- 检测移动设备(包括平板电脑)
- curl封装
- Websocket
- 与谷歌浏览器交互
- Crontab管理器
- 实用小函数
- PHP操作Excel
- SSL证书
- sublime Emmet的快捷语法
- 免费翻译接口
- 接口封装
- 免费空间
- 架构师必须知道的26项PHP安全实践
- 大佬博客
- 个人支付平台
- RPC(远程调用)及框架