kazpgmの日記

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

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

http://d.hatena.ne.jp/kazpgm/2009040362.ファイルUPLOAD先を「/web/upload」(誰でも見れる)でなく「/.web/upload」(誰からも見れない)フォルダにもできるようにする。 <=今日は調査のみ。修正はあしたやる予定。

ユーザがアップロードしたファイルを、誰でも見れる場所においておくわけにはいかない。このロジックは機能として必須だ。

既存にある「項目チェック内容」列の”画像”、”ファイル”のほかに”秘密画像”、”秘密ファイル”を作る。(WEB画面上の画像(imgタグ)、ダウンロード(aタグ)も「/.web/upload」から表示する。)
==これがWEB画面上の画像(imgタグ)サンプル。だけどjpeg以外も考える必要あり==
"jpg", "jpeg", "gif", "png"をアップロード可能としているので。imagejpeg()、imagepng()、imagegif()を使う。例はimagejpeg()。

■image_test2.php
<?
    $imgname = 'D:\xxxx\Temp\php_120.JPG';
    header("Content-type: image/jpeg");
    $im = @imagecreatefromjpeg($imgname);
    if (!$im) { /* 失敗したかどうかを調べる */
        $im = imagecreatetruecolor (10, 10); /* 空の画像を作成 */
        $bgc = imagecolorallocate ($im, 255, 255, 255);
        $tc = imagecolorallocate ($im, 0, 0, 0);
        imagefilledrectangle ($im, 0, 0, 10, 10, $bgc);
    }

    imagejpeg($im);
    imagedestroy($im);
?>
■image_test2.html
<html><head><title>test</title>
<img src="image_test2.php"></body></html>

==これがダウンロード(aタグ)サンプル。==

■image_test3.php
<?
    $handle = fopen('D:\xxxx\Temp\php_120.JPG', "rb");
    $flen = filesize('D:\xxxx\Temp\php_120.JPG');
    $contents = fread($handle, filesize('D:\xxxx\Temp\php_120.JPG'));
    fclose($handle);

    header("Content-Disposition: attachment; filename=php_120.JPG");
    header("Content-Type: application/octet-stream");
    header("Cache-Control: public");
    header("Pragma: public");
    header('Content-Length: ' . $flen);
    print $contents;
?>
■image_test3.html
<html><head><title>test</title>
<a href="image_test3.php"></a>ダウンロード</body></html>

==これがアップロードの関数部分サンプル。==
”秘密画像”、”秘密ファイル”を選ばれたときは「setAndDelPhotoSecret」関数、
「setAndDelPhotoTempSecret」関数を使用するようにする。

■functions.php 修正
<<追加>>
    /**
     * 画像を秘密フォルダにUPLOAD、DELETEする。
     * <br>
     * @param  $table       テーブル名
     * @param  $pkey        主キー情報。複数あるときは結合してください。
     * @param  $itemNames   画像のITEM名を配列で指定
     * @param  $columns     テーブルITEM内容を配列で指定
     * @param  $mode        処理区分<br>
     *                      <ul>
     *                        <li>ins_do 登録実行
     *                        <li>upd_do 更新実行
     *                        <li>del_do 削除実行
     *                      </ul>
      */
