Prestashop致命错误:SmartyException异常,无法写入编译文件
先把你遇到的错误信息贴出来,方便定位问题:
致命错误:未捕获的'SmartyException'异常,消息为'无法写入文件C:\xampp\htdocs\prestashop/cache/smarty/compile\06\99\53\0699537d98e8ffcfde91527d2e58a586c1a64d88.file.header.tpl.php'
位于C:\xampp\htdocs\prestashop\tools\smarty\sysplugins\smarty_internal_write_file.php:73
堆栈跟踪:
#0 C:\xampp\htdocs\prestashop\tools\smarty\sysplugins\smarty_internal_template.php(201): Smarty_Internal_Write_File::writeFile('C:\xampp\htdocs...', '<?php /* Smarty...', Object(Smarty)) #1 ...
这个错误说白了就是Smarty模板引擎没权限往指定的缓存目录写文件,或者这个目录压根就不存在,在Windows的XAMPP环境下很常见,咱们一步步来搞定:
1. 先确认缓存目录是否存在
打开文件资源管理器,导航到C:\xampp\htdocs\prestashop\cache下面,看看有没有smarty\compile这个子目录。如果没有的话,手动创建整个结构:
- 先建
smarty文件夹,再在里面建compile文件夹 - 顺便可以把
smarty下的cache文件夹也建好,避免后续其他缓存问题
2. 给目录设置写入权限
这是最核心的步骤,Windows下权限设置经常出问题:
- 右键点击
compile文件夹,选「属性」→「安全」标签 - 点击「编辑」按钮,然后点击「添加」,输入
Everyone(测试环境这么弄最省事,生产环境建议添加Apache运行用户,比如nt authority\system) - 给添加的用户勾选「写入」和「修改」权限,然后点「应用」「确定」保存
- 同样的操作给
smarty\cache文件夹也设置一遍权限
3. 清除旧缓存(可选但推荐)
如果目录本来就存在还是报错,大概率是旧缓存文件的权限有问题:
- 直接删掉
smarty\compile和smarty\cache里的所有文件和子文件夹 - 重启XAMPP的Apache服务,让PrestaShop重新生成新的缓存文件
4. 检查Smarty路径配置(进阶)
如果你之前改过Smarty的配置,可以打开config/smarty.config.inc.php文件,看看$smarty->compile_dir的路径是不是正确的,尽量统一用正斜杠(比如写成C:/xampp/htdocs/prestashop/cache/smarty/compile),避免混合正斜杠和反斜杠导致识别问题
按照上面的步骤操作完,基本就能解决这个报错了。
内容的提问来源于stack exchange,提问作者Lavanya E

