kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_62.ファイルUPLOAD先を・・・ToDoリストに追加

http://d.hatena.ne.jp/kazpgm/2009040362.ファイルUPLOAD先を「/web/upload」(誰でも見れる)でなく「/.web/upload」(誰からも見れない)フォルダにもできるようにする。

今日は

  • 「テーブル項目一覧などの定義_★お助けTOOL_Sample.xls」修正
  • PHP自動作成プログラム”秘密画像”、”秘密ファイル”に対応
  • 「使用できる項目」シートに”秘密画像”、”秘密ファイル”を追加してローカルでテストした。

==「テーブル項目一覧などの定義_★お助けTOOL_Sample.xls」==
「★TOOL用コンスタント★」シートのA列(項目チェック内容)に”秘密画像”、”秘密ファイル”を追加した。

例として「使用できる項目」シートに”秘密画像”(項目番号43)、”秘密ファイル(項目番号44)”を追加した。K列(項目チェック内容)で”秘密画像”、”秘密ファイル”が選べます。

==これがWEB画面上の秘密画像(imgタグ)、秘密ファイル(aタグ)サンプル。==
例:「使用できる項目」シートから作成した管理者側画面

■itemADetailView.html
 ・詳細画面からの抜粋です。秘密画像は「imageDsp.php」(今回新規作成)、
  秘密ファイル(今回新規作成)は「flDld.php」を使ってます。

<img src="/kaz01u/imageDsp.php?fname=item/<?= stz($o['item01'])?>/<?= stz($o['item51']) ."&user=admin" ?>"/>

<a href="/kaz01u/flDld.php?fname=item/<?= stz($o['item01'])?>/<?= stz($o['item52'])?>&user=admin"><?= stz($o['item52'])?></a>


■imageDsp.php
 ・秘密画像なのでユーザログインチェック、管理者ログインチェックが入っています。
  ログインされていない場合、画像は"Error loading "という表示になります
      <= 2009/07/12(日)「'\'を/に変更する。./はエラーにする。
        ファイル名チェック。ファイルがないときはエラーにする。」を
        追加した。
