Ошибки с гугл рекламой

У меня есть сайт PHP с мобильной версией, и там отображаются объявления Google. Я получил код Google от своего клиента для верхнего и нижнего колонтитула соответственно, и они не всегда отображаются. Я получаю много предупреждений в автоматических отчетах об ошибках, которые выглядят так:

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

После знака вопроса в URL идут параметры с приватной информацией, поэтому я решил вместо них написать .... Я попросил своего клиента восстановить коды, и он это сделал, я вставил новый код для верхнего и нижнего колонтитула, однако, когда мы подумали, что ошибка исчезла, мы решили положить этому конец, и через 16 часов я получили 4352 отчета об ошибках, 95% из них были с рекламой Google, ошибка была одна и та же, а именно: не удалось открыть поток. Интересно, почему иногда мы видим рекламу, а в других случаях она не появляется. Вопрос: Когда у вас возникают эти ошибки, как избавиться от них и показать рекламу? (Конечно, я могу убрать рекламу, но тогда мой клиент будет недоволен, LOL)

РЕДАКТИРОВАТЬ: это часть кода (конфиденциальная информация была удалена из него и заменена на «секрет»). Я надеюсь, что теперь вопрос имеет больше смысла.

$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');

person Lajos Arpad    schedule 04.03.2014    source источник
comment
Когда за мой вопрос проголосовали против, я хотел бы прочитать причину отрицательного голосования, чтобы я мог перефразировать свой вопрос, чтобы он соответствовал ожиданиям. Голоса против могут быть полезны, если они сопровождаются комментарием, говорящим мне, что не так с вопросом. Если вы думаете, что это не по теме, то я могу заверить вас, что это вопрос программирования, так как это ошибка, вызванная чем-то еще неизвестным для меня. Я ищу информацию для решения проблемы. Спасибо.   -  person Lajos Arpad    schedule 04.03.2014
comment
Я не понимаю, какую систему вы используете для загрузки рекламы... не проще ли было бы поместить их как include()?   -  person    schedule 04.03.2014
comment
@SakhalTurkaystan, спасибо за вопрос. У меня есть два файла, верхний и нижний колонтитулы, и они включены туда, где они необходимы. Я не указал точную ошибку, так как она дает информацию как о проекте, так и о пользователе AdSense моего клиента, это конфиденциальная информация, поэтому я включил характер ошибки, но я понял вашу точку зрения. Я отредактирую вопрос, чтобы дать вам больше информации, но я не знаю, какая система используется, так как я не специалист по Google AdSense.   -  person Lajos Arpad    schedule 04.03.2014
comment
Я использую простой метод include(), чтобы разместить их на своих страницах. Пользуюсь только стандартными. Я не знаю те, которые для мобильных. Но fopen() — это функция для загрузки файлов, и это мне кажется странным.   -  person    schedule 04.03.2014
comment
fopen был частью кода Google, и нам не разрешено его изменять, поэтому я должен оставить это, даже если это странно.   -  person Lajos Arpad    schedule 04.03.2014
comment
Я понимаю. Я узнаю URL... URL моих объявлений имеет вид ‹script type=text/javascript src=pagead2.googlesyndication.com/pagead/show_ads.js› ‹/script›   -  person    schedule 04.03.2014
comment
Он загружается через PHP, и в нем нет show_ads.js, но я действительно не знаю внутренних механизмов кода Google, так что вы можете быть правы.   -  person Lajos Arpad    schedule 04.03.2014
comment
Во-первых, все значения, отправленные в ваш массив GLOBALS, во всех случаях содержат реальные данные? Вы регистрируете отправленные значения? Возможно, проверив, какие значения вы отправляете, когда он возвращает вам ошибку, вы можете понять, что происходит.   -  person Federico J.    schedule 08.03.2014
comment
Весь код прислал клиент и у меня нет доступа к его аккаунту AdSense, поэтому я не могу толком проверить валидность глобалов. Все, что я могу гарантировать, это то, что глобальные переменные взяты и реализованы именно из сообщения, отправленного клиентом, в котором говорится, что они верны. Сложная ситуация, так как я действительно не могу попросить его предоставить мне его конфиденциальные данные, которые используются для настройки его учетной записи AdSense. Все, что я вижу, это то, что реклама иногда появляется, а иногда нет, используя один и тот же код с одними и теми же глобальными переменными.   -  person Lajos Arpad    schedule 09.03.2014
comment
Если клиент скрывает информацию, необходимую для поиска проблемы, то я бы сказал, что главная проблема в самом клиенте. Тем не менее, одним из решений может быть использование другой учетной записи AdSense для тестирования.   -  person Nico    schedule 09.03.2014
comment
Второе заявление @Nico. Эта информация необходима для отладки проблемы. Также без сообщений об ошибках мы не можем найти ни хода проблемы, ни вы. Используйте другую учетную запись и опубликуйте несколько сообщений об ошибках, пожалуйста.   -  person func0der    schedule 10.03.2014
comment
В моем посте вы можете найти сообщение об ошибке не удалось открыть поток: Ошибка HTTP-запроса! HTTP/1.1 404 Не найден. Поэтому он пытается достичь чего-то, чего не существует. Однако я не знаю, почему он пытается достичь этого чего-то. Это связано с тем, что размер объявления не соответствует ожидаемому размеру кода? Или что-то другое? Мой вопрос не требовал решения. Он просил мыслительный процесс для такого рода ошибок с объявлениями Google, который должен привести к решению. Я знаю, где проявляется ошибка, но не знаю, как решить эту ошибку.   -  person Lajos Arpad    schedule 10.03.2014
comment
Вы пытались использовать Curl? php curl должно работать   -  person Khodour.F    schedule 12.03.2014
comment
вы всегда получаете 404 от запроса fopen(...)? потому что вы можете использовать stackoverflow.com/questions/8018693/ И не показывать верхний/нижний колонтитул, если запрос fopen по какой-то причине не работает.   -  person Gal Samuel    schedule 12.03.2014
comment
@GalSamuel не всегда, иногда реклама появляется, я не знаю, почему она появляется, когда появляется, а почему нет, когда нет.   -  person Lajos Arpad    schedule 13.03.2014
comment
Есть ли у вас какие-либо другие ошибки в ваших журналах во время каждой из этих ошибок fopen?   -  person PatomaS    schedule 14.03.2014
comment
Нет, это единственные ошибки, и они случаются время от времени. Я не вижу причины, почему?   -  person Lajos Arpad    schedule 16.03.2014


