SQLの窓 イラストAC フリー素材

2021年06月26日

2021年 前期試験問題( 3 ) : 14

PHP で WEBアプリケーションを作成する上で、ブラウザに対して HTTPを送る関数という重要な関数が存在します。
簡単に言うと、この処理は PHP がブラウザに対して行う指示と考えるといいと思います。そして、プログラムの最初で送る事になる Content-Type が重要になります。

Content-Typeは、これからブラウザに送るデータの種類を説明するもので、一般的にと呼ばれる分類方法が定義されています。これは、MDN でも説明されていますが、『文書、ファイル、またはバイト列の性質や形式を示す標準』です。

最も基本的なテキストを表す場合、Content-Type: text/plain と記述され、これを受け取るとブラウザは単純なテキストとしてデータを表示しようとします。

以下に代表的なデータの種類を列挙します
1) : ブラウザにとって最も一般的な HTML
2) : 特に種類を指定しないバイナリデータ( ダウンロードダイアログが開く事になります )
3) : 自然画像フォーマットである、拡張子が通常 .jpg のファイル
また、テキストファイルである場合、そのテキストを表現する為のキャラクタセットを指定する場合( 回答はshift_jis で記述してください )は Content-Type にを追加します 現在のWEB では、キャラクタセットは UTF-8 が標準になっています。しかし、の基本キャラクタセットは Shift_JIS なので、WEBアプリケーション開発ではキャラクタセットの存在を意識する必要があります。 あらゆる開発言語で、処理を共通化したり機能別に独立させる事が行われます。クラスを作成する場合、メソッドと呼ばれる実行単位がそれにあたりますが、PHP ではクラスを作成可能ではありますが、一般的にはと言うキーワードで、ユーザー定義関数を作成します。この記述方法は、JavaScript と同様で、関数名と引数を定義して使用するものです。 しかし、PHP の関数では他の言語と全く違う扱いをするのが変数の扱いです。他の言語では、関数の外側で定義または発生した変数は、関数内で参照可能です。しかし、PHP ではキーワードを使用してその変数名を宣言しないと参照できない事に注意して下さい( スーパーグローバル変数は常に参照可能です ) WEBアプリケーションを作成する上で、プログラマが昔から意識し続けなければならなかったのが、ブラウザのの問題です。ブラウザは利用するユーザに対してより良好なレスポンスを提供する必要があったので、ブラウザに表示されるデータは全てが最新では無く PC に保存されているものもあります。しかし、WEBアプリケーションでは動的に情報を作成する為、ユーザに表示するデータは常に最新である必要があります。 このような対処には、冒頭で紹介した関数が使用されていましたが、PHP では、ある処理を組み込む事によって比較的容易にその対応を行う事ができます。それがの処理です
session_cache_limiter('nocache');
session_start();
session_start(); は、本来というスーパーグローバル変数を利用する為の開始処理ですが、そのオプションとして session_cache_limiter('nocache'); を実行しておくと、ブラウザに対して PC に保存してはならないという指示が与えられます。

さらに、ブラウザを利用している間ユーザに対して常に保持可能なスーパーグローバル変数が利用可能になります。この変数には通常ログイン時に入力される内容より、利用ユーザを特定する事が可能になる情報を保持する為に使います。






posted by at 2021-06-26 12:06 | 講師生活 | このブログの読者になる | 更新情報をチェックする

2021年06月24日

2021年 前期試験問題( 2 ) : 15

PHP には、スーパーグローバルと言う『すべてのスコープで使用できる組み込みの変数』が存在します。この中でも特に WEBアプリケーションにおける FORM からの送信で作成される変数をと書きます。この二つの変数名は、FORM 要素の属性の値として指定可能な文字列より命名されたものです。