function setAndDelPhotoSecret($table, $pkey, $itemNames, &$columns, $mode) {
    if ($mode == 'ins_do') {
        if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || 
          !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加
            echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n";
            exit;
        }
        $path = DIR_UPLOAD_SECRET .$table . '/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );
        $path = DIR_UPLOAD_SECRET .$table . '/'.  $pkey .'/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );

        foreach ($itemNames  as $key => $val) {
            if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加
                echo "failed itemName " . $val . " ...\n";
                exit;
            }
            if ( !empty($_FILES[$val]['name'])) {
                $path_parts = pathinfo( $_FILES[$val]['name'] );
                $photoNm = $val . '.' . strtolower($path_parts['extension']);
                $columns[$val] = $photoNm;
                move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm );
                chmod( $path . $photoNm, 0666 );
            }
        }
    } else if ($mode == 'upd_do') {
        if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || 
          !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加
            echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n";
            exit;
        }
        $path = DIR_UPLOAD_SECRET .$table . '/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );
        $path = DIR_UPLOAD_SECRET .$table . '/'.  $pkey .'/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );

        foreach ($itemNames  as $key => $val) {
            if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加
                echo "failed itemName " . $val . " ...\n";
                exit;
            }
            $columns[$val] = $_REQUEST['old_' . $val];
            if ( !empty($_FILES[$val]['name']) && empty( $_REQUEST['del_' . $val] )) {
                if ($_REQUEST['old_' . $val] != '') {
                    if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $_REQUEST['old_' . $val])) { // ファイル名であること。20090523追加
                        echo "failed to del " . $_REQUEST['old_' . $val] . " ...\n";
                        exit;
                    }
                    unlink( $path . $_REQUEST['old_' . $val]);
                }
                if ( !empty($_FILES[$val]['name'])) {
                    $path_parts = pathinfo( $_FILES[$val]['name'] );
                    $photoNm = $val . '.' . strtolower($path_parts['extension']);
                    $columns[$val] = $photoNm;
                    move_uploaded_file( $_FILES[$val]['tmp_name'], $path . $photoNm );
                    chmod( $path . $photoNm, 0666 );
                }
            } else if ( !empty( $_REQUEST['del_' . $val] )) {
                if ($_REQUEST['old_' . $val] != '') {
                    if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $_REQUEST['old_' . $val])) { // ファイル名であること。20090523追加
                        echo "failed to del " . $_REQUEST['old_' . $val] . " ...\n";
                        exit;
                    }
                    unlink( $path . $_REQUEST['old_' . $val]);
                    $columns[$val] = '';
                }
            }
        }

    } else if ($mode == 'del_do') { 
        if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || 
          !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加
            echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n";
            exit;
        }
        $path = DIR_UPLOAD_SECRET .$table . '/'.  $pkey .'/';
        delFile( $path );
        if ( is_dir($path) ) {
            rmdir( $path );
        }
    }


}


    /**
     * 画像をTempから秘密フォルダにUPLOADする。
     * <br>
     * @param  $table       テーブル名
     * @param  $pkey        主キー情報。複数あるときは結合してください。
     * @param  $itemNames   画像のITEM名を配列で指定
     * @param  $columns     テーブルITEM内容を配列で指定
     * @param  $mode        処理区分<br>
     *                      <ul>
     *                        <li>ins_do 登録実行
     *                        <li>upd_do 更新実行
     *                      </ul>
      */
