Delphi for Php的一个小Bug

来源:互联网 发布:如何取消8080端口占用 编辑:程序博客网 时间:2024/04/30 23:15

近期在使用D4P过程中遇到一个怪问题.那就是在程序中使用Window控件后进行调试时Window无法显示,总是显示网页脚本有错误:qx未定义,而当程序发布后却又能正常显示,而在另外一台机器中又是正常的,经过比较D4P的安装配置又是一样的,这让我百思不得期解.后来在对比调试网页及发布网页的源代码时发现了一个问题:

调试时其中有一段: <script type="text/javascript" src="file:///e:/program files/codegear/delphi for php/1.0/vcl/qooxdoo/framework/script/qx.js"></script>

在发布后变成了:<script type="text/javascript" src="vcl/qooxdoo/framework/script/qx.js"></script>

也就是说在调试时网页访问了本地资源:e:/program files/codegear/delphi for php/1.0/vcl/qooxdoo/framework/script/qx.js,这一下就恍然大悟了,我装的是IE7安全性较高不容许访问本地资源,马上检查能正常运行的机器,发现果然是IE6的.

于是就去研究VCL4PHP,发现在VCL.INC.PHP中有一段代码且是专门为IE做的:

                                if ((strpos($part,':')) && (strpos($dirs[$i],':')))
                                {
                                        //This fixes the problem with having the code to be run
                                        //and the library in different drives, but it only works with IE
                                        //FF throws a security warning
                                        //TODO: Must fix another way
                                        $result='file:///'.$path;
                                        return($result);
                                }

于是就修改为:

                                if ((strpos($part,':')) && (strpos($dirs[$i],':')))
                                {
                                        //This fixes the problem with having the code to be run
                                        //and the library in different drives, but it only works with IE
                                        //FF throws a security warning
                                        //TODO: Must fix another way
                                        $result='vcl';
                                        return($result);
                                }

并修改Apache的httpd.template.conf文件,在其中加入一个虚拟目录:

Alias /vcl/ "%VCL_DIR%/vcl/"

这样困扰已久的调试问题终于解决了.不想还没来的及兴奋又有新问题了,经过这样修改后原来的工程是能够调试了,但在新工程中使用控件时却找不到JS文件了网页出错,于是恢复文件.同时也懒的搞了就做了一个最简单的解决方法,那就是把VCL文件夹(VCL4PHP源代码)复制一份到工程所在目录就可以了.至于VCL4PHP源代码就让高手去修改了.
{注:已经有解决方法了:http://blog.csdn.net/lqglaive/archive/2007/06/01/1634399.aspx}