ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

mod_php APC被符号链接困惑,包括两次相同的文件 – 为什么?

2019-07-09 06:39:47  阅读:255  来源: 互联网

标签:php caching symlink apc


我为该文件夹(比如网站)设置了一个Apache vhost,这是另一个链接到具有当前版本的文件夹(例如website_N)的符号链接,其中N是版本号(网站 – > website_123).部署新版本时,会创建另一个名为website_N 1的文件夹,当其内容准备就绪时,会重新创建网站符号链接以链接到该新文件夹(网站 – > website124).

这种设置似乎混淆了APC的包含缓存.在新部署和以下符号链接开关包含并要求应用程序启动中的指令导致重新声明错误后,有时(并非总是令人讨厌)

Fatal error: Cannot redeclare class Foobar in /absolute/path/to/deployment/physical/folder/website_N/include_foobar.php

该消息中的website_N文件夹通常是旧的构建文件夹之一,有时甚至不再存在.但有时会生成错误,显示最新版本文件夹的正确物理位置.对于第一次加载的类,“无法重新声明”错误的内容保持不变.

我非常有信心这是一个APC问题,因为每次发生这种情况都会将apc_clear_cache()添加到应用程序引导程序来解决问题.

我想这是因为不同版本位于同一个符号链接文件夹下,共享相同的“未解析”路径.因此,可能会为预编译的图像加载旧的包含连接,并且为其“已解析”的路径执行另一次包含依赖项的尝试,因此它显示为新的并导致双重包含和重新声明错误.虽然这个理论可能没有多大意义,但我不太了解APC的内部结构.

有很多方法(清除缓存作为部署过程的一部分是显而易见的),但是如果有人可以向我解释该错误背后的机制,即此设置中的内容会破坏APC行为以及在何时(以及为什么物理上删除的文件夹路径有时会出现在那些错误消息中).

解决方法:

我使用TYPO3并遇到同样的问题. TYPO3缓存很多.将符号链接更改为其他源时,必须使用shell进入TYPO3安装文件夹并手动删除缓存的文件.

之后一切都很好.花了一天时间弄明白.

标签:php,caching,symlink,apc
来源: https://codeday.me/bug/20190709/1410349.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有