アーカイブ

  • ヤムル

    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
    タグ:
  • Let’s Postgres

    Let’s Postgres

    いいサイト発見。

    HOTの効果

    ↑ここの「更新処理でHOTを働かせる」トピックが素敵です。

    あと、検証が必要な内容かもしれないが、気になるのでメモ。

    PostgreSQLを本当に高速化したい人のための10のポイント

    2010年 6月 16日 | Filed under PostgreSQL
    タグ:
  • [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]サムネイル

    同僚のハリネズミに依頼されてたような気がするのでアップしてみた。
    >>ハリネズミ
    CFシリーズに入れたょ。

    #*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    #  saveImageFile
    #   [説明]
    #     イメージファイルのローカル保存、もしくはイメージ出力
    #   [パラメータ]
    #     $pImageUri[I] string
    #     ⇒イメージファイルのURI(http://形式でも、物理パスでも可)
    #     $pSaveFileName[I] string
    #     ⇒保存ファイルのファイルパス
    #       ※pSaveFileがtrueの場合に有効
    #     $pMaxWidth[I] integer
    #     ⇒保存時の最大の横幅( 0を指定するとそのままで、1以上の正数値を指定するとサムネイル可します。)
    #     $pDegrees[I] integer
    #     ⇒回転角度。確か時計回りで何度回転するかを指定
    #     $pSaveFile[I] boolean
    #     ⇒ファイルを保存するか否か、falseを指定するとそのままレスポンスとしてイメージ出力します。
    #   [返り値] mixed
    #     ⇒TRUE:     処理成功
    #       TRUE以外: 処理失敗
    #*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    function saveImageFile(
        $pImageUri
      , $pSaveFileName
      , $pMaxWidth      = 0
      , $pDegrees       = 0
      , $pSaveFile      = TRUE
    ){
      $returnValue  = FALSE;
      $rsImage      = FALSE;
      $rsRotate     = FALSE;
      $rsNewImage   = FALSE;
      if( !extension_loaded('gd') && !extension_loaded('gd2') ){
        # 拡張モジュールのロードに失敗
        return $returnValue;
      }
      # サイズ情報の取得
      list( $imageWidth, $imageHeight, $imageType ) = @getimagesize( $pImageUri );
    
      #-----------------------------------------------------------
      # イメージファイルの読み込み
      switch( $imageType ){
        case IMAGETYPE_GIF:
          $rsImage = @imagecreatefromgif( $pImageUri );
          break;
        case IMAGETYPE_JPEG:
          $rsImage = @imagecreatefromjpeg( $pImageUri );
          break;
        case IMAGETYPE_PNG:
          $rsImage = @imagecreatefrompng( $pImageUri );
          break;
      }
      #-----------------------------------------------------------
      # イメージの回転
      if( $rsImage !== FALSE ){
        $rsRotate = @imagerotate( $rsImage, 360-$pDegrees, 0) ;
      }
      #-----------------------------------------------------------
      # リサイズイメージの作成
      if( $rsRotate !== FALSE ){
        # 回転後のイメージサイズの取得
        $imageWidth   = ImageSX($rsRotate);
        $imageHeight  = ImageSY($rsRotate);
        # リサイズ後のサイズを算出
        if( $pMaxWidth == 0 or $imageWidth <= $pMaxWidth ){
          # そのまま
          $newWidth   = $imageWidth;
          $newHeight  = $imageHeight;
        }else{
          # 最大サイズより大きい場合 => 縮小
          $newHeight  = intval(( (float)$pMaxWidth / (float)$imageWidth ) * (float)$imageHeight);
          $newWidth   = $pMaxWidth;
        }
        # 空画像を作成
        if( function_exists("imagecreatetruecolor") ){
          $rsNewImage = @imagecreatetruecolor( $newWidth, $newHeight );
        }else{
          $rsNewImage = @imagecreate( $newWidth, $newHeight );
        }
        # サンプリングしなおす
        if( function_exists("imagecopyresampled") ){
          $returnValue = @imagecopyresampled( $rsNewImage, $rsRotate, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
          if( $returnValue === FALSE ){
            $returnValue = @imagecopyresized( $rsNewImage, $rsRotate, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
          }
        }else{
          $returnValue = @imagecopyresized( $rsNewImage, $rsRotate, 0, 0, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
        }
      }
      if( $pSaveFile ){
        #-----------------------------------------------------------
        # イメージファイルの保存
        if( $returnValue !== FALSE && $rsNewImage !== FALSE ){
          switch( $imageType ){
            case IMAGETYPE_GIF:
              $returnValue = @imagegif( $rsNewImage, $pSaveFileName );
              break;
            case IMAGETYPE_JPEG:
              $returnValue = @imagejpeg( $rsNewImage, $pSaveFileName, 100 );
              break;
            case IMAGETYPE_PNG:
              $returnValue = @imagepng( $rsNewImage, $pSaveFileName );
              break;
          }
        }
      }else{
        #-----------------------------------------------------------
        # イメージファイルの表示
        if( $returnValue !== FALSE && $rsNewImage !== FALSE ){
          switch( $imageType ){
            case IMAGETYPE_GIF:
              header("Content-type: image/gif");
              $returnValue = @imagegif( $rsNewImage );
              break;
            case IMAGETYPE_JPEG:
              header("Content-type: image/jpeg");
              $returnValue = @imagejpeg( $rsNewImage, "", 100 );
              break;
            case IMAGETYPE_PNG:
              header("Content-type: image/png");
              $returnValue = @imagepng( $rsNewImage );
              break;
          }
        }
      }
      #-----------------------------------------------------------
      # リソースの解放
      @imagedestroy($rsImage);
      @imagedestroy($rsRotate);
      @imagedestroy($rsNewImage);
      return $returnValue;
    }
    
    2010年 2月 26日 | Filed under PHP
    タグ:
  • タグ: ‘PHP’ の記事