2010-02-19 65 views
0

我正在写一个PHP网站,并使用谷歌分析来跟踪网站活动。PHP结合两个负OR条件

我已经编写了一个函数,用于回显可以包含在常用站点页脚中的跟踪代码。

问题是,我不希望它跟踪我们办公室的点击率(我之前在Google Analytics的IP筛选器中得到的结果参差不齐,因此这次选择了对其进行硬编码),然后点击管理页面。

因此,伪代码将是,

IF(PHP_SELF确实包含管理员)OR(IP地址不在办公室) 回声跟踪代码

我写这个实际的方法是:

if (!((substr($_SERVER['PHP_SELF'], 0, 7) == '/admin/') || ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx'))) { 

是最好的方法吗?

我尝试以下,但它没有工作:

if ((substr($_SERVER['PHP_SELF'], 0, 7) != '/admin/') || ($_SERVER['REMOTE_ADDR'] != 'xxx.xxx.xxx.xxx')) { 
+0

我想你可以从谷歌分析管理中排除的IP不会忽略更好。 – chelmertz 2010-02-19 11:46:18

回答

4

De Morgan's laws意味着第二个应该使用&&而不是||

无论哪种方式都很好,基于这样的事实,即没有比较有副作用。

1

因为您想在条件为假时做某些事情(并且不采取其他措施),条件应为负值。比较

// BAD 
if(something) { 
    ??? 
} else { 
    do the job 
} 

// GOOD 
if(not_something) 
    do the job 

所以,第二个选项是要走的路(|| - > & &,因为已经建议)。

除此之外,early exits通常比复杂条件

function echo_counter() { 
    if(is_admin_page) 
     return; 
    if(intranet_ip) 
     return; 
    ...potentially some more conditions... 
    do the job 
}