Ответы (3)


Поскольку упомянутые вами ошибки происходят на удаленном сервере, я постараюсь как можно больше протестировать этот сервер.

Я бы попытался устранить проблему с моей конечной точкой, которая включает в себя моего интернет-провайдера, мой браузер, брандмауэр и прокси-сервер. После этого я попытался бы проверить другую конечную точку.

Во-первых, попробуйте найти закономерность в журналах ошибок, попытайтесь выяснить, происходит ли это из-за большого количества подключений за короткое время, запросов из определенного местоположения, старого браузера, определенной версии браузера и т. д.

Слишком много подключений за короткий период времени

Это не должно быть проблемой для серверов Google, но может указывать на странную ситуацию, и некоторые запросы могут не получать нормальный или полный ответ HTTP. Вы не можете проверить это на самом деле, но вы можете попытаться обнаружить это и отреагировать.

Старый браузер — определенная версия браузера

Возможно, ошибка в браузере отправляет неполный запрос, который по стечению обстоятельств оказывается недействительным и указывает на несуществующий ресурс. Возможно, браузер имеет дефект кеша и отправляет ответ 404, даже не проверяя ресурс. Вы проверяете это, используя как минимум два разных браузера и приватный сеанс, таким образом вы отбрасываете проблемы с браузером, кэшированием и файлами cookie. (Это работает только для JS).

Запросы исходят из определенного местоположения

В этом месте могут быть проблемы с подключением, или неисправный интернет-провайдер, или слишком усердная служба кэширования, или проблемный прокси-сервер. Вы не можете это проверить, но вы можете попытаться обнаружить это и отреагировать, например, не отправляя рекламу на эти запросы.

