Neo Inspiration

  • Search

    • About Me

      • inspi 改め
        jakk@webアーキテクト(自称)
        php,javascript,seoなど
        得意技は extract();

  • Categories

  • Ranking

  • Comments

  • Others


  • Archive for the ‘後で検証’ Category

    一度PCサイトと認識されたドメインはモバイルサイトになれない?

    水曜日, 5 月 28th, 2008

    モバイルサイトの実験をしてる過程でこんな状況になったのでメモ。

    仕込み

    携帯用CMSフレームワークを作ったので、
    それを

    ・テストサイト1:既存にあるドメイン(被リンク自前サイト100本くらい&PCのGoogleでキャッシュされてる)
    ・テストサイト2:新規取得ドメイン(被リンク0)

    にのせて、コンテンツボリュームもほぼ同じに調整した状態で、
    Google Web Masters Tool に ケータイ/cHTMLで登録。

    2週間での経過

    テストサイト1のクロール状況
    ⇒モバイルクロールすらされず。
     もちろんキャッシュもされず。

    ものの見事に初日にきた通常BOTしかきていなくて、
    かつクロールしていったのにPC版Googleでみてもキャッシュが変更されていない
    (これはモバイルコンテンツだからコンテンツボリュームが少ないから?)

    で以下履歴

    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.70.214,crawl-66-249-70-214.googlebot.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.70.214,crawl-66-249-70-214.googlebot.com
    Google-Sitemaps/1.0,66.249.85.88,ff-in-f88.google.com
    Google-Sitemaps/1.0,66.249.85.88,ff-in-f88.google.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.70.214,crawl-66-249-70-214.googlebot.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com



    以下ずっとこれ。

    テストサイト2のクロール状況
    ⇒モバイルクロールされた。それもすぐに。
     キャッシュは1ページだけだけどこれはコンテンツボリュームの問題かな。

    サイトマップ突っ込んで2日でにいきなりモバイルクロール開始。
    初日は通常のクローラ、3日後にモバイルクローラがきてページをガンガンクロールしていく。
    (ちなみにGoogleのサイトマップ しか ないのになぜかこんなとこからもアクセスがくるという219.118.188.122)

    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.73.20,crawl-66-249-73-20.googlebot.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.70.214,crawl-66-249-70-214.googlebot.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com
    Nokia6820/2.0 (4.83) Profile/MIDP-1.0 Configuration/CLDC-1.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com
    Nokia6820/2.0 (4.83) Profile/MIDP-1.0 Configuration/CLDC-1.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com

    こっから携帯BOTで全クロール


    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com
    Google-Sitemaps/1.0,66.249.85.88,ff-in-f88.google.com
    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),66.249.67.236,crawl-66-249-67-236.googlebot.com

    結論

    ってことで2週間たっても音沙汰ないあたり、
    一度PCサイトと認識されたドメインはモバイルサイトとして
    認識されるのにすごい時間がかかるってことですかね。

    つかまだ認識すらされてないので、
    どのくらいで認識されるのかもおいおい検証ってとこですね。

    MySQL server has gone awayで吹いた

    火曜日, 5 月 27th, 2008

    出社してサイトチェックしようとしたら繋がらない。

    ちょうどタイミングよくメールでDBのパス(同じサーバの別DB)
    を変更したとか言うアナウンスがきたので
    それ関係するのかなと調査開始。

    原因がまずわからん

    パスはどうも大丈夫なよう(当たり前だけど)

    で 繋がらないのはなぜか。。DNS?
    いやでもDB接続しないただのテキストファイルとか開けるし。。
    と 30分くらいうだうだ悩みつつF5押しまくってたら
    突然繋がった。

    が。。

    真っ白。

    管理画面にアクセスしてみると
    「MySQL server has gone away」
    の文字が。

    どっかいったってどういうことだwwwwwwwww

    DBを直すか。。

    とりあえずgoogle先生に聞こうってことで
    聞いてみると どうやらDBがぶっ壊れてるかアクセス過多か
    クエリーがでかすぎだと出るらしい。

    ・アクセス過多はない(ローンチして1週間くらいのサイトだし)
    ・クエリーも最適化はある程度してある(と信じたい)
    ・まさかぶっ壊れた??

    ってことで直でDBにつないで SELECTしてみる。
    ⇒普通にOK

    CHECK TABLE ぽぃ。
    ⇒「Table is already up to date」しかでない。
    #「Table is Table is marked as crashed」って出れば話ははやかったのに。
    #SELECTもUPDATEもできるのに Table is marked as crashed なんてでないか。。

    だがサイトにアクセスしてみるとやっぱDbに繋がらない。

    ええいめんどくせー ってことで repair table 発動。



    直った。

    結局

    「Table is marked as crashed」
    以外でもぶっ壊れてるってことがあるんですね。

    php の file_get_contents で true も false も返ってこない

    木曜日, 4 月 24th, 2008

    特定のURLでfile_get_contents で true も false も返ってこない現象があって
    困っていたのでその対策メモ

    現象

    単純に

    $html = file_get_contents($url);

    ってやるとタイムアウトすることがあって、
    それは
    ini_set(’default_socket_timeout’,3);
    ってやってもダメなパターン。

    問題はタイムアウトじゃない?

    file_get_contentsがだめでもこれ以上切り分けできないので、
    処理を1個づつかくために fsockopen 使ってみたけどやっぱりだめ。

    fsockopen がダメな時のソースはこんなかんじ。

    $fp = fsockopen($server,80,$errno,$errstr,$timeout);
    if($fp){
      while(!feof($fp)){
        $data .= fread($fp, 1024);
      }
    }
    echo $data;

    で こっから1こづつ切り分けていくと
    どうも

    while(!feof($fp)){
      $data .= fread($fp,1024);
    }

    ここが無限ループになってるらしい。

    file_get_contentsのCソースまでは追いきれないので
    (Cソース探したけどどこにあるかわからなくて)
    カンですが、file_get_contents も同じ感じの処理をしていて、
    feof のとこで詰まってるんじゃないかと。
    だとしたら、ソケットの問題じゃないので、default_socket_timeout を指定しても意味なかったってわけです。

    こうやって解決

    問題が無限ループだったので php feof で検索したら・・・

    関連検索: php feof 無限ループ, php feof fgets

    同じ問題で詰まった人がいっぱいいるw!

    で見ていくと

    http://jp.php.net/feof
    無効なファイルポインタを渡した場合、無限ループに陥ることがあります。 なぜなら EOF が TRUE を返すことができないからです。

    ということらしい。

    つまり feof が true を返さないので、feof で判定するのはダメなわけだ。
    おそらく何らかの形でEOFが受信できない場合も trueが返らないんだろう。。
    なので feof じゃなくて fread が成功したかで判定するように変更

    $fp = fsockopen($server,80,$errno,$errstr,$timeout);
    if($fp){
    while($eof_check= fread($fp,1024)){
      $data .= $eof_check;
    }
    }
    echo $data;

    したら うまくいった!

    ってことで

    結局こんな感じの関数作って対処しました。

    function ex_file_get_contents($server=”,$timeout=10){
      $data = ”;
      if(isset($server)){
        $fp = @fsockopen($server, 80,$errno, $errstr, $timeout);
        if($fp){
          while($eof_check=@fread($fp, 1024)){
            $data .= $eof_check;
          }
          @fclose($fp);
        }else{
          return false;
        }
      }else{
        return false;
      }
      return $data;
    }

    2008/10/13 06:11:52