PHP代码显示在用户的浏览器中

时间:2012-08-27 06:31:40

标签: php

我有一个像这样的PHP脚本:

<?php
$confirmationCode = trim($_GET['confcode']);
$_SERVER['REMOTE_ADDR'] = 'xxx.xxx.xxx.xxx';
$emailLogId = 1;
if ($_SERVER['REMOTE_ADDR']=='xxx.xxx.xxx.xxx') {
//   print '<pre>' .'xxxxx' . $emailLogId . '###';  //exit ;    
}
if( is_numeric($emailLogId)) {
if ($_SERVER['REMOTE_ADDR']=='xxx.xxx.xxx.xxx') {
// print '<pre>yyy' . $_GET['emaillog_id'] . 'yyyxxxxxx ' . $emailLogId;  print_r             ($row) ; exit ;   
}
//$osDB->query('UPDATE ! SET clicktime=? WHERE id=?', array('email_logs', time(),   $emailLogId));
} else {
if ($_SERVER['REMOTE_ADDR']=='xxx.xxx.xxx.xxx') {
//   print '<pre>zzz' . $_GET['emaillog_id'] . 'yyyxxxxxx ' . $emailLogId;  print_r ($row) ; exit ;     
}
}
?>

它在我的服务器上运行。实际上有些人抱怨他们在浏览器上看到了这个脚本的源代码(粘贴在下面),他们发给我这个问题的快照:

 ' .'xxxxx' . $emailLogId . '###';  //exit ;    
}
 if( is_numeric($emailLogId)) {
 if ($_SERVER['REMOTE_ADDR']=='xxx.xxx.xxx.xxx') {
// print '<pre>yyy' . $_GET['emaillog_id'] . 'yyyxxxxxx ' . $emailLogId;  print_r ($row) ; exit ;   
}
//$osDB->query('UPDATE ! SET clicktime=? WHERE id=?', array('email_logs', time(), $emailLogId));
 } else {
if ($_SERVER['REMOTE_ADDR']=='xxx.xxx.xxx.xxx') {
 //  print '<pre>zzz' . $_GET['emaillog_id'] . 'yyyxxxxxx ' . $emailLogId;  print_r ($row) ; exit ;     
}
 }
?>

其实我真的很困惑,因为我无法重现这个问题,但3-4人抱怨同样的事情。

你知道这是什么问题吗?

2 个答案:

答案 0 :(得分:2)

是的,同样的事情也发生在我身上。

2件事:

Apache配置。

确保php引擎已开启。如果您无法访问您的apache配置文件,请在.htaccess中添加:

php_flag engine on

。的 CDN。

如果您使用的是任何云分发网络,现在是时候要求他们清除现有缓存并重新加载新缓存。

只有在apache配置出错的情况下,浏览器才会显示PHP源代码。

希望有所帮助。

编辑:

在阅读了萨宾的评论之后,我再次看了一下代码。

问题是,他已将值分配给$_SERVER['REMOTE_ADDR'](第3行)

这是应该如何:

<?php
$confirmationCode = trim($_GET['confcode']);
$ip = 'xxx.xxx.xxx.xxx';
$emailLogId = 1;

//Whatever conditions.
if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') {
//   print '<pre>' .'xxxxx' . $emailLogId . '###';  exit ;    
}
if( is_numeric($emailLogId)) {
if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') {
// print '<pre>yyy' . $_GET['emaillog_id'] . 'yyyxxxxxx ' . $emailLogId;  print_r             ($row) ; exit ;   
}
//$osDB->query('UPDATE ! SET clicktime=? WHERE id=?', array('email_logs', time(),   $emailLogId));
} else {
if ($_SERVER['REMOTE_ADDR']=='xxx.xxx.xxx.xxx') {
//   print '<pre>zzz' . $_GET['emaillog_id'] . 'yyyxxxxxx ' . $emailLogId;  print_r ($row) ; exit ;     
}
}
?>

然而,回应源代码不能归因于此。我会请你填写完整的文件,这样我们就可以看到你是否错过了一个结束的单引号!

答案 1 :(得分:1)

听起来PHP根本不起作用。您没有看到第一部分的唯一原因是因为您的浏览器正在将其解析为HTML标记。

请尝试打印phpinfo()一次,

请查看以下链接,了解更多详情

PHP code displayed in browser