我最近继承了一个用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服务器。
问题 - 我可以开始排除故障或可能是什么原因的任何想法?
答案 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
。