Брандмауэр – прокси-сервер

Название сайта вашего клиента похоже на запрещенный/заблокированный? Если это так, и если по совпадению на сервере произошла опечатка, вы можете быть затронуты каждый раз, когда запрос проходит. Проверьте списки запрещенных сайтов.

Перегрузка на клиентском сервере

Размещен ли сайт вашего клиента на виртуальном хостинге или на хостинге, который может быть перегружен? Если это так, может произойти странное поведение, например, связанное с ограничением времени выполнения команды или из-за того, что она устанавливает слишком много соединений, и некоторые из них должны быть отключены, оставляя какое-то соединение просто висящим и ожидающим ответа. Это сложно проверить, но вы можете проверить загрузку сервера, выполнить обратную проверку IP-адреса, чтобы увидеть, есть ли много клиентов, использующих один и тот же IP-адрес, выполнить запросы cURL и проверить среднее время.

Ограничение по времени — перенаправления

Существуют различные ограничения по времени на весь процесс подключения. Вы можете проверить, есть ли проблема с этим, по крайней мере, из вашей системы как пользователь и с сервера вашего клиента. Создайте файл PHP с сеансом cURL (каждый раз новое соединение и повторное использование соединения), выполните его много раз и проверьте время отклика и перенаправления. Проверьте, всегда ли вы получаете правильный ответ от службы, если это занимает слишком много времени, есть ли перенаправления, если перенаправления происходят каждый раз или только несколько раз, проверьте другое время.

РЕДАКТИРОВАТЬ (от Лайоша Арпада)

Несоответствие размера объявления

Код может быть применим для данного размера, в то время как вы можете использовать другой размер. Вы должны попытаться получить информацию от вашего клиента о проблеме.

Несоответствие настроек

Это более общий случай для вышеизложенного, но проблему размера рекламы я описал отдельно, потому что часто происходит несоответствие размеров рекламы, и это может быть реальной проблемой. Также следует проверить, совпадают ли другие важные настройки, нет ли проблем с неправильным обращением с чем-либо.

КОНЕЦ РЕДАКТИРОВАНИЯ

На мой взгляд, это должно дать вам ответ, который вы ищете, и если это не так, вы можете предоставить более подробную информацию по этому вопросу, которая может быть полезна для кого-то еще, или использовать результаты, чтобы спросить / сообщить в Google.

person PatomaS    schedule 14.03.2014
comment
Ваш ответ превосходен, почти идеален. Я добавил два других пункта, которые не были включены в исходный ответ. Проблема еще не решена, но я не спрашивал о решении, я только просил об оптимальном процессе мышления и лучших практиках для решения такого рода проблем, и ваш ответ указывал мне правильное направление. Поэтому я голосую и принимаю ваш ответ и надеюсь, что награда в 100 баллов дойдет до вашего пользователя. - person Lajos Arpad; 16.03.2014
comment
@LajosArpad: Нет, до меня так и не дошло, но я все равно рад, что вы решили проблему или, по крайней мере, находитесь на пути к ее решению. - person PatomaS; 25.03.2014
comment
О блин, я пожертвовал 100 баллами за этот вопрос и до вас он не дошел. - person Lajos Arpad; 25.03.2014

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

Это двойная привязка. Избавиться от этого. Если это не работает, вы не можете заставить его работать.

Я нашел этот пост почти 7 (!) лет с жалобами на ваш вызов fopen не работает «с их стороны».

person Urs    schedule 13.03.2014
comment
Это не ответ. - person Lajos Arpad; 16.03.2014

Если иногда 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>
person Gal Samuel    schedule 13.03.2014
comment
Javascript в этом случае не вариант, этот код должен быть на стороне сервера. Проблема возникает, когда я вызываю функцию fopen, а не потом. Я могу скрыть проблему, но я хочу, чтобы реклама показывалась без проблем. - person Lajos Arpad; 16.03.2014
comment
если fopen не возвращает код 200, вы ничего не можете показать. используйте код PHP выше, чтобы проверить код, который вы получаете от вызова fopen. - person Gal Samuel; 17.03.2014