その次に重要なスーパーグローバル変数は、です。この中には常にその時の PHP を取り巻く環境変数が設定されているので、WEB アプリケーションではこのうちのいくつかを利用する事になります。
Array
(
    [MIBDIRS] => C:/xampp/php/extras/mibs
    [MYSQL_HOME] => \xampp\mysql\bin
    [OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
    [PHP_PEAR_SYSCONF_DIR] => \xampp\php
    [PHPRC] => \xampp\php
    [TMP] => \xampp\tmp
    [HTTP_HOST] => localhost
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_SEC_CH_UA] => " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
    [HTTP_SEC_CH_UA_MOBILE] => ?0
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
1) REQUEST_METHOD : ブラウザからどのように送られたかが設定されるので、またはが値となります。

2)  : どちらも同じ値で、実行されたスクリプトのパスが設定されます。

さらに、WEBアプリケーションにログインは付き物ですから、その際かならず使用する事となるという変数があります。これは、一定時間ユーザがページを移動してもサーバ側で値を維持可能な変数です。

これらの変数は、PHP をデバッグする上で重要な値を常に保持しているので、という関数でページの最後に出力しておくと良いでしょう。また、WEBアプリの都合上画面上に出す事が容易で内場合は、この関数の第二引数を true にして出力を文字列に変換し、関数を使ってテキストファイルとして出力する事も考えましょう。

WEBアプリケーションは、基本的には文字列を扱う操作が重要になります。その為、文字列の中に変数を埋め込んだり、HTML の中に PHP の変数を埋め込んだりする事が多々あります。文字列の中に変数を埋め込む場合はを使用してその間に変数を記述します。また、埋め込まずに他の文字列と変数を連結する方法もあります。その場合 PHP では連結記号(結合演算子)としてが使用されます。

しかし、文字列は通常ダブルクォート内で作成される為、ダブルクォート文字そのものを表現するにはする必要があります。その為可読性が悪くなるので以下のような技術を使うと記述も楽になり、視認性も良くなります。
    $syozoku = "";
    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
        $syozoku .= <<<GAMEN
            <option value="{$row["コード"]}">{$row["名称"]}</option>
GAMEN;

    }    
このような方法をと言います。


posted by at 2021-06-24 19:22 | 講師生活 | このブログの読者になる | 更新情報をチェックする

2021年06月20日

2021年 前期試験問題( 1 ) : 16

MVCでは、プログラムを3つの要素に分割します。

それぞれの役割を以下のように決めてWEBアプリ用のテンプレートを作成します。

  の場合

アプリケーション固有の処理を記述するようにします。よって、の定義を行ってから呼び出す事になります。

  の場合

ユーザにとって重要なを定義します。殆どの記述をクライアント側で処理されるで記述します。また、これらの特性より、職種としてのの介入を容易にする目的があります。

  の場合

アプリケーション全体を見渡せるような基本的な部分を記述します。主に、された内容を正しく処理する為の条件や処理の呼び出しを記述します。
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {
    // ***********************************
    // 更新
    // ***********************************
    $result = check_data();
    if ( $result == true ) {
        insert_data();
        $_POST["name"] = "";
        $_POST["level"] = "";
    }
    else {
        //print $err_message;
    }
}

MVC の役割を持つ PHP のファイルを3つ作成し、それぞれ  とします。よって、ブラウザから呼び出されるのは C の役割を持ったファイルになるので、他の二つのファイルは PHP ので、読み込むことになります。

C からは、他の二つのファイル以外にもシステム共通の処理を記述したファイルも同様に読み込みますが、これらは基本的に一番最初に読み込む事になります。その次に読み込まれるのが M の部分で、C の最後に V の部分を読み込みます

V の部分で動的に PHP で作成する必要がある場合は、PHP の変数埋め込み方法を使用して変数内に必要なクライアント側の記述を構築します。

その変数を $dynamic とすると、その記述はとなります。

posted by at 2021-06-20 14:27 | 講師生活 | このブログの読者になる | 更新情報をチェックする

2021年01月29日

