
PHP 批量读取图片文件时路径和扩展名容易出错
PHP 本身不直接生成 PPT,所谓“自动生成 PPT 相册目录”,本质是批量读取图片、生成结构化数据(比如 JSON 或 HTML),再交给其他工具(如 Python 的 python-pptx、Node.js 的 pptxgenjs)或本地桌面软件处理。很多开发者卡在第一步:用 glob() 或 scandir() 拿不到图,或者漏掉 .webp、.avif 这类新格式。
- 确保路径用绝对路径,
__DIR__ . '/uploads'比'./uploads'更可靠,尤其在 CLI 和 Web 环境下行为不一致 - 过滤图片要写全常见后缀:
['jpg','jpeg','png','gif','webp','bmp'],别只写['jpg','png'] -
getimagesize()是最轻量的校验方式,能过滤掉名字像图但实际损坏/非图的文件,比单纯看扩展名靠谱得多
用 PHP 生成 PPTX 元数据需绕过 COM 和 Office 依赖
Windows 下有人试过用 COM 扩展调 PowerPoint,但服务器环境几乎不可行;Linux/macOS 根本不支持。真正可行的是生成「PPTX 兼容的 XML 结构」或导出为中间格式(如 Markdown、JSON),再由外部工具转换。PHP 做好这一层数据准备即可。
- 不要尝试用
php-pptx这类已废弃/多年未更新的库,它们不支持新版 PPTX ZIP 结构 - 推荐输出一个带顺序、标题、图片路径的数组,例如:
['slides' => [['title' => '全家福', 'image' => 'img/2024-01-01.jpg'], ...]] - 如果必须立刻出 PPTX,用
exec()调用本地安装的python脚本更稳,PHP 只负责传参和清理临时文件
生成相册目录页时中文乱码和字体缺失是高频问题
即使外部工具(如 python-pptx)生成了 PPTX,打开后发现标题全是方框——大概率是没指定中文字体。PHP 无法控制 PPTX 内部字体,但可以在生成元数据时预埋 fallback 字体建议,或强制让 Python 脚本加载系统字体。
- 在 PHP 生成的 JSON 中加字段:
"font_family": "Microsoft YaHei"或"Noto Sans CJK SC",供下游工具读取 - Linux 服务器上 python-pptx 默认无中文字体,需提前执行:
fc-list :lang=zh查可用字体,再在脚本里用slide.shapes.add_textbox()后手动设text_frame.paragraphs[0].font.name = 'WenQuanYi Micro Hei' - 避免用
mb_strlen()计算标题长度来截断——PPTX 渲染时字宽不等,应交由 PPT 工具按像素或字符数限制处理
批量导入大图时内存溢出和超时必须主动防御
一次读 200 张 5MB 的图,getimagesize() + file_get_contents() 很容易触发 Fatal error: Allowed memory size exhausted 或 max_execution_time 中断。这不是代码写得不够优雅,而是 PHP 默认配置根本不适合图像批处理。
立即学习“PHP免费学习笔记(深入)”;
- 禁用
memory_limit不是解法,改用流式处理:fopen()+fread()读前几个 KB 判断文件头(如\xff\xd8\xff是 JPEG),跳过完整加载 - 用
set_time_limit(0)前先确认运行模式:CLI 下有效,Web SAPI(如 Apache mod_php)可能被模块强制中断 - 分批次处理,比如每 20 张存一次 JSON 缓冲,用
yield返回 Generator,避免全量数组驻留内存











