导读:本期聚焦于小伙伴创作的《PHP怎么调用腾讯云AI内容安全实现文本图片自动审核合规?》,敬请观看详情。把用户上传的文本和图片先过一遍机器审核,能帮运营拦掉大部分违规内容。腾讯云内容安全提供统一接口,PHP通过签名鉴权后发送请求即可拿到风险标签。文本调用TextModeration接口,图片走ImageModeration,返回结果包含违规类型与建议处理方式。实际接入时要注意密钥放服务端、异步队列削峰、敏感词兜底,避免同步阻塞导致接口超时。本文用原生curl演示签名与请求构造,不依赖第三方包,方便老项目直接嵌入。

在社区、电商或UGC类产品中,用户产生的文字和图片往往混杂着广告、涉政、色情等违规信息。用PHP后端直接对接腾讯云AI内容安全服务,可以在数据落库前完成自动拦截,降低人工复审成本。核心流程是:服务端持有SecretId和SecretKey,按腾讯云签名方法v3构造请求,调用文本或图片审核接口,根据返回的Label和Suggestion决定放行、人工或拦截。

PHP怎么调用腾讯云AI内容安全实现文本图片自动审核合规?

一、准备工作与签名原理

腾讯云开放接口采用TC3-HMAC-SHA256签名算法。开发者不需要自己从头实现加密,但理解流程有助于排查401错误。整体步骤为:拼接规范请求串、构造待签字符串、计算签名、将签名写入Authorization请求头。密钥绝不可出现在前端,只能保留在PHP服务端环境变量或配置文件中。

下面代码展示了从环境变量读取密钥,并准备基础参数的过程。这里用getenv避免密钥硬编码,实际部署时可结合Docker secret或KMS。

<?php
// 从环境变量获取腾讯云密钥
$secretId = getenv('TENCENT_SECRET_ID');
$secretKey = getenv('TENCENT_SECRET_KEY');
if (empty($secretId) || empty($secretKey)) {
    throw new Exception('缺少腾讯云密钥配置');
}

// 服务基础信息
$service = 'cms'; // 内容安全服务名
$host = 'cms.tencentcloudapi.com';
$region = 'ap-guangzhou';
$action = 'TextModeration';
$version = '2020-12-29';
?>

二、PHP调用文本审核接口

文本审核适合处理评论、昵称、私信等内容。接口名为TextModeration,传入Content字段(Base64或原文,依文档而定,此处演示原文UTF-8)。返回结构里,Suggestion为Block表示拦截,Review表示人工,Pass为通过。Label给出具体分类,如Porn、Ads。

以下示例用curl发送POST请求,包含完整的Authorization头构造。为可读性省略了部分错误处理,生产环境应记录完整响应以便追溯。

<?php
function signRequest($secretId, $secretKey, $service, $host, $action, $region, $version, $payload) {
    $date = gmdate('Y-m-d');
    $timestamp = time();
    $algorithm = 'TC3-HMAC-SHA256';

    // 1. 规范请求
    $httpRequestMethod = 'POST';
    $canonicalUri = '/';
    $canonicalQueryString = '';
    $canonicalHeaders = "content-type:application/json; charset=utf-8nhost:{$host}n";
    $signedHeaders = 'content-type;host';
    $hashedPayload = hash('sha256', $payload);
    $canonicalRequest = $httpRequestMethod . "n" . $canonicalUri . "n" . $canonicalQueryString . "n" . $canonicalHeaders . "n" . $signedHeaders . "n" . $hashedPayload;

    // 2. 待签字符串
    $credentialScope = $date . "/" . $service . "/tc3_request";
    $stringToSign = $algorithm . "n" . $timestamp . "n" . $credentialScope . "n" . hash('sha256', $canonicalRequest);

    // 3. 签名
    $secretDate = hash_hmac('sha256', $date, "TC3" . $secretKey, true);
    $secretService = hash_hmac('sha256', $service, $secretDate, true);
    $secretSigning = hash_hmac('sha256', "tc3_request", $secretService, true);
    $signature = hash_hmac('sha256', $stringToSign, $secretSigning);

    // 4. Authorization头
    $authorization = $algorithm . " Credential={$secretId}/{$credentialScope}, SignedHeaders={$signedHeaders}, Signature={$signature}";
    return array(
        'Authorization' => $authorization,
        'X-TC-Timestamp' => $timestamp,
        'X-TC-Version' => $version,
        'X-TC-Action' => $action,
        'X-TC-Region' => $region
    );
}

