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円で採算取れるかな。