1

我用 CakePHP 1.3.10 制作的网站上发生了一些非常奇怪的事情,我不知道这是 CakePHP 问题还是 PHP 问题。我遇到的问题是属于插件的控制器内部的操作。

这是一个简单的函数,它看起来像:

function my_function($my_parameter) {

    $current_url = $this->params['url']['url']; //We get the current url (includes plugin/controller/action/parameters) from Cake's $this->params array

    $this->saveInfoToDB($current_url); //Function that saves the variable and other info to a table in the database - This function doesn't change the value of the variable, just saves it
}

此操作由网站中的多个链接调用,格式为“/my_plugin/my_controller/my_function/my_paramenter”。这个想法是显示页面“my_function”并将当前url存储在数据库中

那么问题是什么?让我解释:

查看数据库中“saveInfoToDB”存储的注册表,我意识到我存储“current_url”值的字段有时(它似乎是随机的)具有意外值。

正常值如下所示:/my_plugin/my_controller/my_function/ 3 整数从 1 到 100)错误值总是相同:/my_plugin/my_controller/my_function/js/iepngfix.htc

你能看出什么问题是对的吗?我不知道为什么在世界上js/iepngfix.htc存储在那里!我将$my_parameter放在示例中的原因是因为我已经意识到js/iepngfix.htc被作为参数传递到该函数中(因此它也显示在$this->params数组中)。但为什么?

我的网站上没有/my_plugin/my_controller/my_function/js/iepngfix.htc这样的链接,那怎么会发生呢?我不相信许多不同的用户会同意在浏览器中输入该网址(顺便说一句,用户必须登录才能访问该链接)。显然,在某些时候,当用户浏览网站时,该链接被“调用”,但我不知道如何......

该网站使用了一些针对 PNG 图像的 IE hack(如 iepngfix.htc、iepng_tilebg.js 等),但我已经删除了它们,因此它们不会在任何地方调用,甚至从服务器中删除了文件。

我知道很难回答为什么会发生这种情况,但是如果有人可以就如何对我的网站进行故障排除以找出问题的根源给我一些建议。我试图重新创建这个问题,但我只能使用 IE 并访问用户访问的链接之一(例如/my_plugin/my_controller/my_function/43),但尝试了更多次并且它没有再次发生. 那么这是IE的问题吗?当用户调用正确的链接时,此浏览器是否调用了该链接(错误的链接) ?

任何帮助将非常感激!!

4

2 回答 2

1

您可能正在尝试iepngfix.htc通过相对URL 包含该行为;可能来自样式表

例如:如果iepngfix.htc使用此 URL 链接

../js/iepngfix.htc

你目前在这个页面:

http://example.com/mycontroller/myaction/

然后iepngfix.htcURL 被解析为:

http://example.com/mycontroller/js/iepngfix.htc

这将给出错误 404。

但是,如果您当前位于页面:

http://example.com/mycontroller/myaction/123

然后iepngfix.htcURL 被解析为:

http://example.com/mycontroller/myaction/js/iepngfix.htc

最后一部分将作为参数 ( js/iepngfix.ht)发送到您的控制器操作

如何解决这个问题

  • 首先,你真的需要 pngfix 吗?您可能只需要 Internet Explorer 6 及以下版本。除非您的目标是中国,否则 Internet Explorer 6 的市场份额不到 1% ( http://www.ie6countdown.com/ )。即便如此,这种行为也会产生很多负面影响,导致性能非常差
  • 检查您的网址!由于 URL 重写,您应该始终使用“资产”(CSS、JavaScript)的完整路径;/js/myscript.js代替js/myscript.js../js/myscript.js
于 2013-04-12T20:39:22.597 回答
0

我想我可能已经找到了罪魁祸首。在其中一个 css 文件中有这个 css 代码“隐藏”:

body { behavior: url('js/iepngfix.htc') }

(我会提到这个设计是别人做的)

删除该片段后,该问题似乎不再发生。为什么?我不知道...为什么在函数中将其作为参数传递?我真的不知道...为什么会随机发生?我真的不知道...

我确信所有这些都有一个解释,但我没有太多时间进一步调查它,我很高兴它现在正在工作!

于 2013-04-12T20:23:31.200 回答