$payload = json_encode(array('Content' => '测试违规文本广告加微信'));
$headers = signRequest($secretId, $secretKey, $service, $host, $action, $region, $version, $payload);
$headers['Content-Type'] = 'application/json; charset=utf-8';
$headers['Host'] = $host;

$ch = curl_init("https://{$host}/");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headerArr = array();
foreach ($headers as $k => $v) {
    $headerArr[] = $k . ': ' . $v;
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);
$resp = curl_exec($ch);
curl_close($ch);
$result = json_decode($resp, true);
if (isset($result['Response']['Suggestion'])) {
    $suggestion = $result['Response']['Suggestion'];
    // Block拦截 Review人工 Pass通过
    return $suggestion;
}
?>

上述代码直接返回建议值,业务层可据此跳转。需要注意腾讯云对单次文本长度有限制,超长内容应分段或摘要后送审。另外免费额度用尽后会按量计费,需监控账单。

三、PHP调用图片审核接口

图片审核接口为ImageModeration,支持传入图片URL或Base64。对于用户上传到对象存储的文件,直接传FileUrl更省流量。返回内容除Suggestion外,还有Labels数组描述命中标签及分数,方便按阈值灵活处理。

下面示例演示传入URL的调用方式,签名函数复用前文。图片场景常遇防盗链,可先将图转存到内网可达地址再送审。

<?php
$actionImg = 'ImageModeration';
$payloadImg = json_encode(array(
    'FileUrl' => 'https://ipipp.com/demo/upload/test.jpg'
));
$headersImg = signRequest($secretId, $secretKey, $service, $host, $actionImg, $region, $version, $payloadImg);
$headersImg['Content-Type'] = 'application/json; charset=utf-8';
$headersImg['Host'] = $host;

$ch2 = curl_init("https://{$host}/");
curl_setopt($ch2, CURLOPT_POST, true);
curl_setopt($ch2, CURLOPT_POSTFIELDS, $payloadImg);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
$hd = array();
foreach ($headersImg as $k => $v) {
    $hd[] = $k . ': ' . $v;
}
curl_setopt($ch2, CURLOPT_HTTPHEADER, $hd);
$respImg = curl_exec($ch2);
curl_close($ch2);
$dataImg = json_decode($respImg, true);
if (isset($dataImg['Response']['Suggestion'])) {
    $imgSug = $dataImg['Response']['Suggestion'];
    $labels = $dataImg['Response']['Labels'] ?? array();
    // 根据$imgSug与$labels处理
}
?>

图片审核耗时通常高于文本,若放在用户请求链路中会拉长响应。建议将待审图片写入消息队列,由独立消费者调用接口,结果回写数据库,前端轮询状态。

四、生产环境接入建议

第一,密钥与业务分离。用子账号密钥并限制仅cms权限,即使泄露影响面也可控。第二,失败兜底。腾讯云接口偶发超时,此时不应直接放行,而应标记待人工或暂存。第三,敏感词库辅助。机器审核前先过本地词库,能挡掉明显违规并减少云调用次数。

第四,结果缓存。相同图片哈希或文本指纹可缓存审核结论,避免重复付费。第五,日志脱敏。记录审核日志时,原文或图地址可能涉及隐私,需掩码处理。下表列出常见返回建议与对应动作:

接口Suggestion业务动作
文本/图片Pass直接发布
文本/图片Review进人工池
文本/图片Block拒绝并告警

通过以上方式,PHP项目能以较低改造成本拥有自动化内容安全能力,在合规与体验间取得平衡。

PHP腾讯云内容安全文本图片审核修改时间:2026-08-11 16:48:48

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。