调用过程
模板加载:
默认地,ModPHP 会通过模板入口文件(站点根目录下的 index.php)来调用模板目录中对应的文件。
但只有当访问的路径不是一个真实的文件或目录时,ModPHP 才会这么做。
例如 http://localhost/something
, ModPHP 的访问顺序是这样的:
- 尝试仿问站点根目录下的 something 文件或文件夹;
- 尝试访问模板目录下的 something 文件夹,如果存在这个文件夹,则尝试访问目录下的索引文件,不存在则报告 403 错误;
- 尝试访问模板目录下的 something 文件;
- 尝试访问模板目录下的 something.php、something.html 等文件,后缀列表由 Template 引擎设置;
- 尝试匹配伪静态规则;
- 尝试匹配模块记录的自定义链接;
- 没有查询到模板,报告 404 错误。
URL 请求:
可以通过 URL 携带参数访问 mod.php 程序文件直接提交请求和获取数据,通常在 AJAX 中使用。
需要至少提供两个参数,{obj} 和 {act},用来调用相应的对象(类)和操作(方法),其他的参数将作为方法的参数。
ModPHP 会自动收集向后台提交的数据,执行请求的操作并将结果(JSON)返回给客户端。
默认支持四种提交请求的 URL 形式,以获取 user_id = 1 的用户为例:
- mod.php?obj=user&act=get&user_id=1[&更多参数]
- mod.php?user::get|user_id:1[|更多参数]
- mod.php?user::get|user_id=1[|更多参数]
- mod.php/user/get/user_id/1[/更多参数]
关于 jQuery 的小提示:
ModPHP 会在 URL 请求操作时设置请求头 Content-Type: application/json,jQuery 会根据该请求头自动解析返回到客户端的 JSON 数据。因此你不必自己进行解析,直接使用即可。
关于跨域请求:
如果你需要进行跨域请求,请通过判断 URL 地址等方式来决定仅对有限的链接开放跨域权限。使用发送请求头 Access-Control-Allow-Origin: * 的方式开放跨域权限,而不是选用 jsonp 这些鸡肋的方式。
Socket 请求:
Socket 请求的方式和 URL 请求类似,不同的只是无需访问 mod.php 文件,并且使用 JSON 传输数据。
同样需要两个参数,{obj} 和 {act},用来调用相应的对象(类)和操作(方法),其他的参数将作为方法的参数。
在处理流程和返回数据上,则和 URL 请求完全一致。
上述请求用户的例子,如使用 WebSocket,也可以这么做:
- WebSocket.send(JSON.stringify({obj: 'user', act: 'get', user_id: 1}));
或者又例如在 Python 中:
- socket.sendall(b'{"obj":"user", "act":"get", "user_id":"1"}') 更详细的说明请查看《启用 Socket 服务器》。
外部调用:
外部程序要调用 ModPHP, 只需要引入 ModPHP 程序入口文件。比如下面这个例子:
<?php
require('mod.php'); //载入程序入口文件
echo curl('http://ip.cn'); //CURL 请求,将输出服务器的当前 IP 地址及简单信息
在命令行中使用:
请查看《在命令行中运行 ModPHP》。