PHP 5.6使用Nginx和FastCGI解析错误


PHP 5.6 parse error using Nginx and FastCGI

我使用的是NGINX和PHP 5.6,升级后似乎无法调试此错误。我的错误日志显示:

2015/12/29 11:57:56[error]928#0:20485 FastCGI在stderr中发送:"PHP消息:PHP分析错误:语法错误,第81行/var/www/magento/htdocs/pub/dener/wp-content/themes/dener/index.PHP中出现意外的‘}’",同时从上游读取响应标头,客户端:83.110.226.45,服务器:sss.uat...com,请求:"GET/bein/HTTP/1.1",上游:"fastcgi://unix:/var/run/php-fpm/sss.uat.*.com.sock:",主机:sss.uat.***..com"

这是我的PHP

<?
if($sss_article_featuretitle==""){?>
    <?php echo mb_strimwidth(the_title(), 0, 40, '...'); ?>
<?php } else { //line 81
    echo $sss_article_featuretitle;
}
?>

PHP 5.6文档和一些搜索并没有说明为什么这个查询没有过时。

删除所有多余的打开/关闭标签:

<?php
if ($sss_article_featuretitle=="") {
    echo mb_strimwidth(the_title(), 0, 40, '...');
} else {
    echo $sss_article_featuretitle;
}
?>

更新:试着这样改变:

http://php.net/manual/en/language.basic-syntax.phpmode.php

<?php if ($sss_article_featuretitle==""): ?>
  <?php echo mb_strimwidth(the_title(), 0, 40, '...'); ?>
<?php else: ?>
  <?php  echo $sss_article_featuretitle; ?>
<?php endif; ?>

此外,请确保不要使用短的打开标记<?,这不是一个好的做法,并且可能在PHP设置中被禁用,因此应该由PHP.ini文件中的short_open_tag指令打开。

http://php.net/manual/en/language.basic-syntax.phptags.php

检查是否已启用short_open_tags。看起来PHP的第一部分是} else {。我认为它可能在PHP 5.6中被删除了,或者至少被弃用了。

你能把phpinfo上传到什么地方吗?