0

0

如何在生成PDF标签时自动保存到服务器

碧海醫心

碧海醫心

发布时间:2026-01-24 11:28:14

|

273人浏览过

|

来源于php中文网

原创

如何在生成PDF标签时自动保存到服务器

本文介绍如何在wordpress插件中修改现有pdf生成逻辑,实现在用户下载快递标签pdf的同时,将同一份pdf文件自动保存至服务器指定目录,避免重复请求第三方api。

要在生成DPD快递标签PDF时同时保存到服务器(而不仅限于响应客户端下载),关键是在get_labels_output()函数中,在输出PDF内容给浏览器之前,先将其写入服务器磁盘。当前代码通过echo $pdf直接将二进制PDF流发送至HTTP响应,随后调用die终止脚本——我们只需在echo前插入文件写入逻辑即可。

✅ 推荐实现方式(安全、可维护)

private function get_labels_output( $pdf, $file_name = 'dpdLabels' ) {
    $name = $file_name . '-' . date( 'Y-m-d-His' ) . '.pdf'; // 增加秒级时间戳,避免同日重名
    $upload_dir = wp_upload_dir(); // 推荐使用WordPress标准上传目录
    $save_path  = $upload_dir['path'] . '/' . $name; // 如:/wp-content/uploads/2024/06/dpdLabels-2024-06-15-143022.pdf

    // ✅ 安全写入:确保目录可写且路径合法
    if ( ! is_writable( $upload_dir['path'] ) ) {
        error_log( "PDF save failed: upload directory not writable — {$upload_dir['path']}" );
        // 可选:降级处理或抛出用户提示(需配合前端)
    } else {
        $bytes_written = file_put_contents( $save_path, $pdf );
        if ( $bytes_written === false ) {
            error_log( "PDF save failed: unable to write file — {$save_path}" );
        }
    }

    // ? 保持原有下载行为不变
    header( 'Content-Description: File Transfer' );
    header( 'Content-Type: application/pdf' );
    header( 'Content-Disposition: attachment; filename="' . $name . '"' );
    header( 'Content-Transfer-Encoding: binary' );
    header( 'Connection: Keep-Alive' );
    header( 'Expires: 0' );
    header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
    header( 'Pragma: public' );

    echo $pdf;
    die;
}

⚠️ 注意事项与最佳实践

  • 路径安全性:避免硬编码相对路径(如../pathToSaveYourPdfFiles/),易受路径遍历或权限问题影响;优先使用 wp_upload_dir() 获取受控、可写的标准目录。
  • 文件名唯一性:添加 H:i:s 时间戳(而非仅日期),防止高频调用时覆盖同名文件。
  • 错误处理:file_put_contents() 返回 false 表示失败,应记录错误日志便于排查(如磁盘满、SELinux限制、open_basedir 限制等)。
  • 权限与备份:确保Web服务器用户(如 www-data)对目标目录有写权限;生产环境建议定期归档或清理旧PDF,避免占用过多空间。
  • 合规性提醒:若PDF含客户敏感信息(如收件人地址),需确保服务器存储符合GDPR/PIPL等数据保护要求,必要时加密或设置访问控制。

通过以上改造,每次调用 print_order_parcel_label() 生成标签时,PDF既会触发浏览器下载,也会静默持久化至服务器,为后续审计、重发或批量导出提供可靠数据源。

IBM Watson
IBM Watson

IBM Watson文字转语音

下载

相关专题

更多
http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

416

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2079

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2034

2024.08.16

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

415

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

315

2024.04.15

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

9

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号