2016-06-17 に LIXIL INAX に 30年前の便器を買い替えた。排水管が長いので、大洗浄8L 仕様に変更してもらって、止水栓のメータで計ったら 9L 流れた。そういうもんか ???

2016-06-17

あまり深く考えずに便器を交換したわけです。30年前のものをずっと使って来ていたので、最近の便器の常識とか全く知らなくって、たまたま、タイミング的に『アクアセラミック』という新製品を買うことになった上に、結構な金額の買い物なので、いろいろ興奮もしてましたし。

節水型なんていう意識が全く無かったです

後からインターネットで詳細を調べて、イマドキは 5L で大を流すという事にとても不安を覚えました。 YHBC-ZA10H + YDT-ZA180H のメーカー詳細 『節水型』というキーワードに気が付いたのは、施工業者が作業終わって帰る時の簡単な説明に出てきた時です。その時、過去の古い便器で節水しようとタンクの中にペットボトルを入れて、排水が詰まりかけた記憶が蘇ったわけです。 「うち、排水管長いんで、あまり流れないと困るんですよ」 と、施工業者に問いかけました。すると、業者さんはタンクの中をチラっと見ただけで 「MAX です」 と言い放ったわけです。

施工業者が知らなかった事実

そもそも、カタログ上大洗浄は 5L で、小洗浄は3.8Lなわけです。施工業者は、この便器が 8L 仕様に変更できることを知らなかったのです。 (PDF)ECO6、ECO5 便器の洗浄水量を大洗浄8L( 小洗浄6L) にする方法( WEBアーカイブ ) この PDF は、施工業者が帰った後に疑問に思って調べたらすぐ出て来たものです。これ以外にも、排水管が 10メートルを超える場合には、5L では問題が出るという情報も見つけました。 便器の水量を上げる方法( トイレリフォーム専門店 ) そこで、販売店のほうに電話をかけて、施工業者がこの事実を知らないようだという事実と最後のやりとりを説明してもう一度調整に来てもらうように頼みました。

買った人はもらえない『施工説明書』というもの

再びやって来た施工業者は、メーカーに問い合わせて『施工説明書』の4ページに書いてあると言われた事を私に説明してくれました。そして、帰りにその説明書をいただきました。読んでみると、施工後のチェック項目(水漏れ・溜水面の点検)が書いてあるので、『施工説明書』はもらったほうが吉です。 メーカーに PDF であるのも確認しました。 ちゃんと増量できたかは、目視でもはっきりしていましたが、調整前にタンクがいっぱいになるまでの時間を計ってあったので比べました。結果、かなり増えていたので調整は成功です。 この時、正確な量はわからなかったというか、計る方法に気が付かなかったわけで、あとから計って結構びっくりするわけではあります。

というか、『何故』5L が標準なのか

メーカの 8L に関する必要性に対する説明は、『一部の地域では、便器の洗浄水量が大洗浄8L以上に規定されている場合があります』という理由です。ですから、5L で問題無いという見解なわけです。 しかし、調べてみると実際に詰まってしまうというトラブルの記事をみつけたのですが、この記事からは二つの大きなことを教訓として得る事ができます。 節水トイレの盲点 結論から言うと、この当事者の方のケースは、施工業者が 小と大を反対にセットしてしまった事にあります(初歩的な単なる取り付けミス)。よって、ここからの教訓の二つはこうです。 1) 節水型の 大 で普通に流す事ができる 2) 節水型の 小 では詰まってしまう ここからいろんな事実を知りました。もっとさらに調べたわけで、やはり無知は罪悪だと痛感しました。知らないとイザという時にはとても苦労をしてしまうのは間違い無いようです。

イマどきの節水型とは