function setAndDelPhotoTempSecret($table, $pkey, $itemNames, &$columns, $mode) {
    if ($mode == 'ins_do') {
        if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || 
          !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加
            echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n";
            exit;
        }
        $path = DIR_UPLOAD_SECRET .$table . '/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );
        $path = DIR_UPLOAD_SECRET .$table . '/'.  $pkey .'/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );

        foreach ($itemNames  as $key => $val) {
            if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加
                echo "failed itemName " . $val . " ...\n";
                exit;
            }
            if ( !empty($_REQUEST['new_' . $val])) {
                if(!ereg("^[0-9]", $_REQUEST['new_' . $val]) || 
                    !(ereg("^[^\/]+/[^\/]+$", $_REQUEST['new_' . $val]))) { // 先頭は年なので数字のはず。/はひとつのはず。20090523追加
                    echo "failed to copy " . $_REQUEST['new_' . $val] . " ...\n";
                    exit;
                }
                $path_parts = pathinfo( DIR_UPLOAD_SECRET . 'temptemptemp/' . $_REQUEST['new_' . $val] );
                $photoNm = $val . '.' . strtolower($path_parts['extension']);
                $columns[$val] = $photoNm;
                $_REQUEST[$val] = $photoNm;
                if (!copy(DIR_UPLOAD_SECRET . 'temptemptemp/' . $_REQUEST['new_' . $val], $path . $photoNm)) {
                    echo "failed to copy " . $_REQUEST['new_' . $val] . " ...\n";
                    exit;
                }
                //if (!rename($_REQUEST['new_' . $val], $path . $photoNm)) {
                //    echo "failed to rename " . $_REQUEST['new_' . $val] . " ...\n";
                //}
                // tempフォルダはtempフォルダを作成する前に消しています。(1日以前のものを対象にして)
                chmod( $path . $photoNm, 0666 );
            }
        }
    } else if ($mode == 'upd_do') {
        if (!ereg("^[0-9a-zA-Z_\-]+$", $table) || 
          !ereg("^[0-9a-zA-Z_\-]+$", $pkey)) { // TABLE名キーであること。20090523追加
            echo "failed tableName = " . $table . "failed tableKey = " . $pkey . " ...\n";
            exit;
        }
        $path = DIR_UPLOAD_SECRET .$table . '/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );
        $path = DIR_UPLOAD_SECRET .$table . '/'.  $pkey .'/';
        if ( !is_dir($path) ) mkdir( $path, 0777 );

        foreach ($itemNames  as $key => $val) {
            if (!ereg("^[0-9a-zA-Z_\-]+$", $val)) { // ITEM名であること。20090523追加
                echo "failed itemName " . $val . " ...\n";
                exit;
            }
            $columns[$val] = $_REQUEST['old_' . $val];
            $_REQUEST[$val] = $_REQUEST['old_' . $val];
            if ( !empty($_REQUEST['new_' . $val]) && empty( $_REQUEST['del_' . $val] )) {
                if ($_REQUEST['old_' . $val] != '') {
                    if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $_REQUEST['old_' . $val])) { // ファイル名であること。20090523追加
                        echo "failed to del " . $_REQUEST['old_' . $val] . " ...\n";
                        exit;
                    }
                    unlink( $path . $_REQUEST['old_' . $val]);
                }
                if ( !empty($_REQUEST['new_' . $val])) {
                    if(!ereg("^[0-9]", $_REQUEST['new_' . $val]) || 
                        !(ereg("^[^\/]+/[^\/]+$", $_REQUEST['new_' . $val]))) { // 先頭は年なので数字のはず。/はひとつのはず。20090523追加
                        echo "failed to copy " . $_REQUEST['new_' . $val] . " ...\n";
                        exit;
                    }
                    $path_parts = pathinfo( DIR_UPLOAD_SECRET . 'temptemptemp/' . $_REQUEST['new_' . $val] );
                    $photoNm = $val . '.' . strtolower($path_parts['extension']);
                    $columns[$val] = $photoNm;
                    $_REQUEST[$val] = $photoNm;
                    if (!copy(DIR_UPLOAD_SECRET . 'temptemptemp/' . $_REQUEST['new_' . $val], $path . $photoNm)) {
                        echo "failed to copy " . $_REQUEST['new_' . $val] . " ...\n";
                        exit;
                    }
                    //if (!rename($_REQUEST['new_' . $val], $path . $photoNm)) {
                    //    echo "failed to rename " . $_REQUEST['new_' . $val] . " ...\n";
                    //}
                    // tempフォルダはtempフォルダを作成する前に消しています。(1日以前のものを対象にして)
                    chmod( $path . $photoNm, 0666 );
                }
            } else if ( !empty( $_REQUEST['del_' . $val] )) {
                if ($_REQUEST['old_' . $val] != '') {
                    if (!ereg("^[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$", $_REQUEST['old_' . $val])) { // ファイル名であること。20090523追加
                        echo "failed to del " . $_REQUEST['old_' . $val] . " ...\n";
                        exit;
                    }
                    unlink( $path . $_REQUEST['old_' . $val]);
                    $columns[$val] = '';
                    $_REQUEST[$val] = '';
                }
            }
        }

    }
}

19:00-24:20

追加)Topページ修正した。見た目にリンクが多い感じだった。リンクの半分を後ろに持ってきた。かつ、”最初に「kaz PHP自動作成お助けTOOL 管理者側 説明01」(U-Tube9分)を見てください!”を最前に持ってきた。

01:00−02:30

■サイト:http://kazpgm.ddo.jp/