<?
    session_start();
    $okflg = true;
    require_once('../.kazphp/common.php');
    $_REQUEST['fname'] = str_replace('\\', '/', $_REQUEST['fname']); // '\'を/に変更する。
    if (ereg("\.\/", $_REQUEST['fname'])) { // ./はエラーにする。
        $okflg = false;
    }
    if ($okflg && !ereg("^[0-9a-zA-Z_\-]+\/[0-9a-zA-Z_\-]+\/[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $_REQUEST['fname'])) { // ファイル名チェック。
        $okflg = false;
    }
    if ($okflg && !is_file(DIR_UPLOAD_SECRET . $_REQUEST['fname'])) { // ファイルがないときはエラーにする。
        $okflg = false;
    }
    $imgname = DIR_UPLOAD_SECRET . $_REQUEST['fname'];
    if ($okflg) {
        $okflg = false;
        if ($_REQUEST['user'] == 'user') {
            if (( '' == $_SESSION['u_login_id_login']) &&  // ユーザのログイン
                ( $_SESSION['login_type'] != '1' && $_SESSION['login_type'] != '2' && $_SESSION['login_type'] != '3')) { // 管理者のログイン
            } else {
                $okflg = true;
            }
        } else if ($_REQUEST['user'] == 'admin') {
            if( $_SESSION['login_type'] == '1' || $_SESSION['login_type'] == '2' || $_SESSION['login_type'] == '3'){ // 管理者のログイン
                $okflg = true;
            }
        }
    }
    $path_parts = pathinfo($imgname);
    $ext = $path_parts['extension'];

    if ('jpeg' == $ext) {
        header("Content-type: image/jpeg");
        if ($okflg) $im = @imagecreatefromjpeg($imgname);
    } else if ('jpg' == $ext) {
        header("Content-type: image/jpeg");
        if ($okflg) $im = @imagecreatefromjpeg($imgname);
    } else if ('gif' == $ext) {
        header("Content-type: image/gif");
        if ($okflg) $im = @imagecreatefromgif($imgname);
    } else if ('png' == $ext) {
        header("Content-type: image/png");
        if ($okflg) $im = @imagecreatefrompng($imgname);
    }
    if ($okflg == false || !$im) { /* 失敗したかどうかを調べる */
        //$im = imagecreatetruecolor (10, 10); /* 空の画像を作成 */
        //$bgc = imagecolorallocate ($im, 255, 255, 255);
        //$tc = imagecolorallocate ($im, 0, 0, 0);
        //imagefilledrectangle ($im, 0, 0, 10, 10, $bgc);
        $im = imagecreatetruecolor (150, 30); /* 空の画像を作成 */
        $bgc = imagecolorallocate ($im, 255, 255, 255);
        $tc = imagecolorallocate ($im, 0, 0, 0);
        imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
        /* エラーメッセージを出力 */
        imagestring ($im, 1, 5, 5, "Error loading ", $tc);
    }

    imagejpeg($im);
    imagedestroy($im);
?>
■flDld.php
 ・秘密ファイルなのでユーザログインチェック、管理者ログインチェックが入っています。
  ログインされていない場合、ログイン画面に飛びます。
      <= 2009/07/12(日)「'\'を/に変更する。./はエラーにする。
         ファイル名チェック。ファイルがないときはエラーにする。」を
         追加した。
<?
    session_start();
    require_once('../.kazphp/common.php');
    $_REQUEST['fname'] = str_replace('\\', '/', $_REQUEST['fname']); // '\'を/に変更する。
    if (ereg("\.\/", $_REQUEST['fname'])) { // ./はエラーにする。
        echo "faild file name. 01";
        exit;
    }
    if (!ereg("^[0-9a-zA-Z_\-]+\/[0-9a-zA-Z_\-]+\/[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $_REQUEST['fname'])) { // ファイル名チェック。
        echo "faild file name. 03";
        exit;
    }
    if (!is_file(DIR_UPLOAD_SECRET . $_REQUEST['fname'])) { // ファイルがないときはエラーにする。
        echo "faild file name.  02";
        exit;
    }
    if ($_REQUEST['user'] == 'user') {
        if (( '' == $_SESSION['u_login_id_login']) &&  // ユーザのログイン
            ( $_SESSION['login_type'] != '1' && $_SESSION['login_type'] != '2' && $_SESSION['login_type'] != '3')) { // 管理者のログイン
            $_SESSION['req_url'] = $_SERVER["REQUEST_URI"];
            sendRedirectExit('/kaz01u/index.php'); // ユーザのログイン画面
        }
    } else if ($_REQUEST['user'] == 'admin') {
        if( $_SESSION['login_type'] != '1' && $_SESSION['login_type'] != '2' && $_SESSION['login_type'] != '3'){ // 管理者のログイン
            $_SESSION['req_url'] = $_SERVER["REQUEST_URI"];
            sendRedirectExit('/kaz01u/index.php'); // ユーザのログイン画面を出す。
        }
    } else {
        exit("Please login");
    }

    $handle = fopen(DIR_UPLOAD_SECRET . $_REQUEST['fname'], "rb");
    if ( !$handle ) {
        echo "faild file name.  04";
        exit;
    }
    $flen = filesize(DIR_UPLOAD_SECRET . $_REQUEST['fname']);
    $contents = fread($handle, filesize(DIR_UPLOAD_SECRET . $_REQUEST['fname']));
    fclose($handle);

    $path_parts = pathinfo(DIR_UPLOAD_SECRET . $_REQUEST['fname']);
    header("Content-Disposition: attachment; filename=" . $path_parts['basename']);
    header("Content-Type: application/octet-stream");
    header("Cache-Control: public");
    header("Pragma: public");
    header('Content-Length: ' . $flen);
    print $contents;
?>

05/04 14:00 - 05/05 03:30

追加)Googleアドワーズ。今日は”php”検索1クリック121円出さないと表示されなかった。
   広告出している人1クリック121円で採算取れるかな。