0

我有一个这样的 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 人都在抱怨同样的事情。

你知道是什么问题吗?

4

2 回答 2

2

是的,类似的事情也发生在我身上。

2件事:

. 阿帕奇配置。

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

php_flag engine on

. CDN。

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

仅当 apache 配置出错时,浏览器才会显示 PHP 源代码。

希望有帮助。

编辑:

在阅读了 Sabin 的评论后,我再次查看了代码。

问题是,他已将值分配给$_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 ;     
}
}
?>

但是,回显源代码不能是由于这个原因。我会要求您输入完整文件,以便我们可以查看您是否缺少单引号!

于 2012-08-27T06:35:58.080 回答
1

听起来PHP根本不起作用。您没有看到第一部分的唯一原因是您的浏览器正在解析它,就好像它是一个 HTML 标记一样。

请尝试打印 phpinfo() 一次,

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

浏览器中显示的 PHP 代码

于 2012-08-27T06:53:40.620 回答