You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除RTMP创建的子目录?PHP因权限过高无法操作的解决办法

解决思路

调整目录权限让PHP可操作

  • 修改Nginx运行用户,让它和PHP使用同一个用户组。比如PHP用www-data的话,在Nginx主配置里添加user www-data;,重启Nginx后,生成的子目录权限会和PHP兼容,就能直接用PHP删除。
  • 直接指定HLS目录的权限:在RTMP的HLS配置块里加入Hls_dir_permissions 0755;和Hls_permissions 0644;,这样生成的子目录同组用户拥有读写执行权限,只要PHP和Nginx在同一用户组,就能正常操作目录。

用Nginx事件触发脚本清理

在RTMP配置里利用on_publish_done事件,调用shell脚本删除对应子目录:

rtmp {
    server {
        listen 1935;
        application live {
            live on;
            hls on;
            hls_nested on;
            hls_continuous on;
            hls_path /path/to/hls;
            on_publish_done {
                exec /usr/local/bin/clean_live_dir.sh $name;
            }
        }
    }
}

然后编写clean_live_dir.sh脚本:

#!/bin/bash
DIR="/path/to/hls/$1"
if [ -d "$DIR" ]; then
    rm -rf "$DIR"
fi

给脚本添加执行权限:chmod +x /usr/local/bin/clean_live_dir.sh,这样直播结束时Nginx会自动调用脚本删除对应子目录。

定时任务清理过期目录

如果不想改动Nginx配置,就写个定时脚本,扫描HLS存储目录,删除长时间没有更新的子目录:

#!/bin/bash
# 删除60分钟内没有修改的直播目录
find /path/to/hls -type d -mmin +60 -exec rm -rf {} \;

把脚本加到crontab,设置每小时执行一次:

crontab -e
# 加入下面一行
0 * * * * /usr/local/bin/clean_expired_dir.sh

内容的提问来源于stack exchange,提问作者Jun Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:35:27