アーカイブ

  • ヤムル

    symfonyのblogチュートリアルを読んでたら出てきた単語。

    拡張子「yml」ファイル⇒YAML(ヤムル)形式というらしい。
    Wikipediaによると、「構造化データやオブジェクトを文字列にシリアライズ(直列化)するためのデータ形式の一種」らしい。
    その詳細は下記で。

  • Wikipedia
  • The symfony Reference Book
  • ポイントは、タブが使えないというところ。インデントは必ずスペース2個を使う。

2011年 4月 13日 | Filed under PHP
タグ: ,
  • [PHP]ファイルの強制ダウンロード

    phpでレスポンスにてファイル出力する場合に、強制ダウンロードさせるおまじない。

    // readfile() によるダウンロードの強制
    $file = 'sample.gif';
    if (file_exists($file)) {
      header('Content-Description: File Transfer');
      header('Content-Type: application/octet-stream');
      header('Content-Disposition: attachment; filename='.basename($file));
      header('Content-Transfer-Encoding: binary');
      header('Expires: 0');
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
      header('Pragma: public');
      header('Content-Length: ' . filesize($file));
      ob_clean();
      flush();
      readfile($file);
      exit();
    }
    
    2011年 3月 24日 | Filed under PHP
    タグ:
  • [PHP]file_put_contentsのLOCK_EXオプションのワナ

    file_put_contents関数のLOCK_EXオプション。

    考えてみれば当然の結末と納得してますが、
    nfsマウント先で、それを実行しようとした場合に、排他ロックが取得できず、ファイルの書き込みに失敗する模様。

    ファイルの書き込みを「完全に」行う為に、排他ロックを用いたのだけど、
    発想を逆にして、md5_file()で書き込み後にハッシュ値の値を比較するようにしてみたほうが良いみたい。

    2010年 9月 6日 | Filed under PHP
  • [PHP]全ての変数とか定数とか関数とかを知る。

    オープンソースとか自家製とか、いろいろ。
    他人のソースって説明無しで解析しなきゃならないときの秘密兵器みたいな存在ですな。

    全ての定義済の変数を配列で返す

    print_r( get_defined_vars() );
    

    全ての定数の名前とその値を連想配列として返す

    print_r( get_defined_constants() );
    

    定義済みの全ての関数を配列で返す

    print_r( get_defined_functions() );
    
    2010年 6月 18日 | Filed under PHP
    タグ:
  • XML-RPC

    いまさらながら、XML-RPCについてのメモ。

    「RPC」とは、正しいかはわかりませんが、「Remote Procuder Call」の略。
    つまり、Webサーバ間でデータをやり取りする仕様のこと。
    サーバとクライアントの双方の立場があり、クライアントからサーバにメッセージ(プロシージャのキック)を送信し、
    サーバは、そのメッセージに応えて、何かをするってこと。

    もう少し具体的にいうと、HTTPプロトコル上でやりとりされ、
    そのリクエストのヘッダーは勿論HTTPプロトコルで、リクエストのBodyがXML構造しているわけなんです。
    また、その結果の応答内容もXML形式で返されるわけです。

    実際に実装するとめんどくさいと思われるかもしれないけど、
    「プロシージャである」というところがこの仕様の大きな特徴で、
    パラメタのデータ型を縛ることができるのが、メリット。
    データ型は数はないけど、
    スカラー値、数値、文字列、日付等のほか、複合的なレコード(ハッシュ配列)/リスト構造など、結構融通がきくようになってます。

    大掛かりなB2Bを前提としたシステムには、結構実装されていることが考えられるので、マスターしてて損はないかと。。。

    すごく短くまとめられてるので、まず仕様をチェックしましょう。
    XML-RPC 仕様書

    あとは、実装する言語に対応すればよいので、
    XML-RPC-HOWTO
    でも、ガイドライン的なことだけが載ってる気がするので、ここでキーワードだけ見つけて、ググることをオススメします。

    仕様さえ忠実に沿えばいいのだから、無理して不安定なライブラリ使うのなら、自力で創作してもいいかもと、PHPでは特に感じました。

    2010年 4月 2日 | Filed under PHP
    タグ:
  • [PHP]CakePHPに遊ばれてみた

    CakePHPのお話。
    悪戦苦闘してるわけですが…。
    とりあえず、『ファイルとクラス名の規約』を遵守しないと何も始まらない模様。

    通常、ファイル名はアンダースコア記法(underscored)を使い、クラス名にはキャメル記法(CamelCased)を使います。
    すなわち、 Cake において MyNiftyClass というクラスを用いるには、ファイル名を my_nifty_class.php  というようにします。
    次の例で、 CakePHP アプリケーションで典型的に利用する異なるタイプのクラスを、それぞれどのように命名するのか示します。
    
    * KissesAndHugsController というコントローラのクラスは、 kisses_and_hugs_controller.php というファイル名にします(「_controller」がファイル名に含まれることに注意してください)。
    * MyHandyComponent というコンポーネントのクラスは、 my_handy.php というファイル名にします。
    * OptionValue というモデルのクラスは、 option_value.php というファイル名にします。
    * EspeciallyFunkableBehavior というビヘイビアのクラスは、 especially_funkable.php というファイル名にします。
    * SuperSimpleView というビューのクラスは、 super_simple.php というファイル名にします。
    * BestEverHelper というビューのクラスは、 best_ever.php というファイル名にします。
    各ファイルは、 app フォルダ内のそれぞれ適切なフォルダの中かその下(サブフォルダも可)に設置します。
    

    ネットを徘徊してると、こんなのを見つけた。
    CakePHP 規約ワードメーカー

    ってことは逆に、複数形はどういう単語なのか、しっかり認識しないと、Cakeさんでは認識してくれない(もしくは誤認識されるかもしれない)ってことですよね。

    あと、各テーブルの主キー項目は、『id』というカラムを必ず持たないといけない模様です。
    表示(index)とかならできるのだけど、deleteやupdateなどのロジックでは必ず『id』というカラムが必要となってくるように思えます。

    ORマッピング』という考え方。
    プログラムのコーディングをする側には納得できる考え方だけど、
    テーブル設計側からしたら、ちょっち設計しづらく感じる今日この頃。

    2010年 3月 10日 | Filed under PHP
    タグ:
  • [PHP]外字の削除

    昔作った記憶があるのだけど、どこかに失踪してしまったのでメモメモ。
    ポイントは下記の1行。

    mb_substitute_character("none");
    

    あんまり自信ないので、おかしなところがあれば、ご指摘よろしくお願いします。

    #--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
    # 外字の撲滅
    #--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
    function deleteExternalFontsChar(
        $str
    ){
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # 戻り値の初期化
      $returnValue = $str;
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # 現在のmb系関数の設定状況をバックアップ
      $bk_mb_language             = mb_language();
      $bk_mb_substitute_character = mb_substitute_character();
      $bk_mb_internal_encoding    = mb_internal_encoding();
      $bk_mb_regex_encoding       = mb_regex_encoding();
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # 日本語環境設定
      mb_language("ja");
      mb_internal_encoding("eucJP-win");
      mb_regex_encoding(mb_internal_encoding());
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # 入力文字エンコーディングが無効、
      # または出力文字エンコーディングに文字コードが存在しない場合の代替文字を指定(none:出力しない)
      mb_substitute_character("none");
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # まずは、処理対象の文字列を、現在のエンコードに合わせる
      $returnValue = @mb_convert_encoding( $returnValue, mb_internal_encoding(), $bk_mb_internal_encoding );
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # ざくっと外字撲滅
      $returnValue = @mb_convert_encoding( $returnValue, "EUC-JP", mb_internal_encoding() );
      $returnValue = @mb_convert_encoding( $returnValue, mb_internal_encoding(), "EUC-JP" );
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # 最後に、元の文字列エンコードに戻す
      $returnValue = @mb_convert_encoding( $returnValue, $bk_mb_internal_encoding, mb_internal_encoding() );
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # mb系関数の設定状況をバックアップを復元
      mb_language($bk_mb_language);
      mb_substitute_character($bk_mb_substitute_character);
      mb_internal_encoding($bk_mb_internal_encoding);
      mb_regex_encoding($bk_mb_regex_encoding);
      #--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
      # ここで処理終了
      return $returnValue;
    }
    
    2010年 3月 2日 | Filed under PHP
    タグ: ,
  • カテゴリー ‘PHP’ のアーカイブ