php
2017-07-16 52 views 0 likes 
0

我想跟踪哪些网站正在使用我的主题。我添加了一个代码到我的主题是<img src="http://example.com/callback.php">和我callback.php文件内容如果文本文件中存在特定文本

<?php 
    if(!$_SERVER['HTTP_REFERER']){ 
     echo "No direct access!"; 
    } else { 
     $logfile= 'log.txt'; 
     if(is_writable($logfile)) { 
      $referer = parse_url($_SERVER['HTTP_REFERER']); 
      $referer = $referer['host']; 
      $fp = fopen($logfile, "a"); 
      fwrite($fp, $referer); 
      fwrite($fp, "\n"); 
      fclose($fp); 
     } else { 
      echo "log.txt is not writable"; 
     } 
    } 
?> 

但它写入同一个域中的每个页面加载。我想先检查域名,如果域名在文本文件中,则不应该添加它。

+1

'strpos'是你需要的。 –

+0

我试过这个'$ check = strpos($ logfile,$ referer);如果($ check === false){fff($ fp,$ referer); fwrite($ fp,“\ n”); fclose($ fp); }' 但它没有工作,我做错了吗? – Solhan

+0

'strpos()'的问题是以下情况:1)来自'example.com'的引用,2)来自'example.co'的引用。它永远不会将'example.co'写入日志。 “ple.com”(等等)也不会。 – localheinz

回答

1

试试这个代码:

<?php 
    if(!$_SERVER['HTTP_REFERER']){ 
     echo "No direct access!"; 
     exit(); 
    } else { 
     $logfile= 'log.txt'; 
     if(is_writable($logfile)) { 
      $referer = parse_url($_SERVER['HTTP_REFERER']); 
      $referer = $referer['host']; 
      $fp = fopen($logfile, "a+"); 
      $flag=false; 
      while(!feof($fp)){ 
       if(trim(fgets($fp)) === trim($referer)) 
       $flag=true; 
      } 
      if(!$flag){ 
       fwrite($fp, $referer); 
       fwrite($fp, "\r\n"); 
      } 
      fclose($fp); 
     } else { 
      echo "log.txt is not writable"; 
      exit(); 
     } 
    } 
?> 
+0

谢谢你回答拉希德! strtpos()会导致一些问题,这是@localheinz在第一个答案中发表的评论?我的意思是你的代码和localheinz的代码有区别吗? – Solhan

+0

现在检查你的问题已经解决。 – Rashid

+0

再次感谢你拉希德。你的代码localheinz的代码有没有区别?或者它只是不同的逻辑? – Solhan

1

试试这个:

<?php 

if (!$_SERVER['HTTP_REFERER']) { 
    echo "No direct access!"; 

    exit(); 
} 

$logfile= 'log.txt'; 

if (!is_writable($logfile)) { 
    echo "log.txt is not writable"; 

    exit(); 
} 

$referer = parse_url($_SERVER['HTTP_REFERER']); 
$host = $referer['host']; 

$hosts = file($logfile, FILE_IGNORE_NEW_LINES); 

if (in_array($host, $hosts)) { 
    exit(); 
} 

$handle = fopen($logfile, "a"); 

fwrite($handle, $host); 
fwrite($handle, "\n"); 

fclose($handle); 

仅供参考,请参阅:

+0

非常感谢,它第一次没有工作。代码中有2个括号错误,我修复了它。我还编辑了你的答案代码。 顺便说一句,在你看来,这段代码是否会导致主机效率问题?它可以减缓网站吗? – Solhan

相关问题