PHP代码被注释掉了。

3

我正在使用安装了Apache的CentOS 6.4。我有一个名为cmsSearch.php的单个php文件。在文件顶部,我有可以正常执行(查询Sphinx搜索索引)的PHP代码。但是,在下面的HTML中尝试运行的任何PHP(尝试运行foreach并使用Sphinx Search结果填充表格)只会在控制台(Chrome)中被注释掉。以下是整个cmsSearch.php文件:

<?php
require("sphinxapi.php");

if($_POST['keyword'])
{
$keyword = $_POST['keyword'];
$client = new SphinxClient();
$client->SetMatchMode(SPH_MATCH_ANY);
$result = $client->Query($keyword, "staffDirectoryMember");

if(!$result)
{
    print "ERROR: " . $client->GetLastError();
}
else
{
    var_dump($result["matches"]);
}
}
?>

<!DOCTYPE html>
<html>
<head>
<title>Sphinx Test</title>

<style>
.container
{
    border: solid 1px black;
    height: 350px;
    width: 700px;
    margin: auto;
    padding: 5px;
}
.output
{
    margin-top:20px;
    border: solid 1px red;
    height: 200px;
}
</style>
</head>
<body>
<?echo "TEST"; ?>
<div class="container">
    <div>
        <form method="post" action="cmsSearch.php">
            <input type="text" name="keyword">
            <input type="submit" value="Search">
        </form>
        <div class="output">
            <? echo "test2"; ?>
            <table>
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>Weight</th>
                        <th>ClientId</th>
                        <th>DomainId</th>
                        <th>ContentTypeId</th>
                    </tr>
                </thead>
                <tbody>
                <?
                    echo "Above for loop";
                    foreach($result["matches"] as $match)
                    {
                    echo "Print from for loop:";
                    var_dump($match);   
                    ?>
                    <!-- <tr>
                        <td><?=$match[id]?></td>
                        <td><?=$match[weight]?></td>
                        <td><?=$match[attrs][clientid]?></td>
                        <td><?=$match[attrs][domainid]?></td>
                        <td><?=$match[attrs][contenttypeid]?></td>
                    </tr> -->
                    <?}
                    echo "After for loop";
                    ?>
                </tbody>
            </table>
        </div>
    </div>
</div>

我不确定为什么PHP在顶部正常执行(我可以输出并且var dump也可以工作),但是放在HTML中的任何PHP都只显示为注释,而不起作用。有人有想法吗?


<!----> 是 HTML 的注释标记。您正在注释掉生成的 HTML。 - Justin Wood
抱歉,我应该提到,我注释掉了td元素,因为我认为在尝试访问$match数组时它会导致错误。我想知道为什么HTML中的所有echo或任何PHP都不起作用。它们都被注释掉了。 - Leveticus
你的 PHP 日志里有错误吗? - Justin Wood
是的,唯一出现的问题是在页面初始加载时未定义“关键字”索引。在我提交一个从未再次出现的文本值之后。 - Leveticus
你尝试使用建议下方的 <?php 代替 <? 了吗? - bfavaretto
我将short_open_tag翻转为"On",看起来它正在工作。使用<?php而不是<?也可以起作用。 - Leveticus
2个回答

4

这就是问题所在。短标签中的代码现在可以工作了。一旦将此标志设置为“On”。 - Leveticus
@Leveticus 考虑不要使用短标签... 如果你现在将这段代码移动到另一个系统,除非你再次更新配置,否则它很可能会再次出现问题。 - Jasper
我更改了标签,不再使用短的开头。我注意到你下面针对bzupnick的评论并进行了更改。感谢你的提示。如果我有足够的声望,我会给你点赞的。 - Leveticus

1
尝试使用<?php来开始你的PHP代码块,而不是<?......这是代码块之间的区别。

1
<?=是开始PHP的简短语法,可代替<?php echo - Justin Wood
1
@bzupnick 不,它在许多环境中都被关闭了,我的理解是始终使用 <?php 是最佳实践。 - Jasper
@JustinWood 这并不是很好。不建议使用短标签,因为你的代码可能会在某些平台上出现问题,这些平台没有在他们的php.ini中启用它。 - Mark
@Marcel 我并不反对这一点。我只是在说这不是他的代码被“注释”的原因。这更适合于评论,而不是答案。 - Justin Wood
@JustinWood 这可能不能回答所有问题,我试图回答为什么后续的 PHP 代码块无法正确解析的原因。 - Jasper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接