トラブルに合われた方のメーカーは TOTO ですが、INAX も同様イマドキの便器では節水型が当たり前で、5L であっても10メートル以上流れる事を試験済みの製品なわけです。(逆に10メートル超えた場合の対応が皆無のようでどうかとは思いますが) 一般的な家庭ではほぼ問題は出ないで 5L で大を流す事ができるようになっています。海外では、水が貴重なので、逆に15L も使うわけなはいかないのです。その量が海外では厳しく決められているそうです。 何故 5L で流す事ができるかは、企業秘密かもしれませんが、一般的には『渦』を使って汚物をうまく流す技術のようです。 でも、3.8L だと詰まる仕様である事は認識しなくてはいけません 知らないで、タンクの中に節水用のなにかを入れると詰まります。また、大のつもりで小を使ってしまうと詰まります( 個人の認識レベルでレバーの向きと大・小 が逆の場合もある )。なにせ、ギリギリの技術のせめぎあいの間での水量なので、ちょっとした間違いで大きなトラブルになるかもしれません。 ウチは、排水が 10メートル超えてるし、曲がってる場所が最低でも2箇所あるし、8L でやっと安心です。小でも、節水時の大より多いですし。 で、実際計ったら・・・ 大で 9L、小で 7.5L でした。これはちょっとなぁ・・・・。メーカーの節水を前面に出してるぶんの誤差にしては大きいと思うんですが。 止水栓は実際に 1.5L のペットボトルに溜めて水量 1.5 と確かめてから、大と小を流しました。
posted by at 2021-01-29 19:29 | 生活 | このブログの読者になる | 更新情報をチェックする

2021年01月23日

【VBS】WshShell.Runによる外部プログラムの実行のバリエーションと注意事項

外部プログラムの実行

VBScript を何の為に使うかという場合、最も一般的に利用価値の高いのは、やはりプログラムの実行です。 わりと簡単に使えるのですが、プログラム(言語)でもあるので、専門知識が無ければ、なかなか難しい部分もあります。しかし、実行だけで言えば、2行で書けるので、その場合に「できること」を知っておくと絶対に得をします。

同期処理(コマンドプロンプトウインドウを開かない)

Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", 0, True )


同期処理(コマンドプロンプトウインドウを開く)

Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", , True )



非同期処理

Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage",0 ) でコマンドプロンプトウインドウは開きません
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run( "zip.exe -r homepage D:\nifty\homepage" )


関連するページ

WshShell.Run による外部プログラムの実行 :外部プログラムの実行
posted by at 2021-01-23 20:43 | VBScript | このブログの読者になる | 更新情報をチェックする

VBScript で GUID 生成

GUID の取得

このコードは、VBScript のノウハウの詰まった『Hey, Scripting Guy!』に掲載されていたものです。 Scripting Guy さん、よろしくお願いします。スクリプトを使用して GUID を作成することはできますか。
Set TypeLib = CreateObject("Scriptlet.TypeLib")
WScript.Echo TypeLib.Guid

GUID をクリップボードに

この記事(Hey, Scripting Guy!)では後半に、InternetExplorer.Application を使って GUID をクリップボードらコピーする方法が続きます。しかし、今の時代ではコマンドプロンプトで、clip.exe が使用できるので、そちらを使うのもいいかもしれません。( 以下のコードでは最後に改行が入るのがタマにキズ )
sCommand = "cmd /c echo Set TypeLib=CreateObject(""Scriptlet.TypeLib""):Wscript.echo TypeLib.Guid>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs | clip"

Set WshShell = WScript.CreateObject("WScript.Shell")
' 同期処理(コマンドプロンプトウインドウを開かない)
Call WshShell.Run( sCommand, 0, True )
WshShell.Run
0 : ウィンドウを非表示にし、別のウィンドウをアクティブにします
TRUE : プログラムの実行が終了するまでスクリプトの実行は中断

【VBS】WshShell.Runによる外部プログラムの実行のバリエーションと注意事項



posted by at 2021-01-23 20:42 | VBScript | このブログの読者になる | 更新情報をチェックする