• 注册
  • 小小乐

    小小乐

    lv.2实名用户
    鉴定师:国家一级鉴定师。
    聊天
  • 转账

  • Warning: Trying to access array offset on value of type bool in /www/wwwroot/www.acocoa.com/wp-content/module/public/function/acocoa/function/jinsom.php on line 163
  • 拉黑
  • 举报
  • 动态
  • 帖子
  • 淘货
  • 保真阁
  • 私人博物馆
  • 1 关注
  • 1 粉丝
  • 44人气
  • 0魅力
  • 头衔

  • 实名用户
  • 资料简介

  • 社区号:7650891864
  • 昵称: 小小乐
  • 性别: 男生
  • 位置:江西省.宜春市
  • 说明:专注于:古玩收藏和交易!有需要购买藏品的可以关注我哈。
  • 注册时间:3年前
  • 查看更多
  • 查看全文
  • 查看作者
  • 文章测试

    江西·萍乡
  • 4
  • 54
  • 0
  • 13.76w
  • 咸鱼梦想小可鸭鸭小小乐学藏官方

    请登录之后再进行评论

    登录
  • 0
    欣然lv.1
    最低多少钱?最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    测试看看最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    内容测试出
  • 查看全文
  • 查看作者
  • 宫论项目开发记录

    记录2023年项目进度周期。

  • 2
  • 678
  • 0
  • 14.94w
  • 小小乐小可鸭鸭

    请登录之后再进行评论

    登录
  • 0
    小小乐lv.2实名用户
    2025年6月10日
    1、新增了一个名为xc_cos_cdn_ban_hook的方法,该钩子专门用于处理CDN域名的封禁。使用时需要传递一个固定变量(cdn_url,即对应的CDN域名加速地址路径)。在COS对象存储文件被删除的情况下,该钩子会对相关的CDN文件进行封禁,防止用户继续通过各地的分发缓存访问这些文件。如果仅仅删除对象存储文件而不处理CDN文件,会导致在CDN缓存未过期之前,用户仍然能够访问这些内容,这对于涉及违规的图片和视频资源而言,可能带来巨大的潜在风险。因此,通过该钩子实现及时的CDN封禁是非常必要的,以确保违规内容不会继续传播。
    2、在通过内置钩子发起CDN资源封禁请求时,为了确保返回结果能够被上级系统直接接收并处理,xc_cos_cdn_ban_hook无论封禁操作是否成功,都会返回一个标准化的数组结构。其中,code字段用于表示执行状态:固定值1表示执行失败,即封禁未生效。失败的原因可能包括网络异常、接口错误、权限不足、SDK错误、参数异常等多种情况。具体的失败原因需要通过msg字段来获取。如果code为0,则表示执行成功,资源封禁已成功生效,通常情况下,该文件将无法从外网访问。
    3、在xc_cos_cdn_ban_hook的初始化阶段,系统通过调用xc_get_option函数来动态读取后台配置的相关信息,包括【xc_tencent_secret_id、xc_tencent_secret_key、xc_upload_cos_region、xc_upload_cos_bucket、xc_upload_cos_domain】等参数。这些参数分别对应腾讯云账户的ID、请求的密钥、存储桶的地域、存储桶的名称以及CDN加速域名。通过统一封装这些参数,系统确保在处理与COS相关的任务时能够灵活地适应任何配置的变化,避免因参数硬编码而导致的业务异常。这种设计不仅提高了系统的灵活性和稳定性,还确保了在配置变更时能迅速响应并调整,维护业务的连续性和可靠性。
    4、在完成初始化参数的封装之后,系统会开始构建API接口请求,其中包含了封禁资源所需的所有参数。为了确保数据的完整性和安全性,我们使用base64_encode和hash_hmac对参数进行签名处理。接着,通过API接口发起GET请求,将签名和需要封禁的CDN域名以GET参数的形式传递给腾讯云接口,进而请求对指定资源进行实时封禁。收到响应后,我们会对返回的结果进行判断处理:如果响应结果中包含【Response】,则表示封禁操作成功,此时返回code=0;如果响应结果中未包含【Response】,则说明处理失败,返回code=1。
    5、在xc_cos_cdn_ban_hook发起借款请求时,使用curl库来处理请求。具体的参数配置如下:通过curl_setopt函数将请求的接口设置为cos_cdn,采用GET方式传递参数,并且设置请求的响应时间为5秒,以避免长时间等待导致进程阻塞。如果请求时间超过5秒,系统将自动断开连接。请求的结果会被存储到变量response中,然后通过curl_errno函数检查是否发生错误异常。如果检测到错误,程序将立即终止并返回相应的错误信息;如果没有异常,则返回处理后的结果。最后,通过curl_close函数关闭此次curl请求,确保资源的有效释放。
    6、在封禁CDN资源时,为确保接口能够正常响应并避免由于错误导致无法识别的问题,采用了try-catch机制来捕获可能出现的异常。在所有请求的执行过程中,首先通过try块进行响应处理。如果在请求过程中发生错误,例如网络超时、接口异常或参数错误等情况,catch块将捕获这些异常,并输出详细的错误信息(异常错误: ' . $e->getMessage())。这种处理方式不仅可以有效地识别和记录错误,还能及时终止后续的处理流程,并返回一个状态码code=1,确保系统的稳定性和可维护性。
    7、通过内置方法发起封禁CDN资源的时候,如果发生异常错误将会触发日志写入功能,日志的标识为:cos_cdn_ban_error,日志的格式为:[时间:' . date("Y-m-d H:i:s") . '] - [封禁资源:' . $cdn_url . '] - [错误:' . $e->getMessage() . ']。日志将通过xc_log_error_warn方法进行写入,旨在详细记录执行失败的原因。这一过程仅涉及日志记录,不会触发报警机制,旨在为后续问题排查提供详尽的信息支持。
    8、在处理CDN资源封禁请求后,通常需要等待一段时间才能实现全网生效。然而,在某些情况下,可能需要即时生效,这时可以通过API接口发起一个刷新请求,将资源的封禁状态立即同步至所有节点服务器。考虑到许多场景都需要使用这一刷新动作(如封禁资源、删除资源、解封资源等),我们已将其封装成一个hook钩子,以便在需要时直接调用。这个钩子被命名为xc_cos_cdn_refresh_hook,使用时需要传递一个固定变量【cdn_url】,即需要刷新的CDN请求地址。通过这种机制,我们能够确保资源状态在全网快速同步,提高响应效率和操作便捷性。
    9、在处理xc_cos_cdn_refresh_hook的流程中,与封禁方法有着相似的步骤,区别仅在于所请求的接口不同。首先,需要初始化腾讯云的参数和秘钥,确保在后续步骤中能够正确进行身份验证。接下来,利用账户参数进行签名处理,这一步是为了保证请求的安全性和有效性。随后,通过构建加密签名来确保请求的完整性和不可篡改性。完成这些准备工作后,发起curl请求以触发CDN的即时刷新操作,目的在于清空指定资源的缓存,以便全网节点能够实时响应和处理最新的数据。处理结果的反馈是通过标准数组结构返回,其中code=0表示刷新成功,而code=1则意味着刷新失败。这种结果反馈机制使得我们能够快速判断操作的成功与否,并采取相应的后续措施。
    10、xc_cos_cdn_refresh_hook发生错误异常,同样至此try-catch来处理。并且会将对应的错误通过xc_log_error_warn写入到日志文件【cos_cdn_refresh_error】中,对应的日志格式为:[时间:' . date("Y-m-d H:i:s") . '] - [刷新资源:' . $cdn_url . '] - [错误:' . $e->getMessage() . '],该日志同样不会触发报警,只是记录错误,方便后续的问题追踪处理。运维可以通过定期检查日志,来确保接口的正常运作。
    11、当通过 xc_cos_cdn_ban_hook 发起资源封禁请求时,如果接口响应指示处理成功,在返回数组结构之前,会通过 xc_cos_cdn_refresh_hook 刷新当前资源的CDN节点缓存。这一过程确保资源在封禁后立即无法访问。同时需注意,在调用CDN封禁方法时,必须验证当前环境是否处于异步状态。如果环境不是异步的,则需要强制使用Swoole进行处理,因为涉及到第三方接口的调用,若采用同步执行方式,将会严重阻塞当前进程,从而影响用户体验。因此,确保异步处理不仅提高了效率,还能保证系统在高负载情况下的稳定性。
  • 0
    小小乐lv.2实名用户
    2025年6月9日
    1、xc_upload_hook_success文件上传成功回调钩子会在文件成功同步后触发,随后通过xc_upload_video_config读取对应的上传场景配置。若检测到当前场景的【$config['delete'】选项已开启,则表明该场景要求对本地文件进行删除处理。此时,系统将调用xc_delete_local_file_hook执行删除操作,以清理本地服务器上的文件。需要注意的是,在通常情况下,若未采用云服务器机制,不建议开启本地文件删除功能,以避免潜在的数据丢失或无法恢复的问题。
    2、新增 xc_delete_cos_file_hook 钩子,用于处理对象存储桶文件删除的相关任务。该钩子将严格按照宫论 HOOK 的标准要求进行设计与实现,涵盖拦截、业务逻辑执行以及回调操作等完整流程,确保其功能稳定且具备高度的可扩展性。在设计过程中,特别注重向上兼容性,确保后续的系统更新能够在无需修改源代码的前提下正常支持该钩子。此外,该钩子不仅负责本地文件删除的处理,还需要支持远程文件删除操作,从而使系统在清理过期文件时能够正确响应并发起删除任务,有效提升文件清理的全面性和效率。
    3、xc_delete_cos_file_hook采用标准的数组结构进行返回设计,以确保后续执行流程能够直接接收并处理响应结果,同时将结果返回至上一级调用。返回的数组包含两个必要参数:第一个参数是code,用于标识处理结果状态。如果code为0,则表示当前操作已成功删除指定的COS对象存储桶文件;如果code为1,则表明删除任务失败。失败的原因可能涉及多种情况,例如权限不足、文件不存在、SDK错误或网络异常等问题。具体的错误原因会通过第二个参数msg进行详细说明,便于开发人员快速定位问题并进行针对性处理。
    4、在通过HOOK发起COS文件删除任务时,系统会首先进入初始化状态,具体处理流程如下:首先,利用require_once加载xc_sdk_composer,以确保当前运行环境能够成功引入相关的Composer包,从而加载对应的SDK文件,确保功能正常调用。随后,系统会读取后台配置参数,包括xc_tencent_secret_id、xc_tencent_secret_key、xc_upload_cos_region、xc_upload_cos_bucket以及xc_upload_cos_domain等关键信息。这些参数分别对应腾讯云账户的密钥信息、对象存储桶的地域配置、自定义域名等重要内容,旨在全面获取对象存储服务所需的环境配置。接下来,这些参数会被封装处理,以构建符合需求的COS任务请求,从而为后续的文件删除操作提供完整、可靠的基础支持。
    5、完成COS参数的初始化处理后,通过调用new Qcloud\Cos\Client构建cosClient对象,该对象需要依赖之前封装的参数来实现COS删除操作所需的签名鉴权。如果cosClient对象生成失败,系统将直接返回code=1,并附带详细的错误信息,提示用户操作权限不足或配置异常;若生成cosClient对象成功,则后续将通过该对象发起deleteObject请求,完成指定文件的删除操作。需要注意的是,COS对象存储的相关参数均统一调用后台配置,禁止直接硬编码,以确保系统的灵活性与安全性。
    6、一旦成功构建cosClient对象,接下来会通过deleteObject方法发起删除指令。该方法所需的参数包括两个:其一是bucket,即对象存储桶的标识符,这通常由上级逻辑继承而来;其二是Key,即需要删除的文件路径地址。为确保删除操作的准确性,Key参数在被传递时会经过str_replace处理,主要是移除xc_upload_cos_domain对象存储CDN自定义域名的部分,以避免因路径错误导致删除失败。删除请求发出后,系统会将处理结果赋值给result变量,用于后续逻辑判断和操作。
    7、通过 xc_delete_cos_file_hook 方法发起 COS 对象文件删除请求。由于该操作涉及远程请求处理、SDK 签名生成等复杂流程,为了保证返回结果的合理性与稳定性,方法内部采用了 try-catch 异常捕获机制,对潜在的错误进行监听与处理。这样可以有效避免因不可控错误导致的异常返回情况,从而确保执行过程的安全性和可靠性。需要特别注意的是,无论执行是否成功,整个过程必须返回标准的数组格式。如果在 catch 中捕获到错误,则会返回一个包含错误信息的数组,其中 code 的值为 1,msg 为捕获到的异常信息 $e->getMessage(),以便后续能够快速定位问题并作出处理。
    8、在执行 COS 文件删除的过程中,当 try-catch 捕获到删除失败的异常时,系统不仅会终止当前的删除操作,还会将失败的具体原因记录下来,方便后续追踪和处理。错误信息将通过 xc_log_error_warn 方法写入日志,日志内容包括时间、文件地址及错误详情,格式如下:[时间:' . date("Y-m-d H:i:s") . '] - [地址:' . $file . '] - [错误:' . $e->getMessage() . ']。写入的日志文件标识为 cos_delete_error。需要注意的是,该日志仅用于记录异常信息,并不会触发报警机制,因此后续处理需要依赖日志内容进行人工或自动化分析。
    9、cos删除请求发起后,会将结果赋值到result,并对result['Location']字段进行验证。如果该字段不为空,则表示删除操作已成功,此时系统会返回code=0,并附加一个link字段,link字段表示被删除文件的具体地址;如果$result['Location']为空,则认为删除失败,此时系统将返回code=1,并附带msg提示“COS文件删除失败”。需要注意的是,验证过程是通过empty函数来判断Location字段是否为空,即使删除过程中发生错误,也不会触发日志写入动作,后续处理仍会按照既定逻辑继续执行。
    10、由于文件删除涉及的场景较为复杂且多样化,包括本地删除请求(local)、腾讯云对象存储删除(cos)、远程FTP文件删除(ftp)以及远程SFTP协议文件删除(sftp)。在这些删除场景中,每次完成文件删除操作后,都需要执行相应的回调操作。为此,新增了一个钩子函数:xc_delete_success_hook。该钩子在触发时需传递两个变量:type 和 file。其中,type 用于标识删除的具体场景,帮助确定删除的来源;file 则表示文件的具体地址,可能是文件的 key 值,也可能是完整的 URL 地址。这一设计旨在更好地支持多场景下的删除操作,同时确保后续回调逻辑的灵活性与统一性。
    11、xc_delete_cos_file_hook完成封装处理,使用 require_once 加载 xc_sdk_composer,确保运行环境能够成功引入腾讯云 SDK 的相关文件。读取后台配置参数,将这些参数封装为一个配置集合,为后续的 COS 删除操作提供支持。用 new Qcloud\Cos\Client 构建 cosClient 对象。使用 cosClient 对象调用 deleteObject 方法发起删除指令。验证 result['Location'] 字段:如果字段不为空,表示删除成功:如果字段为空,表示删除失败。使用 try-catch 机制对删除操作进行监听:如果捕获到异常,返回 code=1 和 msg,其中 msg 包含捕获到的异常信息 $e->getMessage()。过 xc_log_error_warn 方法将错误信息写入日志文件 cos_delete_error:日志内容包括时间、文件地址及错误详情。删除操作完成后,触发 xc_delete_success_hook 钩子函数。注:完整地处理了 COS 对象文件的删除任务,同时保证了异常捕获、日志记录以及回调操作的执行。
  • 0
    小小乐lv.2实名用户
    2025年6月6日
    1、xc_upload_hook_success功能新增了一个验证参数保护机制:系统在处理文件上传场景时,会通过xc_upload_video_config方法读取当前的上传场景配置,并将其存储到变量config中。如果config存在且为数组类型,系统将进一步检查场景配置中是否启用了本地临时文件删除功能(即$config['delete']参数)。若该功能被开启,系统将执行额外的逻辑操作,通过内置方法发起文件删除请求,确保本地临时文件被及时清理同步删除,从而提升资源管理效率,同时避免临时文件堆积可能带来的存储压力或安全风险。这一改进优化了上传流程的安全性与稳定性,为后续文件管理提供了更可靠的保障。
    2、新增一个HOOK钩子:xc_delete_file_hook,用于处理本地服务器上的文件删除操作。该钩子要求传递一个固定变量file,该变量代表需要删除的文件的绝对路径地址。为了确保删除操作的安全性和可靠性,钩子在执行过程中会进行严格的安全校验,防止误操作或恶意请求。值得注意的是,后续凡是涉及本地服务器文件的清理工作(如日志管理机制中的文件清理),均需通过此HOOK发起并执行,以实现统一管理和规范化操作。
    3、xc_delete_file_hook本地文件删除钩子在操作完成后,会统一返回标准化的数组结构,以便上层逻辑能够直接接收并处理结果。返回内容包含两个固定字段:【code】表示处理状态结果,值为0时表明文件删除成功;值为1则表示删除失败,失败原因可能包括文件不存在、权限不足等多种情况。【msg】用于承载失败时的具体原因信息,方便后续排查问题。如果删除失败,开发者可以通过该字段详细了解失败的具体原因并进行针对性处理,从而提升系统的稳定性与可靠性。
    4、在使用 xc_delete_file_hook 删除文件的过程中,首先会对传入的 file 变量进行检查。如果该变量为空,或者通过 file_exists 函数确认文件不存在,则会立即返回相应的错误信息,并终止后续操作。若文件确实存在,则系统会调用 unlink 方法发起删除请求,并根据删除结果进行处理。若删除成功,将返回 code=0 和 msg=文件删除成功的提示;若删除失败,则返回 code=1 和 msg=文件删除失败的错误信息。整个过程逻辑清晰,能够有效避免因参数异常或文件不存在引发的操作错误,同时对删除操作的结果给予明确反馈。
    5、file变量的功能经过优化升级,现在不仅支持本地文件路径作为参数传递,还新增了通过xc_upload数据表中的ID主键进行传参的能力。这一改进非常重要,因为在实际操作中,文件的删除请求往往是通过媒体库进行查找和管理的,因此支持ID主键方式删除本地文件显得尤为必要。具体处理流程如下:首先,系统会通过is_numeric函数验证传入的file参数是否为数字类型。如果验证通过,表示参数为ID主键,此时将通过xc_query_upload函数从数据库中提取对应的文件信息;若提取失败,则直接返回相应的错误提示信息。若提取成功,则从提取结果中获取$upload['local']字段的值,并将其保存到local_file变量中,用于后续处理。这一优化显著提升了文件操作的灵活性和便捷性,为系统的文件管理提供了更高效的解决方案。
    6、在部分删除场景中,删除请求可能直接通过图片或视频文件的外网URL地址发起。因此,需要将远程文件地址转换为本地绝对路径以便进一步处理。这一过程依赖于方法 xc_is_upload 的解析功能。该方法会解析当前提供的 URL 参数,并判断文件是否存在于数据库表中:若存在,则返回与该文件相关的记录数组,包括缓存信息;若不存在,则返回 false。如果成功匹配到相应的数组结构参数,则直接提取数组中的 upload['local'] 字段值,以获取文件的本地绝对路径,从而完成删除请求的后续操作。
    7、xc_delete_file_hook目前已支持三种文件删除处理。分别为:直接传递本地绝对路径,发起删除请求。传递媒体库的ID主键,通过统一查询,获取到本地文件路径,发起删除。检测文件是否包含域名,如果包含域名信息,则通过xc_is_upload进行解析处理,如果匹配成功则返回 upload['local']并发起对应的删除请求。如果上述三点都匹配失败,则返回对应错误。注:无论哪种处理,都需要最终将文件转为服务器绝对路径,并通过unlink发起删除。
    8、为了提升文件删除操作的安全性和可靠性,xc_delete_file_hook现已通过try-catch机制对unlink($file)可能产生的异常进行处理,确保错误能够被准确捕获和妥善处理。具体执行流程如下:首先,在删除文件之前会检查目标文件是否存在。如果文件不存在,则立即抛出异常以提示问题。若文件存在但删除操作失败(如因权限不足等原因),同样会抛出异常。所有捕获到的异常均会输出详细的错误信息,同时触发后续的错误处理逻辑。需要注意的是,无论错误类型如何,所有异常均统一返回code=1,以便后续处理能够保持一致性。
    9、通过xc_delete_file_hook成功执行本地文件删除后,会将该删除操作详细记录到日志中,以确保操作具有可追溯性和审计功能。日志内容包括删除时间、被删除文件的路径以及执行删除操作的用户信息,格式如下:[删除时间 - ' . date("Y-m-d H:i:s") . '] [删除文件 - ' . $local_file . '] [删除人 - ' . xc_is_login() . ']。日志的写入是通过xc_log_error_warn完成的,并为该类日志设置了唯一标识:delete_local_file。需要注意的是,此类日志仅用于记录删除动作,不会触发任何报警机制,旨在为后续的操作追踪和问题排查提供可靠的数据支持。
    10、本地文件删除成功后,将触发一个名为【delete_local_file】的Redis计数器进行统计处理,统计操作通过xc_redis_count完成,用于记录本地文件删除的数量。后续可以通过get_redis_count($key)方法获取详细的统计数据。该功能支持多维度查询统计,包括总数、今日、昨日、本周、上周、本月、上月、今年及去年等时间维度,能够全面呈现不同时间段内本地文件的删除情况,为后续分析和管理提供了便捷的数据支持。
    11、xc_delete_local_file_hook完成封装处理,这是一个用于删除本地文件的钩子函数,功能全面且灵活。它支持通过文件ID、完整URL地址或本地文件路径进行文件删除操作,适应不同场景需求。删除过程中,如果文件不存在或操作失败,系统会返回详细的错误信息,帮助快速定位问题;若删除成功,则会自动记录操作日志,同时更新Redis中的删除计数,确保数据的实时性和准确性。该函数的核心参数$file可接受文件ID、完整URL地址或本地文件路径作为标识,进一步提升了操作的便捷性和适配性。最终返回的删除结果为一个数组,包含状态码和相关消息,清晰地传递操作结果,便于后续处理和数据追踪。

  • 查看全文
  • 查看作者
  • 宋人有耕者。田中有株。兔走触株,折颈而死。因释其耒而守株,冀复得兔。兔不可复得,而身为宋国笑。

    江西·宜春
  • 2
  • 25
  • 0
  • 1.06w
  • 学藏官方小小乐

    请登录之后再进行评论

    登录
  • 0
    学藏官方lv.2实名用户
    消息调整不
  • 0
    学藏官方lv.2实名用户
    消息调整测试
  • 0
    学藏官方lv.2实名用户
    很棒,很可以。很优秀!