可通过Webhook回调、inotify监控、消息队列或cron轮询四种方式在音频处理完成后自动执行PHP代码。Webhook适用于第三方服务回调;inotify适合Linux本地文件系统实时监听;消息队列实现异步解耦;cron则用于低实时性批量处理。

当音频文件上传或处理完成时,需要自动执行 PHP 代码以进行后续操作(如生成元数据、转码通知、数据库记录等),可通过事件驱动或文件系统监控机制实现。以下是几种可行的技术路径:
一、通过 Webhook 在音频处理服务端回调触发 PHP
若使用第三方音频处理服务(如 AWS Transcribe、AssemblyAI 或自建 FFmpeg API),可在处理完成后配置 HTTP 回调地址,由该地址指向一个 PHP 脚本接收并响应请求。
1、在音频处理平台的 Webhook 设置中填写目标 URL,例如 https://yourdomain.com/hook/audio_complete.php。
2、在 audio_complete.php 中验证请求来源(如检查签名头 X-Signature 或 token 参数)。
立即学习“PHP免费学习笔记(深入)”;
3、解析 POST 请求体中的 JSON 数据,提取 audio_id、status、output_url 等字段。
4、根据 status 值为 "completed" 时执行业务逻辑,例如写入 MySQL 或调用 shell_exec 启动本地转码脚本。
二、利用文件系统 inotify 监控音频输出目录并调用 PHP
在 Linux 环境下,可部署守护进程监听指定目录中新增的音频文件,一旦检测到符合命名规则的完成文件(如 .done 标记或特定扩展名),立即执行 PHP 处理脚本。
1、安装 inotify-tools:运行 apt-get install inotify-tools(Debian/Ubuntu)或 yum install inotify-tools(CentOS)。
2、编写 shell 监听脚本 watch_audio.sh,内含循环调用 inotifywait -m -e create /path/to/output/。
3、在脚本中判断新创建文件是否匹配正则 ^audio_[0-9]+\.mp3$,匹配则执行 php /var/www/process_audio.php --file=$file。
4、使用 systemd 将该脚本注册为长期运行服务,并设置开机启动。
三、借助消息队列解耦音频处理与 PHP 执行
将音频处理任务结果发布至消息队列(如 Redis Pub/Sub、RabbitMQ),PHP 消费者进程持续订阅对应频道,收到消息后立即执行预设逻辑,实现异步低耦合触发。
1、音频处理完毕后,使用 Redis CLI 或 PHP Redis 扩展执行 PUBLISH audio:finished '{"id":"123","format":"wav","duration":180}'。
2、编写 PHP 消费脚本 consumer.php,使用 $redis->subscribe(['audio:finished'], $callback) 注册回调函数。
3、在回调函数中解析 JSON 消息体,调用 file_put_contents() 记录日志或触发 exec("php /var/www/update_metadata.php {$id}")。
4、通过 screen 或 supervisor 启动该消费者进程,确保其常驻运行。
四、使用 cron 定期扫描未处理音频文件并触发 PHP
适用于无实时性要求的场景,通过定时任务轮询特定目录,查找待处理音频文件并批量交由 PHP 脚本执行,避免常驻进程开销。
1、将待处理音频统一存放于 /var/www/audio/pending/,文件名包含时间戳与哈希前缀。
2、编辑 crontab:添加条目 */5 * * * * /usr/bin/php /var/www/check_pending.php >> /var/log/audio_cron.log 2>&1,每五分钟执行一次。
3、check_pending.php 中使用 scandir() 获取所有 .wav/.flac 文件,过滤已存在同名 .processed 标记文件。
4、对每个待处理文件,调用 shell_exec("ffmpeg -i {$path} -f null - 2>&1") 验证有效性,成功后执行主业务逻辑并生成标记文件。











