文件夹内容变更时如何复制重命名文件:Linux或PHP脚本方案咨询
Prestashop订单CSV自动转TXT对接ERP实现方案
方案1:优先推荐:Prestashop钩子触发(无需文件监控、无延迟、无漏单)
直接利用Prestashop原生能力在导出CSV的同时生成TXT,不需要做文件夹变更对比,是最稳定的实现方式:
- 找到站点中负责导出订单CSV的模块代码,或直接挂载Prestashop原生
actionOrderStatusPostUpdate钩子(订单状态更新时触发) - 在CSV文件导出完成的逻辑后,加入以下代码直接复制重命名:
// 替换为你实际导出的CSV文件绝对路径 $csv_path = '/var/www/vhosts/你的站点域名/订单导出目录/xxx.csv'; $txt_path = preg_replace('/\.csv$/i', '.txt', $csv_path); // 复制生成TXT文件 copy($csv_path, $txt_path);
- 可通过Plesk站点文件管理器直接编辑对应代码,建议自行封装小型插件挂载钩子,避免修改核心代码后续升级被覆盖。
方案2:Linux实时文件监控(无需修改站点代码,触发及时)
适合不想改动Prestashop代码的场景,靠系统能力监控导出目录的文件变化,自动生成TXT:
- 先安装inotify监控工具:
- CentOS系统执行:
yum install inotify-tools -y - Debian/Ubuntu系统执行:
apt install inotify-tools -y
- CentOS系统执行:
- 新建监控脚本
/root/monitor_order_export.sh,内容如下:
#!/bin/bash # *注意替换为你实际的订单CSV导出目录绝对路径* WATCH_DIR="/var/www/vhosts/你的站点域名/订单导出目录" inotifywait -m -e close_write --format '%w%f' "$WATCH_DIR" | while read NEW_FILE do # 仅处理CSV格式的文件,过滤临时文件 if [[ "$NEW_FILE" =~ \.csv$ ]]; then TXT_FILE="${NEW_FILE%.csv}.txt" cp -a "$NEW_FILE" "$TXT_FILE" fi done
- 给脚本加执行权限:
chmod +x /root/monitor_order_export.sh - 配置开机自启,可直接在cron中加入以下规则:
@reboot /root/monitor_order_export.sh > /dev/null 2>&1,重启后脚本会在后台常驻运行,CSV写完就会自动生成对应的TXT文件。
方案3:cron定时扫描兜底(配置最简单,适合对实时性要求不高的场景)
不需要额外安装工具,也不需要改站点代码,定时扫描导出目录生成缺失的TXT:
- 新建扫描脚本
/root/sync_order_txt.sh,内容如下:
#!/bin/bash # *注意替换为你实际的订单CSV导出目录绝对路径* EXPORT_DIR="/var/www/vhosts/你的站点域名/订单导出目录" cd "$EXPORT_DIR" || exit for csv_file in *.csv; do [ -f "$csv_file" ] || continue txt_file="${csv_file%.csv}.txt" # 仅在TXT不存在或CSV有更新时重新复制 if [ ! -f "$txt_file" ] || [ "$csv_file" -nt "$txt_file" ]; then cp -a "$csv_file" "$txt_file" fi done
- 给脚本加执行权限:
chmod +x /root/sync_order_txt.sh - 在Plesk计划任务(或直接执行
crontab -e)中加入定时规则,比如每分钟扫描一次:* * * * * /root/sync_order_txt.sh > /dev/null 2>&1,最多1分钟延迟即可生成所需TXT文件。
注意事项
所有方案中涉及的目录路径请替换为你实际的CSV导出路径,注意匹配Plesk站点的文件夹权限,避免因权限不足导致读写失败。
内容的提问来源于stack exchange,提问作者eseka
相关产品推荐
相关产品推荐

