• 注册
  • 小小乐

    小小乐

    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.8w
  • 咸鱼梦想小可鸭鸭小小乐学藏官方

    请登录之后再进行评论

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

    记录2023年项目进度周期。

  • 2
  • 681
  • 0
  • 14.98w
  • 小小乐小可鸭鸭

    请登录之后再进行评论

    登录
  • 0
    小小乐lv.2实名用户
    2025年6月13日
    1、通过xc_delete_ftp_file_hook发起远程服务器的文件清理,现支持通过ID主键方式传参处理remote_file变量,而不是支持直接传递路径地址。系统内部将进行参数验证处理,使用is_numeric函数检查变量是否为数字或数字字符串。如果验证通过,则利用统一查询方法xc_query_upload进行查询处理。若查询结果为空,则返回错误信息:“删除失败:统一查询获取记录失败”。查询成功后,将读取【$upload['local']】并以此参数进行赋值处理,从而确保文件清理操作的准确性和安全性。
    2、在规范化处理方面,针对xc_delete_local_file_hook(本地文件删除请求钩子)和xc_delete_cos_file_hook(COS存储桶文件删除请求钩子)进行了适配兼容处理。删除变量remote_file现支持通过ID主键进行查询,并允许使用is_numeric函数判断其是否为数字或数字字符。如果判断结果为数字,则通过xc_query_upload函数进行查询处理。若查询成功,则将返回的$upload['local']作为删除对象,执行删除操作;若查询失败,则返回相应的错误信息。通过这种方式,进一步提升了删除请求的准确性和处理效率。
    3、新增SFTP远程服务器文件删除钩子:xc_delete_sftp_file_hook,负责将远程SFTP服务器的文件删除处理,该方法需要传递两个固定变量。首先是key,该变量用于匹配配置的键,与后台账户配置信息相关。通过key可以读取xc_appkey_ftp_config配置,并从中提取对应的SFTP账户信息。其次是remote_file,这个变量代表远程文件的路径,即需要删除的文件的具体地址。特别需要注意的是,由于上传接口的多样性,我们支持多个平台的上传操作,因此在删除文件时也必须支持多种渠道,以确保文件的一致性和完整性。在执行删除操作时,可以对对应服务器上的文件进行彻底清理,以维护系统的整洁和数据的准确性。
    4、在执行xc_delete_sftp_file_hook之前,会初始化一个空数组$result。这个钩子在处理SFTP远程服务器的文件删除请求时,采用标准化的数组结构进行返回,以确保接口的一致性和可用性。返回结果中必定包含两个关键字段:code和msg。code字段用于指示删除操作的状态,其中0表示文件删除成功,文件已从远程服务器上彻底移除。而1则表示删除操作失败。导致删除失败的原因可能多种多样,包括权限不足、SDK异常、接口错误、参数错误、网络故障等。具体的错误原因可以通过msg字段来获取,从而为上层应用提供明确的错误信息和处理指引。
    5、在通过钩子触发SFTP服务器上的文件删除操作之前,系统会使用require_once命令加载【xc_sdk_composer】项目包。这一步骤的目的是确保当前执行环境能够顺利加载phpseclib3库,以便后续的SFTP请求处理能够顺利进行。如果在加载过程中出现异常,系统将返回相应的错误信息并终止整个执行流程,以确保不会进行任何不安全的操作。一旦加载成功,系统会执行phpseclib方法的初始设置,以保证接下来的处理步骤能够获得有效的支持,从而顺利完成文件删除任务。
    6、在成功加载xc_sdk_composer之后,SFTP删除钩子会立即调用xc_appkey_ftp_config以读取后台远程服务器的账户配置信息。系统通过KEY进行配置匹配以获取相应账户的信息。如果匹配失败,系统将返回错误信息:“删除失败:配置不存在”。匹配成功后,系统会进一步验证config['open']的状态是否为启用。如果返回false,系统会提示“删除失败:应用场景已被管理员关闭”。在启用状态下,系统还会检查config['type']是否为sftp协议。如果类型不为sftp,系统将返回错误信息:“删除失败:协议不支持sFTP”。
    7、一旦通过xc_is_config读取到对应的配置信息后,会将其复制到$config,如果检测通过的话。则会立即通过new phpseclib3\Net\SFTP($config['ip'], $config['port']);发起远程SFTP服务器的链接请求,其中$config['ip']是远程服务器的IP地址,$config['port']是对应的端口号信息,这两个参数都是后台继续配置处理,这里直接读取即可。并将连接结果保存到sftp对象,随后会进行检查,如果链接失败则终止处理,并返回对应的错误信息。
    8、在成功获取到 SFTP 对象后,意味着服务器请求是正常的。此时,将通过 $sftp->login(config['user'], config['pass']) 发起登录请求,其中 config['user'] 是 SFTP 的登录账户,config['pass'] 是 SFTP 服务器的登录密码。如果登录失败(即账户密码鉴权失败),系统将返回错误信息:“删除失败:无法通过凭据连接到 SFTP 服务器”。需要注意的是,SFTP 服务器的登录过程是通过 SSH 账户和密码进行的,因此必须对账户进行严格的安全评估。通常,这类服务器仅用于存储文件,建议不要将业务逻辑放置其中,以防止信息泄露带来安全隐患。
    9、xc_delete_sftp_file_hook通过账户密码凭证成功登录到SFTP服务器后,则会立即使用$sftp->delete($remote_file)向服务器发起文件删除请求。此请求会进行严格的验证处理,以确保文件的确被从服务器移除。如果文件删除操作成功,系统将返回一个响应,其中包含code=0以及msg=删除成功:文件已从服务器移除的消息,确认文件已成功删除。如果文件删除操作未能成功,则系统返回code=1,并附带msg=删除失败:无法删除文件的消息,提示用户删除操作未能完成。
    10、为了确保返回结果的一致性,并避免在执行或加载过程中出现SDK或phpseclib3无法响应的异常错误,xc_delete_sftp_file_hook采用了try和catch结构来处理错误。在执行过程中,所有错误,包括自定义错误和内部错误,都会通过throw new Exception抛出到catch块中进行处理。在catch块中,系统会统一返回code=1,并通过e->getMessage()来传递具体的错误信息,从而确保错误信息的准确传递和问题的快速定位。
    11、在成功通过 xc_delete_sftp_file_hook 发起远程文件删除操作后,为了保证操作的可追溯性,将删除记录以日志的形式记录下来。这样一来,若日后出现误删等问题,可以通过日志进行详细的追查和溯源。日志记录使用宫论的通用方法 xc_log_error_warn 来处理,确保其格式和一致性。每条日志的唯一标识符为 delete_sftp_file,记录的格式为:[时间:' . date("Y-m-d H:i:s") . '] - [删除文件:' . $remote_file . '] - [删除人:' . xinle_is_login() . ']。值得注意的是,此类日志的写入仅用于记录,并不会触发任何报警机制,仅仅是单纯的保存删除操作的记录,以备不时之需。
  • 0
    小小乐lv.2实名用户
    2025年6月12日
    1、在使用xc_delete_cos_file_hook删除COS对象存储中的文件时,系统会自动触发【xc_delete_local_file_hook】,从而同步删除本地文件。这一机制确保了文件的一致性管理,避免出现远程服务器上的文件被成功清理后,本地文件却未同步删除的情况。通过这种操作,可以有效防止由于本地文件未及时清理而导致的数据冗余或存储空间浪费。通常情况下,一旦远程文件不再需要保留,相应的本地文件也应该被及时处理,以确保整个系统的文件管理更加高效和规范。
    2、为了更好地维护上传相关的钩子代码,我在宫论项目库中新增了一个名为upload.php的脚本,该脚本位于:function/upload.php。通过将所有的上传行为(包括但不限于附属脚本,如删除脚本、回调脚本、日志脚本、同步脚本等)整合到一起进行处理,我们可以大大简化管理和维护的复杂度。这样一来,所有与上传相关的操作都可以直接在upload.php中进行查找,避免了过去需要在hook.php和function.php中翻找的繁琐过程。随着项目的进一步扩展,这种集成方式将有效防止代码变得过于庞杂,确保系统的可维护性和清晰度。
    3、新增了一个名为xc_delete_ftp_file_hook的钩子,专门用于处理远程FTP服务器上的文件删除操作。此方法需要接收两个固定的变量:首先是key,该变量用于匹配配置的键,与后台账户配置信息相关。通过key可以读取xc_appkey_ftp_config配置,并从中提取对应的FTP账户信息。其次是remote_file,这个变量代表远程文件的路径,即需要删除的文件的具体地址。特别需要注意的是,由于上传接口的多样性,我们支持多个平台的上传操作,因此在删除文件时也必须支持多种渠道,以确保文件的一致性和完整性。在执行删除操作时,可以对对应服务器上的文件进行彻底清理,以维护系统的整洁和数据的准确性。
    4、为了确保业务流程的统一性,在发起FTP文件删除请求时采用了xc_delete_ftp_file_hook方法,该方法的返回结果遵循标准的数组结构。这一结构中包含两个固定值:code和msg。其中,code用于指示处理状态,当返回值为1时,表示删除操作未能成功。失败的原因可能多种多样,例如文件不存在、缺乏删除权限、FTP连接失败或请求异常等。具体的错误信息可以通过第二个变量msg来获取。如果删除操作成功,则返回的code值为0。采用这种标准化的数组结构返回结果的目的是为了确保上级在接收到结果时能够直接进行处理,而无需额外的解析步骤,从而提高处理效率和准确性。
    5、在执行xc_delete_ftp_file_hook的整个流程中,首先需要通过xc_get_option函数来读取后台FTP账户的配置信息【xc_appkey_ftp_config】。如果读取失败,系统会立即返回相应的错误提示;若读取成功,接下来将通过xc_is_config进行匹配,以确保传递的key能够获取到对应的账户信息。如果传递的key无法获取到相应的配置,则会返回“上传失败:配置不存在”的错误提示。在确认配置存在之后,系统还会进行两个额外的检查。首先,检测open是否启用,如果该功能被关闭,则会返回“上传失败:应用场景已被管理员关闭”的提示。其次,系统会检查上传协议是否为FTP,因为FTP和SFTP的配置是共享的,因此需要进行识别处理以确保协议正确无误。通过这些步骤,确保文件删除操作的安全性和准确性。
    6、如果成功取得config配置信息后,系统会通过ftp_connect来链接服务器,请求过程中会读取到【$config['ip']服务器地址IP, $config['port']对应的端口号信息】并将请求结果赋值到conn_id,随后会对conn_id进行验证处理,如果验证失败则说明请求失败,此时系统会返回错误:删除失败:无法连接到FTP服务器。。如果连接成功,则会通过ftp_login发起登录请求,登录会用到以下参数:$conn_id服务器对象信息, $config['user']登录的账户, $config['pass']登录的密码,并将登录结果保存到login_result。
    7、通过xc_delete_ftp_file_hook发起FTP文件删除请求的的时候,如果login_result获取失败,则会触发错误删除失败:无法通过凭据连接到FTP服务器。同时会通过ftp_close($conn_id);关闭本次链接请求,防止内存泄露。如果登录成功的话,则会立即执行【ftp_pasv($conn_id, true);】将当前模式切换到被动模式,这是一个兼容保护,很多FTP服务器仅支持被动模式,如果不及时切换可能会导致意外断开。造成后续的事件处理异常。
    8、login_result如果返回链接成功后,系统会立即执行ftp_delete方法来删除文件,删除过程中需要用到【$conn_id服务器链接登录对象, $remote_file:需要删除的文件地址】。若删除操作失败,系统会返回错误信息:“删除失败:无法删除文件”;而如果删除成功,系统则会返回code=0,并附带消息:“删除成功:文件已从服务器移除”。无论文件删除操作是否成功,系统都会执行ftp_close($conn_id)以关闭FTP连接,确保资源的正确释放。
    9、在通过xc_delete_ftp_file_hook发起FTP文件删除请求时,为了确保服务器返回的响应能够被准确识别,该钩子机制采用了try-catch结构来处理和监听异常错误。在执行过程中,如果出现任何错误,系统会统一通过throw new Exception来抛出异常,所有的错误信息则通过catch块来捕获并进行响应处理。这样设计的目的是确保无论发生何种错误,系统始终能够返回一个统一的错误提示结构,即code=1和msg=$e->getMessage()。这种结构不仅便于错误信息的统一管理和处理,也使得在判断文件是否成功删除时,只需简单地通过code进行判断即可,从而提高了系统的稳定性和可维护性。
    10、FTP文件一旦删除成功,会触发日志写入功能,记录本次文件删除的记录。日志标识为:delete_ftp_file,通过xc_log_error_warn进行写入操作。日志的格式为:[时间:' . date("Y-m-d H:i:s") . '] - [删除文件:' . $remote_file . '] - [删除人:' . xinle_is_login() . ']。该日志不会触发报警机制,只会写入删除记录,方便运维人员查看处理。注:删除人可能为空,因为删除计划可能是通过定时计划执行。
    11、xc_delete_ftp_file_hook完成封装处理,整个执行流程如下。1、函数开始时,初始化一个结果数组 $result,默认状态为失败,并设置默认的失败信息。2、调用 xc_get_option('xc_appkey_ftp_config') 来获取 FTP 配置。遍历配置数组以寻找匹配的配置项,其中键值与传入的 $key 相匹配。如果没有找到匹配的配置,抛出异常并返回错误信息。3、检查配置是否已启用(open 字段)检查配置的类型是否为 ftp。如果这些条件不满足,抛出相应的异常并返回错误信息。4、使用 ftp_connect() 函数尝试连接到指定的 FTP 服务器。如果连接失败,抛出异常并返回错误信息。5、使用 ftp_login() 函数进行登录。如果登录失败,关闭 FTP 连接并抛出异常返回错误信息。6、使用 ftp_pasv($conn_id, true) 切换到被动模式,以处理某些网络环境下的连接问题。7、使用 ftp_delete($conn_id, $remote_file) 尝试删除指定的远程文件。如果删除失败,关闭 FTP 连接并抛出异常返回错误信息。8、成功删除文件后,关闭 FTP 连接。9、如果文件删除成功,更新结果数组的状态为成功。创建日志字符串,包括删除时间、文件名和执行操作的用户。调用 xc_log_error_warn('delete_ftp_file', $log) 记录日志。10、在 catch 块中捕获异常,并将异常消息存储在 $result['msg'] 中。
  • 1
    小小乐lv.2实名用户
    2025年6月11日
    1、对xc_cos_cdn_refresh_hook进行了优化处理。首先,通过curl发起请求并将返回结果存储在response变量中。接着,使用json_decode函数将返回的内容转换为数组结构。随后,通过isset函数检测$json['Response']['RequestId']是否存在。如果该变量存在,则表示缓存刷新成功;如果不存在,则意味着刷新失败,此时直接返回code=1,并提供错误提示内容:“CDN缓存清除失败: 未知错误”。
    2、新增了一个名为xc_cos_cdn_thaw_hook的钩子,专门用于解封那些已经被封禁的CDN文件。之前,一旦对象存储文件通过xc_cos_cdn_ban_hook进行了封禁处理,该文件便会被永久禁用,无法通过外网(CDN节点)进行访问。如果不及时进行解封,文件将永远无法恢复使用。因此,新增的这个HOOK旨在解决这一问题,确保在文件被误判为违规后,能够及时解除限制。该方法需要传递一个固定变量url_cdn,该变量代表对应的CDN加速资源的访问路径。此举不仅提高了系统的灵活性和容错能力,也确保了文件资源的正常流通和使用。
    3、xc_cos_cdn_thaw_hook函数采用标准的数组结构进行返回,确保上级系统可以直接接管并识别处理响应结果。返回的固定值有两个:code用于表示执行处理的状态。如果返回值为1,则表示解封失败,接口返回了错误。此错误可能因多种原因引起,例如权限不足、接口异常、参数错误、文件不存在等。具体的失败原因需要通过第二个变量msg来获取。如果返回code=0,则表示解封成功。注:不管什么样的返回结果,都需要返回code+msg这两个参数。
    4、在初始化过程中,xc_cos_cdn_thaw_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加速的域名。通过对这些参数的统一封装,后续的API接口在执行解封动作时,能够顺利对文件进行相关操作和处理,确保资源的正常访问和流畅的用户体验。
    5、在执行xc_cos_cdn_thaw_hook的解封操作时,采用API接口而不是集成SDK的方法来发起请求。具体流程如下:首先,我们需要初始化腾讯云后台的相关账户参数,以便生成签名。这个过程中,会获取当前的时间戳和随机参数,并通过base64编码和hash_hmac方法进行签名处理,从而获得授权令牌。接下来,向腾讯云CDN的相关API接口发送请求,并提交生成的签名和需要解封的域名。在收到接口返回的结果后,根据具体响应执行相应的业务逻辑处理。需要注意的是,签名所需的所有参数均通过后台进行配置和处理。
    6、为了确保解封请求能够得到正常的响应处理,与腾讯云CDN接口进行API交互时,采用了curl方式进行处理。具体步骤包括:首先,通过签名机制封装好GET链接【cos_cdn】;然后,使用curl_init函数构建请求,并将返回结果存储在response变量中。为确保请求的有效性,通过curl_errno函数来检测是否存在错误,并在出现错误时返回一个包含code和msg的数组结构。接下来,判断返回结果是否为JSON格式,如果是,则使用json_decode函数将其转换为数组,并将结果赋值给json变量。最后,通过curl_close函数关闭CURL请求,以释放资源。这样一套流程确保了请求的准确性和响应的有效处理。
    7、在xc_cos_cdn_thaw_hook的开发中,引入了try-catch机制,从签名封装到curl返回结果的处理,整个流程都在try块中进行。如果在此过程中发生任何错误,catch块会捕获异常并处理,确保程序的稳健性。当catch捕获到异常时,系统会立即返回一个结构化的响应,其中包含code=1和msg='异常错误: ' . $e->getMessage()。这种设计不仅可以确保任何解封钩子过程中发生的错误都能被有效追踪,还能让上层系统通过判断返回的code来快速确定解封处理是否成功完成,极大地提高了故障诊断和修复的效率。
    8、为了确保接口的稳定性,在使用 xc_cos_cdn_thaw_hook 进行 CDN 资源解封时,我们增加了日志监听来处理错误情况。日志的唯一标识为 cos_cdn_thaw_error,并通过 xc_log_error_warn 方法写入日志系统。日志格式为:[时间:' . date("Y-m-d H:i:s") . '] - [解封资源:' . $url . '] - [错误:' . $e->getMessage() . ']。当系统通过 catch 捕获到异常错误时,会立即触发日志写入,以详细记录此次解封失败的具体原因。值得注意的是,该日志仅用于记录错误,不会触发报警机制,旨在为运维人员提供便捷的故障排查依据。
    9、在成功调用xc_cos_cdn_thaw_hook接口解封CDN资源文件(接口返回成功,code=0)后,将立即触发xc_cos_cdn_refresh_hook方法,以确保所有CDN节点刷新该文件的缓存状态。这一操作至关重要,因为它能够保证解封后的文件实时同步至所有节点,使用户能够及时访问最新的资源。如果不执行刷新动作,已解封的资源可能由于缓存机制的影响,仍需等待数小时才能正常访问。因此,在完成解封后,及时刷新CDN节点是确保用户体验的关键步骤。
    10、xc_cos_cdn_thaw_hook完成封装处理,整个执行流程如下:1、创建一个 $result 数组,用于存储操作结果。默认情况下,code 为 1(表示失败),msg 为“初始化失败”。2、使用 try-catch 块来捕获和处理任何可能发生的异常。3、通过 xc_get_option 函数获取必要的配置信息,包括 secretId、secretKey、region、bucket 和 cos_domain。这些信息用于生成请求签名和构建 API 请求。4、生成请求参数:构建请求字符串 $signStr,包含请求方法、API 版本、操作类型(EnableCaches)等信息。使用 hash_hmac 和 base64_encode 生成请求签名 $signature。5、使用 cURL 初始化请求,设置请求 URL 为 $cos_cdn,执行 cURL 请求,并将结果存储在 $response 中。6、使用 curl_errno 检查 cURL 请求是否出现错误。如果有错误,抛出异常并记录错误信息。7、使用 json_decode 将 $response 转换为关联数组 $json。检查 $json 中是否包含 SuccessUrls,以确定请求是否成功。8、如果请求成功(存在 SuccessUrls),调用 xc_cos_cdn_refresh_hook 函数刷新缓存。9、如果在请求或处理过程中抛出异常,进入 catch 块。记录错误日志,包括时间、URL 和错误信息,调用 xc_log_error_warn 记录日志。
    11、针对腾讯云【COS】对象存储的文件处理方法,所有相关的钩子函数已全面封装,确保文件管理更加高效和安全。具体包括以下几个方面:1、xc_delete_cos_file_hook:这是一个对象存储文件删除钩子,所有的文件删除操作必须通过这个方法进行,以确保操作的规范性和安全性。2、xc_cos_cdn_ban_hook:用于封禁CDN资源的方法。当对象存储中的文件被删除后,必须立即通过此方法封禁相应的CDN文件,以防止节点缓存中仍然存在被删除的文件。3、xc_cos_cdn_refresh_hook:此方法用于刷新CDN资源的缓存请求,通知所有CDN节点对文件进行更新处理,从而清除旧的缓存内容,确保用户访问的是最新的文件。4、xc_cos_cdn_thaw_hook:用于解封CDN资源的方法。在出现误删、误封或误判的情况下,可以通过这个方法解除对CDN节点的封禁状态,恢复文件的正常访问。这些钩子函数的封装,极大地提高了对象存储文件的管理效率,保障了数据的安全性和一致性。
  • 查看全文
  • 查看作者
  • 宋人有耕者。田中有株。兔走触株,折颈而死。因释其耒而守株,冀复得兔。兔不可复得,而身为宋国笑。

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

    请登录之后再进行评论

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