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