Zend 服务器“缓存”的 JS 和 CSS 文件


Zend Server "Caching" of JS and CSS files

我在Vitrualbox上的CentOS VM中运行Zend Server,并且我在链接的JS和CSS资产被"缓存"时遇到问题。我说"缓存"是因为它们不是真正意义上的缓存,而是当我向 JS 或 CSS 文件添加内容时,它们会损坏并且更改不会出现。相反,该文件附加了一堆坏字符,例如。

layout.phtml (zend framework template(

$this->headScript()->appendFile ('/js/admin/product.js', 'text/javascript' ) ;

这将呈现:

<script type="text/javascript" src="/js/admin/product.js"></script>  

产品.js

        //re-add scrolling handles
        scrollThumbs.reSortThumbs(ul);
        product.moveFileInput(ul);
    };
};��������������������������������������������������

如果我从JS或CSS文件中删除内容,结果是一个不完整的文件,而不是如上所述添加的坏字符。

我已经关闭了所有形式的Zend缓存,甚至关闭了Zend Optimizer。我已经删除了浏览器缓存并尝试了几种浏览器。

我已经ssh进入服务器并仔细检查了文件,它格式完美并包含更改。我试过重新启动Zend Server(/usr/local/zend/bin/zendctl.sh restart(和Apache(service httpd restart(

修复它的唯一方法是重新启动整个操作系统(reboot (。有趣的是,如果我删除更改,它会恢复正常工作。我只能假设服务器端某处发生了某种形式的缓存。

事实证明,这是一个Virtualbox共享文件夹问题,而不是与Zend Server唯一相关的问题,而是一般的Apache。

修复来自VirtualBox for Apache中的共享文件夹

EnableSendfile off添加到您的虚拟文件中,例如。

<VirtualHost *:80>
    DocumentRoot "/mnt/your/shared/dir"
    ServerName Default
    <Directory "/mnt/your/shared/dir/public">
        EnableSendfile off
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

这是因为您打开了浏览器缓存并且文件名保持不变。这可以通过在脚本上使用 md5_file(( 并将其保存到 cookie 来避免,在每个请求中检查cookie是否更改 - 在这种情况下,您将能够管理前端文件更改时的情况。

我尝试了EnableSendfile off的事情,但它在带有 ZendServer 的 Centos 虚拟机上不起作用。所以我搬到了我的 ubuntu 虚拟机,手动安装了 apache(没有 ZendServer(,它运行良好。在我看来,这是ZendServer上的问题,至少在ZendServer配置上是这样。