# process.php 库模块帮助文档

## process 成员列表 <a id="process" href="#process">&#x23;</a>

### process.php(path,documentRoot) <a id="process.php" href="#process.php">&#x23;</a>
查找可用端口创建 PHP/CGI 服务器，返回返回完整URL。  
如果 PHP/CGI 服务器已启动则直接返回 URL 而不是重复启动服务器,  
省略参数返回首页 URL,尾部不包含斜杠  

可选用 @path 参数指定请求目标文件的相对路径。  
└── 因 PHP 不支持内嵌资源路径，  
└── 放 *.php 文件的工程目录「内嵌资源」属性必须为 false。  

可选使用参数 @documentRoot 指定网站根目录,默认为"/"

## process.php 成员列表 <a id="process.php" href="#process.php">&#x23;</a>

基于 wsock.tcp.simpleHttpServer 启动 PHP CGI 服务端，  
HTTP 服务端默认自动分配空闲端口，当前线程结束时，HTTP 服务端会自动退出  
当前进程退出时，即使 PHP CGI 进程仍然运行也会自动退出。  

自动搜索并返回  php-cgi.exe 路径。  
如果找不到 Win 7 自动安装 PHP 7.4 , Win 10 自动安装 PHP 8.3。  
如果要兼容 XP 系统，请导入 process.php.5.2 以替代 process.php 即可。

查找可用端口创建 PHP/CGI 服务器，返回返回完整URL。  
此服务端限制使用本机IP 127.0.0.1 访问,并随机分配端口不会出现端口冲突  
如果 PHP/CGI 服务器已启动则直接返回URL而不是重复启动服务器,  
注意当前线程结束时,此服务器线程会自动退出

### process.php.cgiPath <a id="process.php.cgiPath" href="#process.php.cgiPath">&#x23;</a>
可选指定 php-cgi.exe 路径,  
不指定则或为 null 则调用 checkCgiPath 函数自动搜索。  
搜索顺序： 请参考该函数源码。

### process.php.checkCgiPath() <a id="process.php.checkCgiPath" href="#process.php.checkCgiPath">&#x23;</a>
自动搜索并返回  php-cgi.exe 路径。  
如果找不到 Win 7 自动安装 PHP 7.4 , Win 10 自动安装 PHP 8.3

### process.php.code[] <a id="process.php.code[]" href="#process.php.code[]">&#x23;</a>
可通过此对象的键值读应应用程序基准目录下的文件。

### process.php.customErrors <a id="process.php.customErrors" href="#process.php.customErrors">&#x23;</a>

```aardio
process.php.customErrors = {  
    [404] = function(response){  
		response.status = "404 Not Found";  
		response.write("404 Not Found"); /*自定义错误页*/  
	}   
}
```

### process.php.enableJsonRpcClient(true) <a id="process.php.enableJsonRpcClient" href="#process.php.enableJsonRpcClient">&#x23;</a>
PHP 自动启用 JsonRpcClient 类。  
必须在调用所有其他 process.php 库函数之前调用才会有效。  

如果 httpHandle["/jsonrpc"] 指定为 JSON RPC 服务端函数表。  
则会自动调用此函数启用 PHP 的 JsonRpcClient 类。

### process.php.httpHandle <a id="process.php.httpHandle" href="#process.php.httpHandle">&#x23;</a>

```aardio
process.php.httpHandle = {
	["/jsonrpc"] = { 
		hello = function(name,value){ 

			/*可在此用一个表自定义 HTTP 服务端处理程序
			键为 HTTP 请求路径，值为处理程序（函数、aardio 代码、表对象）。
			如果处理程序为表对象，则自动转换为 JSON RPC 服务端函数表。 

			JSON RPC 服务端函数第一个返回值为客户端返回值（result），
			第二个可选的返回值为错误对象（error）。
			*/

			if(!name) return null,-32602/*_JSONRPC_INVALID_PARAMS*/; 
			return "hello " + name;
		}
	};
	["/path"] = function(response,request,session){
	} 
}
```

### process.php.iniPath <a id="process.php.iniPath" href="#process.php.iniPath">&#x23;</a>
可选指定php.ini路径,  
不指定则在php-cgi.exe目录下查找

### process.php.notify("/.php") <a id="process.php.notify" href="#process.php.notify">&#x23;</a>
通知指定的 PHP 页面运行，不阻塞当前线程。  
如果参数 @2 为 false ，则发送请求后关闭连接，不获取响应数据。  
否则在开发环境下将响应数据输出到 stderr 错误输出。  
不会自动打开控制台。  

参数指定 PHP 页面路径，不支持内嵌资源路径。  
放 *.php 文件的工程目录「内嵌资源」属性必须为 false。  

用法请参考：范例 > 调用其他语言 > php > CGI 回显

### process.php.startIp <a id="process.php.startIp" href="#process.php.startIp">&#x23;</a>
设置服务器端IP,  
默认为"127.0.0.1"

### process.php.startPort <a id="process.php.startPort" href="#process.php.startPort">&#x23;</a>
设置服务器端口,默认自动分配空闲端口

### process.php.startRpc <a id="process.php.startRpc" href="#process.php.startRpc">&#x23;</a>
启动 PHP 的 process.rpc 兼容服务端。  
返回 process.rpc.jsonClient 对象。

### process.php.startRpc() <a id="process.php.startRpc" href="#process.php.startRpc">&#x23;</a>
[返回对象:processRpcJsonClientObject](#processRpcJsonClientObject)

### process.php.startRpc(code,params) <a id="process.php.startRpc" href="#process.php.startRpc">&#x23;</a>
参数 @code 指定 PHP 代码或 PHP 代码文件。  
返回 params 可用表对象指定模拟 GET 请求参数。  
返回 process.rpc.jsonClient 对象，可用于调用 PHP 函数

### process.php.threadGlobal <a id="process.php.threadGlobal" href="#process.php.threadGlobal">&#x23;</a>

```aardio
process.php.threadGlobal = {
	/*此表内的键值对将复制为所有处理 HTTP 请求的线程环境全局变量  
phpCgiPath,phpIniPath,httpHandle 为保留名称，请勿使用*/
}
```

### process.php.threadNum <a id="process.php.threadNum" href="#process.php.threadNum">&#x23;</a>
设置服务器线程数，默认为2个线程
