コレやってみたい! - べ、べつにブクマ禁止したいわけじゃないんだからっ!

  • 2007/11/26(月) 23:00:00

日記

19時前に会社出たのに、ちょっぴりスイーツ気取りで
「一駅歩いてみようかな☆」 なんて思ったのが間違いだった。
超☆迷子。結局おうちに着いたのは23時。これはひどい。
洗面台へ向かい、手を洗う。鏡をのぞくと、なぜか涙が流れていた。
きっとつらかったんだと思う。
紅は地図も読めないし話も聞かない女だ。
この前あきやんにそう言ったら 「そんなことないよー」 と言ってくれたけど
これだけは譲れない。だって絶対そうだもん。





はてブを禁止してみたい!

はてなブックマークを禁止する方法 ( Geekなぺーじ さま )


このエントリを見かけたときからあきやんに聞こうと決めていた。
で、昨日聞いた。
まだまだツメが甘い理解だけど、忘れないうちに理解した範囲でメモ。
※最初のタグは全角にしてあります。



1 <?php
2  $agent=$_SERVER['HTTP_USER_AGENT'];
3 if(strncmp('Hatena',$agent,6)==0{
4  header("HTTP/1.0 302 redirect");
5  header("Location:http://www.geekpage.jp/ ");
6 }
7 ?>



知らない単語がいっぱいある。
でも if は昨日やったから分かる。ナイスギーク! >べにぢょ


ここに書かれてる内容を日本語に訳すと、
「はてなが見にきたら http://www.geekpage.jp/ に飛ばせ」って言ってるぽい。ざっくりだけど。
あきやんのありがたいメモがあるのでうpしとこう。


     


これは分かりやすい。
最落ナシ1円〜でどうだろう?ダメだろう。


はてブするときっていうのは、どうやらはてながそのページを見に来てるらしい。
あれが JavaScript だというのは知ってる。
最初ブックマークレットの使い方が分からなくて、JavaScript うんちゃらかんちゃらというのを
アドレスバーに直接コピペしていた。知ってるといってもその程度なんだけど。



コードを解釈する。
2行目は、すごくちゃんと説明してもらった気がするけど忘れた。
あ、いや!ヒントもらえば思い出す!聞いてたって!ちゃんと話聞いてたって!!
泡盛飲みながら聞いてたのが良くなかったか・・・でも大丈夫。頭のどっかにはあるはず。


とりあえずググる。


サーバ変数とはサーバが生成する変数です。
サーバはヘッダやパス・スクリプトの位置などいろいろな情報を持っていますが、
そのサーバの情報にアクセスできる変数だと思って下さい。
「ブラウザ情報」だとか「IPアドレス」だとかもこのサーバ変数で取得できます。
この変数1つで取得できちゃうので、よくある「あなたのお使いのブラウザは○○です」
なんて表示も1行スクリプトで済ませられちゃいます。

参考:サーバ変数について


OH!Yes!!
そだそだ。そういえばそうだった。思い出してきた。
あきやんにサーバ〜ブラウザ間でやり取りしてる情報を見せてもらった。
んで、このへんの記事を思い出して納得した記憶。
当時はなんでバレてるのか全然分からなかったにょ。



コードに戻る。
その情報の中の HTTP_USER_AGENT の情報を見ろ!って指定してる、んだった気がする。
して、それを $agent に代入する、と。


3行目。
もし、ふにゃららが0だったら、って言ってる。
ふにゃららの中身はよく分からない。
どこが分からないか?まず strncmp が分からない。
ググろう。


strncmp - 最初の n 文字についてバイナリセーフな文字列比較を行う

参考:strncmp - Manual



strncmpn は数字を意味してる、って聞いた。



この関数は strcmp() に似ていますが、 各文字列から(最大)文字数(len ) を
比較に使用するところが異なります。



おぉ。記憶と説明がつながった。文字数が関係してるから n が入るのね。
(カッコ)の中を見る。
'Hatena',$agent,6 は、確か $agent の最初の6文字を見ろ、ってこと。
その6文字が Hatena だったら、ってことだよね。
うん。だったらなんなのさ!
あぁ、さっきのサイトに戻ろう。せっかちイクナイ。まだ慌てるような時間じゃない。


返り値
str1 が str2 より小さい場合に < 0、str1 が str2 より大きい場合に > 0 、
等しい場合に 0 を返します。



つまり、6文字目までが Hatena だったら0が返ってくるってことか。
それが超イコールで0と結ばれてるから、3行目を日本語に訳すと
ブラウザがサーバーに送ってきたデータの HTTP_USER_AGENT の部分、
ココの最初の6文字が Hatena だったら if の条件式が成り立つ、という意味。
条件式が成り立ったら { 以下を実行するのが if。そう勉強した。
参考:5日目 もし私が女子高生だったら



4,5行目。
header は関数らしい。


header - 生の HTTP ヘッダを送信する

参考:Header


ぜんぜん関係ないけど、コレ最初見たとき ”一生(いっしょう)のHTTP ヘッダ” かと思って
ちょっとわらたw
一生てなんだよ!すごいウケる。そぐわない。場違いな言葉だ。



また逸れた。
ていうか、header はぶっちゃけよく分からないの。
だからとりあえずいいや。
でも4行目の HTTP/1.0 302 redirect は、リダイレクトしろよ、って言ってるんだと思う。
で、5行目でリダイレクトする場所を指定してるんだと思う。それはガチ。




オーケー!
今日はこのへんでおk。とりあえずやってみる。
サンプル:hateb.php



Σででできるじゃん!!!!!!!!!!!

あ。Geekなぺーじの追記に書いてあった。そっか、できるんだ・・・
いいの。いいの別に。ただ、ちょっとやってみようかなって思っただけだし・・・。





寝よう。





追伸

画像出力の件、コメントくださった方ありがとうございました!
あと、あと、おみくじやってくれた人!すごく嬉しかったですありがとうございます!!
+++++!!

LINEで送る

この記事に対するトラックバック

この記事のトラックバックURL

7日目 ヘッダ情報が見たい!知りたい!晒したい!

e-241 日記 「エントリ書くからねえぇぇー!!」 そう叫んで別れた駅の改札口。 今日は先週行けなかったあきやん宅へけんすうと一緒にパジャマでおジャマ! や、けんすうはちゃんとした格好してたけど、紅はマジでパジャマだった。 正直、暮らす気満々だっ

11?????????????\(^o^)?

e-241 ?? ??????????????\(^o^)? ????????????????????? ????? PHP ??????????????? ?2???????????????????????? ??????????????????? ????

この記事に対するコメント

アルファgeekがあれわれた
アルファgeekはべにぢょをブクマしようとしている
アルファgeekはブックマークレットを呼び出した
ブックマークレットはjavascriptで、「はてブ!はてブ!」と呪文を唱えた
アルファgeekははてブに飛ばされた
アルファgeekははてブに「お兄ちゃん。べにぢょをブクマしてよ」とお願いしている
はてブはべにぢょをブクマしようと... (性的な意味で)

ここでべにぢょのターン
べにぢょははてブだったらフルボッコにしようとしている
べにぢょは人違いは嫌なので律儀にオマエダレダ?と聞いた
正直ハテブは正直に「Hatenaです。」と答えた
べにぢょは「おk、Hatenaまできいた。願いを叶えてやろう」
ここでリダイレクト発動!!302!302!
はてぶはhttp://www.geekpage.jp/に飛ばされた
はてぶは宇宙の藻屑と化した
べにぢょおそるべし

  • 投稿者: -
  • URL
  • 2007/12/02(日) 16:18:48
  • [編集]

はてぶするときは、はてなでスタンバイしてるロボット(クローラー)がそのページを見に行く。
JavaScriptは、そのロボットに「このページを見に来て!」って指示を出してるだけ。
ロボットはPHPでできてるかもしれないし、Perlとかでできてるかもしれない。
(実は、JavaScriptじゃなくてもはてなのロボットに指示出せたりもする)

headerっていうのはページの内容を読み込む前のちょっとお得なお知らせのこと。
「HTTP/1.0」で始まるのは、主にページが取れたかどうかのお知らせ。
「HTTP/1.0 200 OK」だと、ページが取れたよっていうお知らせ。
「HTTP/1.0 404 Not Found」だと、ページが取れませんでしたっていうお知らせ。
で、「HTTP/1.0 302 Redirect」は、ページが移動したのでここには無いっていうお知らせ。
「HTTP/1.0」で始まらないのはその他のお知らせ。
たとえば、「テキストですよ」とか「画像ですよ」とか「PDFですよ」とかのTypeを教えてあげたり、
ページの移動先(HTTP/1.0 302 Redirectのとき)を教えてあげたりする。

つまり、このGeekなページで紹介されてた方法は、はてなのロボットに「移動した」っていう
嘘のお知らせをしてロボットをだましちゃうっていう方法。
Googleとかの検索用ロボットとかに嘘を教えたら恐ろしい報復があるかもしれないので、
この方法を使うのは、はてなのロボットだけにしておいて下さいな。

はじめまして。

> はてブするときっていうのは、どうやらはてながそのページを見に来てるらしい。
> あれが JavaScript だというのは知ってる。
ブックマークする。のページを出しているのが JavaScript であって、そのページを見に行っているはてなさんは JavaScript じゃないと思いますよ。
たぶん、Perl かなんか。

ブックマークするの JavaScript は
javascript:
window.open('http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(document.title)+'&url='+escape(location.href), '_blank', 'width=550,height=600,resizable=1,scrollbars=1');
undefined;
となっていて、
window.open はそのアドレスをアドレスバーに打ち込むと思っていいので、
'http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(document.title)+'&url='+escape(location.href), '_blank', 'width=550,height=600,resizable=1,scrollbars=1'
を入力すると。
document.title がブクマするサイトのタイトル
location.href がブクマするサイトの URL
escape は URL に打てない文字を打てるように変換する関数
なので、前に勉強したやつになるんです!

  • 投稿者: filil
  • URL
  • 2007/11/27(火) 07:32:10
  • [編集]

この記事にコメントする

管理者にだけ表示を許可する