在迁移到Windows Server 2003计算机后,完全在LAMP服务器上运行的PHP应用程序根本无法要求或包含文件。例如,给定以下文件:
include("connectme.php");
echo "==== $SERVER_NAME, $USER, $PASSWORD";
$sql="SELECT id, model
FROM `products`
WHERE acc_code IS NULL
OR acc_code =0";
$prodset=mysql_query($sql);
while($prod=mysql_fetch_array($prodset,MYSQL_ASSOC))
{
echo $prod[id].",".$prod[model]."<br>";
}
虽然连接参数在包含的 connectme.php 文件中指定,但文件将因MySQL连接错误而失败。如果我对 include 行进行评论并对连接参数进行硬编码,则可以正常工作。
有什么想法吗?
由于
connectme.php 连接参数中的更新:已定义并给定值。但由于某种原因,变量在包含文件范围内不可见。当我向 echo 添加一行时,变量$ SERVER_NAME,$ USER,$ PASSWORD都是空的。
答案 0 :(得分:1)
原来,有些文件(包括connectme.php)使用短标签&lt;? ?&gt; ,由于服务器是新安装的PHP服务器(默认情况下不启用短标签),因此它包含 connectme.php 的完整来源没有解释。相当难以捉摸!
感谢大家的帮助!
答案 1 :(得分:0)
我不知道您的目录结构是什么,但您是否尝试过将相对路径作为测试?
如果它在同一目录中:
include(".\\connectme.php");
???
答案 2 :(得分:0)
这里有一些需要注意的事项:窗口中的斜线向另一个方向移动,并且还存在换行问题。尝试其他健全性测试,例如包含回声的文件以确定目录结构等。
答案 3 :(得分:0)
检查所包含文件的权限。您需要允许IUSR帐户的访问权限才能读取和执行。完成此操作后,您应该能够以包含方式访问该文件。
答案 4 :(得分:0)
这几乎可以肯定是一个include_path问题。您可以通过多种方式进行设置。
您可以使用
创建页面<?php phpinfo(); ?>
在其中查看当前包含路径。如果您使用的是Apache,则可以在页面,ini_set
配置文件或php.ini
文件中使用.htaccess
进行更改。
你可以在这里看到更多:
答案 5 :(得分:0)
我会用require替换include,因为它不是你的脚本的可选项,如果文件不存在,它不仅仅是配置错误。
require "connectme.php";
这个connectme.php包含mysql_connect和mysql_select_db()?然后至少为连接代码添加一些基本的错误处理,并使其可以访问mysql链接资源。绝对最小版本
<?php
$mysql = mysql_connect('...', '...', '...') or die(mysql_error());
mysql_select_db('...', $mysql) or die(mysql_error());
然后使用此链接资源并向mysql_query添加错误处理。同样,最小版本
$prodset=mysql_query($sql, $mysql) or die(mysql_error());
答案 6 :(得分:0)
也许某些配置会覆盖php的默认包含路径,以确保当前目录位于include_path中,您可以尝试这样做:
set_include_path(get_include_path() . PATH_SEPARATOR . ".");
答案 7 :(得分:0)
您将相对路径传递给include()。它与当前工作目录相关。也许cwd不是你所期望的那样。一些额外的调试输出可以澄清这一点。
<?php
echo '<div>Debug: __FILE__=', __FILE__, '</div>';
echo '<div>Debug: cwd=', getcwd(), '</div>';
echo '<div>Debug: glob(*.php)=', join(', ', glob('*.php')), '</div>';
require "connectme.php";
答案 8 :(得分:0)
如果将connectme.php的内容复制到主文件中会发生什么?
猜测:由于linux和windows之间的终端线路不同,可能会出现问题吗?