更改主机时出现PHP错误

时间:2010-10-21 15:40:22

标签: php mysql

我最近继承了一个用PHP编写的网站,并负责将其从当前主机迁移到我们自己的内部Web服务器。

我成功复制了文件,我可以在我们的网络服务器(IIS7)上浏览网站,但是有些(而非全部)PHP脚本似乎无法正常执行。

例如,以下代码从数据库加载一些文本内容并在现有服务器上正常显示

<?php $sql = "select * from tblsubpages where PageID = 1 " ; $page_Result=mysql_query($sql); while ( $page_Row = mysql_fetch_array ( $page_Result)) {
?>

<?=str_replace('<blockquote>','',$page_Row['Details']); ?>

然而,在新服务器上,我得到的是文本内容所在位置的以下输出。

  

”, '',$ page_Row [ '详情']); ?&GT;

两个站点上的文件都是相同的,我已经证实他们都可以成功连接到mySQL服务器。

问题 - 我可以开始排除故障或可能是什么原因的任何想法?

4 个答案:

答案 0 :(得分:2)

新主机上php.ini的short_open_tag指令可能存在问题。检查它是否关闭,如果是,请尝试将其打开。

答案 1 :(得分:2)

在php.ini文件集中:

short_open_tag = On

或更改

<?=

<?php

答案 2 :(得分:1)

首先要做的事情。

  • 确保使用相同的php 版本

  • 复制php.ini文件。

  • 看起来您的ini文件已禁用短标签。将<?=更改为<?php echo

答案 3 :(得分:1)

如果您不想打开short_tags,可以尝试转换它们:

foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(DIRECTORY)) as $file) {
    if (!$file->isFile()) continue;

    $tokens = token_get_all(file_get_contents($file));
    $source = '';
    foreach ($tokens as $token) {
        if (is_string($token)) {
            $source .= $token;
            continue;
        }

        if ($token[0] == T_OPEN_TAG_WITH_ECHO) {
            $token[1] = '<?php echo ';
        }
        $source .= $token[1];
    }

    file_put_contents($file, $source);
}

这会迭代来源的令牌,并将T_OPEN_TAG_WITH_ECHO替换为<?php echo