2014-03-04 174 views
-2

我有一个PHP网站的移动版本和谷歌广告显示在那里。我已经分别从我的客户端收到了页眉和页脚的谷歌代码,并且它们并不总是显示。我收到了很多警告,在寻找这样的自动错误报告:谷歌广告的错误

fopen(http://pagead2.googlesyndication.com/pagead/ads?...): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found 

在URL中的问号后面还有一些参数与私人信息,所以我决定写...而不是他们。我已经要求我的客户重新生成代码,他已经这样做了,我已经为页眉和页脚粘贴了新代码,但是,当我们认为错误消失后,我们决定在一天之内调用它,并在16小时后已收到4352个错误报告,其中95%是谷歌广告,错误是相同的,即:未能打开流。我想知道为什么我们有时会看到广告,为什么他们没有在其他情况下出现。问题:当你们有这个错误时,有什么步骤摆脱它们并展示广告? (当然,我可以拿出广告,但我的客户会不高兴,大声笑)

编辑: 这是代码的一部分(机密信息被取出来,并取而代之的是'秘密')。我希望现在这个问题更有意义。

$GLOBALS['google']['client']='secret'; 
$GLOBALS['google']['https']=read_global('HTTPS'); 
$GLOBALS['google']['ip']=read_global('REMOTE_ADDR'); 
$GLOBALS['google']['markup']='xhtml'; 
$GLOBALS['google']['output']='xhtml'; 
$GLOBALS['google']['ref']=read_global('HTTP_REFERER'); 
$GLOBALS['google']['slotname']='secret'; 
$GLOBALS['google']['url']=read_global('HTTP_HOST') . read_global('REQUEST_URI'); 
$GLOBALS['google']['useragent']=read_global('HTTP_USER_AGENT'); 
+2

当我的问题被低估时,我想阅读倒票的原因,所以我可以用我的问题重新翻译一下以符合预期。如果配合评论告诉我这个问题出了什么问题,则可能会有所帮助。如果你认为这是题外话,那么我可以向你保证,这是一个编程问题,因为这是一个由我未知的东西引起的错误。我试图获得信息来解决问题。谢谢。 –

+0

我不明白您使用哪个系统加载广告......将它们作为include()不会更容易吗? – 2014-03-04 14:51:09

+0

@SakhalTurkaystan,谢谢你的提问。我有两个文件,一个标题和一个页脚,它们包含在需要包含的地方。我没有发布确切的错误,因为它提供了关于项目和我的客户的AdSense用户的信息,这是保密信息,所以我已经包含了错误的性质,但我明白了你的观点。我将编辑问题以提供更多信息,但我不知道使用的是什么系统,因为我不是Google AdSense的专家。 –

回答

1

既然你提到的远程服务器上的错误,标识尝试测试服务器尽可能。

我试图放弃我的端点,其中包括我的ISP,我的浏览器,防火墙和代理的问题。之后,我会尝试测试另一个端点。

首先,试图寻找在错误日志的模式,试图找到,如果它发生,因为在很短的时间很多方面,从s具体位置,旧的浏览器,浏览器的特定版本,等

请求

在很短的时间内

此连接太多不应该是谷歌服务器出现问题,但它可能表明一个奇怪的现象,有些要求可能不会得到正常的或完整的HTTP响应。你不能真的测试这个,但你可以尝试检测它并做出反应。

旧的浏览器 - 浏览器

的具体版本可以在浏览器中的错误是发送一个不完整的请求,这巧合正好是一个无效并指向一个不存在的资源。可能是浏览器有一个缓存缺陷,正在发送404响应,甚至没有检查资源。通过至少使用两种不同的浏览器和私有会话来测试这种情况,这样就可以放弃浏览器问题,缓存和Cookie。 (这只适用于JS)。

请求起源于一个特定的位置

该地点可能有连接问题,或者有缺陷的ISP,或过分热心的缓存服务,或有问题的代理。您无法对此进行测试,但您可以尝试检测并做出反应,例如不会向这些请求发送广告。

防火墙 - 代理

是您的客户的网站名称类似禁止/封锁吗?如果是这样,并且如果在服务器上偶然发生错字,则每次请求通过时都可能会受到影响。检查被禁止的网站列表。您的客户端服务器上

超载

是您的客户的网站托管在可能被过度使用一个共享的主机或主机?如果是这样,可能会发生奇怪的行为,例如与命令的执行时间限制相关,或者由于它建立了太多的连接并且有些必须退出,导致一些连接挂起并等待回答。这很难测试,但您可以检查服务器负载,进行反向IP检查,看看是否有许多客户端共享相同的IP,执行cURL请求并检查平均时间。

时间限制 - 重定向

上有一个整体连接过程的不同时间限制。您可以检查是否有问题,至少从您的系统作为用户和客户端的服务器。使用cURL会话创建一个PHP文件(每次重新使用连接并重新使用连接),执行多次,然后检查响应时间和重定向。检查是否始终从服务中获得正确的响应,如果时间过长,是否存在重定向,是否每次都有重定向或只有一些时间,则测试不同的时间。

EDIT(从阿帕德·拉约什)

广告尺寸不匹配

的代码可能是适用于给定大小,而你可能会使用不同的大小。您应该尝试从客户那里获取有关该问题的信息。

设置不匹配

这是上面的一个更一般的情况,但我独立地描述广告尺寸的问题,因为广告尺寸不匹配常见的现象,这可能是真正的问题。另外,您应该检查其他重要设置是否匹配,是否存在处理不当的问题。编辑

在我看来

END,这应该给你你正在寻找的答案,如果没有,你可以提供这方面的疑问,可以为别人或使用有用的详细资料在Google上询问/报告的结果。

+0

你的答案非常好,几乎完美。我添加了两个其他的观点,这些观点在原始答案中被忽略了。这个问题还没有解决,但我没有要求解决方案,我只是要求最佳思维过程和最佳实践来解决这类问题,而你的回答正指向了正确的方向。因此,我赞成并接受你的答案,并希望100分的奖励将达到你的用户。 –

+0

@LajosArpad:不,它从来没有达到过我,但仍然很高兴你解决了这个问题,或者至少你是在做这件事。 – PatomaS

+0

哦,拍摄,我为这个问题牺牲了100分,但没有达到你。 –

0
fopen was part of the google code and we are not allowed to modify that, so I have to leave it at that even if it is strange 

这是一个double bind。摆脱它。如果它不起作用,你就无法使它工作。

我发现这个nearly 7 (!) years old post抱怨你的打开电话不工作“在他们的最后”。

+0

这不是一个答案。 –

0

如果有时确实的fopen为您和有些时候的作品没有, 你可以使用空调的动作在你的代码是这样的:

 <?php 

      // Turn off all error reporting 
      error_reporting(0); 

      $url = 'http://pagead2.googlesyndication.com/pagead/ads'; //put your real url here 
      $fp = fopen($url, 'r'); 

      // The variable $http_response_header will automagically be generated (array) 
      /* you may explore the rsponse by un-commenting the following 
      foreach($http_response_header as $key=>$value){ 
       echo $key.'='.$value.'<br>'; 
      } 
      */ 

      $response_code = @explode(' ', $http_response_header[0]); 
      $response_code = (int)$response_code[1]; 

      if($return_code==200){ 
       // show the ad part 
       // echo 'OK'; 
      } else { 
       // whatever 
       // echo 'OH.BOY'; 
      } 

     ?> 

另一种方式去圆,这将是使用javascript代替AdSense代码。 您的客户可能会为您提供包含在页眉/页脚等内的JavaScript部分。 它通常是这样的:

<script type="text/javascript"> 
    <!-- google_ad_client = "pub-UNIQUE_NUMBER"; 
    /* 300x250, created dd/mm/yy */ 
    google_ad_slot = "11111111"; 
    google_ad_width = 300; 
    google_ad_height = 250; 
    //--> 
    </script> 
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 
    </script> 
+0

Javascript在这种情况下不是一个选项,这段代码必须在服务器端。我打电话给fopen函数时发生问题,而不是之后。我可以隐藏问题,但我希望广告能够毫无问题地展示。 –

+0

如果fopen没有返回代码200,则不能显示任何内容。使用上面的PHP代码来检查你从fopen调用中获得的代码。 –