野口賢人
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # PHP <!-- HackMDのタイトルです --> <!-- 内容はここから --> <!-- ##  0章 はじめに を追加--> <!-- <div class="alert alert-warning"> このカリキュラムは無料体験期間が終了すると自動的に閲覧できなくなりますのでご注意ください。 </div> ### ようこそ TechAcademyの無料体験コースへようこそ!無料体験では、TechAcademyの学習システムやメンターサポートを全て体験することができます。 無料体験で扱うカリキュラムは、PHPを使った「プログラミング基礎」、HTML/CSSを使った「Webデザイン基礎」のみ用意しています。他のコースでも学習方法は同じですので、TechAcademyでどのように学ぶのか理解できるはずです。--><!-- 削除 Techpitのフォーマットに合わないため--> ### 0-1 概要<!-- 以降、教材のパートごとに0-1といった番号を降っていきます --> ・タイトル (例)Webアプリケーションを作ろう ・概要 <!-- ### 本レッスンのゴール --> <!-- 下記内容を 0章 はじめに へ移行 --> <!-- 本レッスン --><!-- 本教材では に変更 -->では、PHPのプログラミングの基礎を学びます。PHPでプログラミングして、Webページによくある入力フォームの送信機能を作ることがゴールです。 <!-- 最後には理解度チェックのための課題もありますので、ぜひチャレンジしてみましょう。 --><!-- 削除 Techpitのフォーマットに合わないため--> ### 本レッスンの概要 <!-- 学習内容に変更 --> <!-- 最初に、Webページを作成するための言語であるHTMLを学びます。--> <!-- 削除 本教材では扱わず、Web Designで学習する --> <!-- 次に、 --><!-- 本教材では に変更-->PHPというプログラミング言語を学びます。PHPはWeb開発のために作られたプログラミング言語で、そのためWebページ(HTML)との親和性も高く、初心者も学びやすいプログラミング言語として有名です。 <!-- そして最後に、 --><!-- 本教材の最終ゴールは などに変更 --> HTMLとPHPを組み合わせて簡単なWebアプリケーションを作成します。 #### 受講における必要条件  (例)HTML・CSSの基礎知識 #### この教材の対象者 (例)PHPを学んだことがある方 #### 学ばないこと (例)本教材では、大規模フレームワークの使用方法や、完全なMVCモデルの実装は行いません。 #### 本教材の対応バージョン (例)PHP8.0 #### 作成するアプリケーションのイメージをつかもう (例)https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_14.png #### 本教材に対応しているバージョン (例)PHP8.0 #### 目次 (例) * 0章 はじめに * 1章 ## 1章 環境構築 今回の場合、Windowsの人はXAMPP(ザンプ)、Macの人はXAMPP-VM、サーバーはApache HTTP Server、PHPはバージョン8系、データベース管理システムはMariaDBなど必要なツールを記載。Windows版とMac版両方を記述する。 テキストベースではなく画像を表示しながらの説明。 さらに、コードエディタとしてCloud9を使用するため、AWSアカウントの作り方〜Cloud9での仮想開発環境の説明を加える。Tool(Chrome,Cloud9)の教材と連動している場合、省略可能。 <!-- #### テキストのチェック方法 テキストを読み進めると「このチャプターを完了する」というボタンが現れます。 ![curriculum_01.png](https://techacademy.s3.amazonaws.com/bootcamp/lessons/orientation/curriculum_01.png) チャプターの内容を理解、実施したらこのボタンをクリックしてください。 クリックすると「完了済み」と表示されます。 ![curriculum_02.png](https://techacademy.s3.amazonaws.com/bootcamp/lessons/orientation/curriculum_02.png) どこまで進んだかのチェックにも役立ちますので、ぜひご利用ください。 まずはこのチャプターの完了ボタンをクリックしてみてください! --> <!-- 削除 Techpitのフォーマットに合わないため --> <!-- 以下削除 WebページについてはPHPの教材では扱わない。学習者の必要条件とする。 WebDesign講座もあるため。 --> <!-- ## Webページについて PHPを学ぶ前に、まずはWebページとは何なのかから学んでいきます。PHPはWebページのためのプログラミング言語なので、Webページが何かを先に学んでおくことで、その後の学習がスムーズになります。 ### Webページとは Webページとは、インターネット上にある、Webブラウザで閲覧可能なページ単位の文書のことです。 皆さんは、普段からパソコンやスマートフォンを使って様々なWebページを見ていることでしょう。GoogleやYahooのような検索サイトを使えば、検索キーワードと関連する様々なWebページへとアクセスすることができます。また、このTechAcademyのレッスンページも他と同様に、Webページです。 ### Webブラウザとは Webページを閲覧するのに必要なのは、Webブラウザです。 Webブラウザとは、Webページを閲覧するためのソフトウェアです。単にブラウザと呼ばれることや、ユーザーエージェント(UA)とも呼ばれます。Webブラウザというソフトウェアを起動してそのソフトウェア上でWebページを開いて閲覧しています。 Webブラウザの種類はいくつかあり、下記の4つが有名でしょう。 - Internet Explorer - Google Chrome - Safari - Firefox ### Webページの構成 Webブラウザが表示しているWebページは、**どのようにできている**のでしょうか? Webページを構成しているものは、主に下記の3つに分けられます。 - 文書 - デザイン - リソースファイル(画像や動画など) **文書**は、文章や、目次、アウトラインにあたります。このページでは「1. はじめに」といった本文のことです。文書がWebページのメインであり、伝えたい内容となります。 **デザイン**は、色やフォント、どこに何を配置するかのレイアウトなどを担当しています。このページでは、左側に本文、右側に目次を配置(PCで見た場合の配置)しています。また、内容が乱雑にならないように余白を適切にとったり、見出しの文字は大きく表示したりしています。文書が伝えたい内容であったのに対して、デザインは人間にとって文書が伝わりやすくするために工夫するところです。 **リソースファイル**は、画像や動画などのファイルのことです。このページでは、最初にお伝えしたTechAcademyでの学習の進め方の画像や、紹介動画を載せています。文書だけでなく画像や動画を使うことで、より理解しやすくなります。 #### HTML, CSS, リソースファイル 文書、デザイン、リソースファイルの3種類が、Webページを作っています。 Webブラウザを使ってWebページを表示すると、自動的に全て統合されて1つのページとして表示されますが、実はファイルはいくつかに分かれています。WebページをWebブラウザで開かずに、テキストエディタ(テキストファイルを編集するためのソフトウェア)などで開いてみると、下記のように分類されていることがわかります。 - 文書: **HTMLファイル** - デザイン: **CSSファイル** - リソースファイル: **それぞれ画像や動画ファイル** HTMLはWebページにおける**文書(情報のまとめ役)**を担当します。Webページを表示する場合に、HTMLは起点となります。CSS、リソースファイルもHTMLによって統合されます。HTMLはただのテキストファイルです。テキストエディタでHTMLファイルを開くと下記のような文字が書かれています。 *HTMLファイルをテキストエディタで開いたときのサンプル* ```html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>サンプル</title> <link rel="stylesheet" href="style.css"> </head> <body> <p>本文です。</p> </body> </html> ``` 実際の例も見ておきましょう。[Yahoo! JAPAN](http://www.yahoo.co.jp/){:target="_blank"}のHTMLファイルは下記のようになっています。 ![WebページとHTMLコード](https://techacademy.s3.amazonaws.com/bootcamp/common/html-css/yahoo_source.png) *Yahoo! JAPANの本来の姿(HTML)* これがYahoo! JAPANのHTMLです。なにやら `< >` で囲まれたものがいっぱいありますね。これはHTMLタグと呼ばれるものです。次のチャプター「HTMLの概要」でHTMLタグ( `< >` )について学びます。 CSSはWebページにおける**デザイン(見た目)**を担当します。デザインとは、Webページのレイアウトや色や背景、フォントのことです。CSSファイルもHTMLファイル同様に単なるテキストファイルです。テキストエディタでCSSファイルを開くと下記のような文字が書かれています。 ```css /* チャプター:CSSの実習準備 */ body { margin: 0; padding: 0; color: #333; font-size: 14px; } a { color: #333; } a:visited { color: #333; } ``` Webページの基本は、HTMLとCSSです。下記の2つのキャプチャ(Webブラウザで開いたもの)を見比べてみてください。 上がHTML(文書)だけのWebページ、下がCSS(デザイン)をHTML文書に適用したWebページです。HTMLだけのほうは文書(画像も含んでいるが)だけです。それに比べて下は見た目がキレイにデザインされています。 例えばページ上部のメニューリストでは、HTMLだけだとHOMEや講座案内が箇条書きになっているのに対して、CSSを適用させたWebページだと色がついてボタンのようになっています。 ![](https://techacademy.s3.amazonaws.com/training/htmlcss/html/techacademy-kitchen-html.png) *HTML文書だけのWebページ(ブラウザの自動デザインによって少しだけ色がついたりしている)* ![](https://techacademy.s3.amazonaws.com/training/htmlcss/html/techacademy-kitchen.png) *HTML文書にCSSを適用したWebページ* リソースファイルは主に画像ファイルです。他にも、動画ファイル、フォントファイル、Flashファイルなどがあります。リソースファイルはHTML内に埋め込まれる形でWebページとして表示されます。 ### Webページの表示 下記のような順番でWebブラウザが動作することで、HTMLやCSS、リソースファイルが統合され、Webページとして表示されます。 1. 指定のURLへアクセスし、HTMLファイル, CSSファイル, リソースファイル(画像ファイルなど)を取得する 2. 取得したHTML, CSS, リソースを解析する(読み込む) 3. 解析結果を基に、文字や画像を適切に配置し、あるいは文字の大きさを調整したり色を付けるなどしてWebページとして統合し、表示する WebブラウザからWebページを見ることによって、私たちが普段みているWebページとなります。 ここまでで、Webページがどのように作られているか理解できましたでしょうか。 次のチャプターから、実際にHTMLとCSSをどのように使うのか解説していきます。 ## HTMLの概要 PHPを学ぶ前に、HTMLを少しだけ学びます。既に理解している場合は読み飛ばして構いません。 ### HTMLとは HTMLは、HyperText Markup Language(ハイパーテキストマークアップ言語)の略で、Web上の文書を記述するためのマークアップ言語です。 と言っても最初はよくわからないので、まずはイメージをつかむために例を見てみましょう。 ### いつもの文書とHTMLの文書 例としてわかりやすいように、普段から目にする「いつもの文書」と「HTMLの文書」を比較してみます。 #### いつもの文書 みなさんは普段から文書を書いているはずです。文書といっても、ちょっとしたメモや、日記、SNSへのつぶやき、友達とのチャット、企画書、技術資料など色々あります。 例えば、買い物メモを書いたとしましょう。 *買い物メモ* ``` ・飲料水 ・パン ・牛乳 ・鶏肉 ``` この買い物メモでは、買うべきものリストを箇条書きにしています。この文書がリスト(箇条書き)だと思わせてくれる記号は何でしょうか。ずばり `・` です。行の始めに `・` を並べて書けば、多くの人はリストが書かれているという共通認識を持っています。 #### HTMLで文書を書き直し では、これをHTMLで書き直してみます。 *HTMLで書き直した買い物メモ* ```html <ul> <li>飲料水</li> <li>パン</li> <li>牛乳</li> <li>鶏肉</li> </ul> ``` これがHTML文書となります。 書かれていた情報自体に変更はありません。飲料水、パン、牛乳、鶏肉の情報はそのままです。 変わったものは、 `・` です。`・` は無くなり、代わりに `<ul>` や `<li>` などの記号が出てきました。この記号が **`・` の代わりに「これはリストだよ」という意味** を担っているのです。この記号を**HTMLタグ**と呼びます。Webページを作成するとき、最初にHTMLタグを使って文書を書くことから始めます。 ### なぜ文書をHTMLで書くのか なぜ文書をHTMLで書くのでしょうか?そもそも誰のためでしょうか。 HTMLは**Webブラウザのため**に記述されます。「Webページの表示」で述べたように、Webページを解析するのはGoogle ChromeやInternet ExplorerのようなWebブラウザです。解析された結果が、普段見ているWebページのようにデザインされて表示されます。(デザインはCSSを解析して表示されます) つまり、下記のようにHTMLで文書を書くと、ブラウザが正しく意味を認識してくれます。この場合は、飲料水、パン、牛乳、鶏肉という **リスト** です。 ```html <ul> <li>飲料水</li> <li>パン</li> <li>牛乳</li> <li>鶏肉</li> </ul> ``` 実際に上記のコードをWebブラウザで表示したらどのようになるでしょうか。 下記をご覧ください。左側はHTML文書、右側はHTMLをWebブラウザが解析した表示結果です。 <div class="alert alert-warning"> 現在日本語だと文字化けしてしまう問題が発生しています。リスト内の日本語をアルファベットのみに変更(water, bread, milk, chickenなど)すると、文字化けは起こりません。日本語で表示したい場合には、このレッスンの「7.1 リスト」をご覧ください。 </div> ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_01.png) 右側の表示結果をよくみると、 `・` が表示されています。これは自分で書いた `・` ではなく、Webブラウザによって自動的に表示されているものです。 今回の買い物メモでの例で、**Webブラウザの一連のHTML読み込み(解析)動作**を想像してみましょう。以下の主語は全てブラウザです。 1. HTMLで書かれた買い物メモを読み込む 2. 1行目に`<ul>`があるので、ここからリストが始まるとわかる 3. 2行目に`<li>`があるので、リスト内の1つの項目だとわかる 4. 2行目の終わりに、`</li>`で閉じられているので、リスト内の1つの項目がここまでで終わりだとわかる 5. 3,4を繰り返す 6. 最後に`</ul>`で閉じられているので、リストはここまでだとわかる 7. 買い物メモのHTML文書ファイルがここまでなので、人が読みやすいように表示する( `・` を表示させる) このような手順で動きます。最終的には人が見てリストだとわかるように、ブラウザが `・` を表示します。 ここでは、`<ul>`や`<li>`のように`< >`で囲まれたもの(HTMLタグ)で、情報に型(アウトラインなど)を与えるのがHTMLだと言うイメージを持つことができれば、それで問題ありません。 ## CSSの概要 CSSとは、Cascading Style Sheets(カスケーディングスタイルシート)の略で、スタイル、つまりWebページをデザインするための言語です。 CSSが必要なのは、HTMLだけでは文書を書くことしかできないからです。HTMLでは、ページのレイアウトや文字に色をつけるといったデザインはできません。 ### CSSの文法 CSSは「HTML内の○○要素の△△を□□にする」といったイメージでスタイルを設定します。 ``` セレクタ { プロパティ: 値; } ``` CSSの文法はこれだけで、セレクタ・プロパティ・値の3つで構成されています。この形を上から下へ、いくつも書いていくことになります。 * セレクタは、HTMLのどの部分にスタイルを適用するかを指定します。 * プロパティは、スタイルの種類を指定します。 * 値は、プロパティで指定されたスタイルの値を指定します。 ※値のあとにある`;`を忘れないようにしてください ### 文字色を変える とても簡単な例として、先ほど表示されたリストの文字色を`青色(blue)`で表示してみましょう。 *ulで囲んだリストの文字色を青にするCSS* ```css ul { color: blue; } ``` 下記にページに埋め込まれているものはCodePenというものです。上部にHTML, CSS, Resultのボタンがあります。HTMLボタンを押すとHTMLの内容が表示され、CSSボタンを押すとCSSの内容が表示されます。Resultボタンを押すとHTMLとCSSを統合した結果が表示されます。 この例では右側(Result)の表示が青色になっていますね。 <p data-height="249" data-theme-id="0" data-slug-hash="ALEZqE" data-default-tab="css,result" data-user="techacademy" data-embed-version="2" class="codepen">See the Pen <a href="http://codepen.io/techacademy/pen/ALEZqE/">ALEZqE</a> by TechAcademy (<a href="http://codepen.io/techacademy">@techacademy</a>) on <a href="http://codepen.io">CodePen</a>.</p> <script async src="//assets.codepen.io/assets/embed/ei.js"></script> ### まとめ ここまで、HTMLとCSSの基礎を解説してきました。HTMLがブラウザのための言語であり、ブラウザはそれを解析してユーザーに表示しています。CSSは、HTMLという文書のデザインを補うために存在する言語です。CSSは文字色を変えたり、レイアウトを変更したりするのに必須の言語です。 - HTMLは、Webページの文書を担当する。HTMLで文書を書くとブラウザに意味が伝わる。 - CSSは、Webページのデザインを担当する。CSSがあればWebページをキレイに作れる。 全てのWebページはHTMLとCSSで作られているので、**Webで何かをするなら、HTMLとCSSから学ぶ必要があります**。 HTMLとCSSの基礎がわかったら、次はいよいよプログラミング言語のPHPを扱っていきます。 --><!-- ここまで削除 --> ## PHPの概要 <!-- 2章 PHPの概要 に変更 --> PHPの基礎から学んでいきましょう。 ### PHPとは <!-- 2-1 PHPとは に変更 --> PHPはプログラミング言語の1つです。PHPはWebページの作成のために作られたプログラミング言語で、HTMLとの親和性が高く、かつ学びやすくなっています。 PHPはコンピュータに命令するための言語で、コンピュータへの命令書(プログラム)を作成することこそがプログラミングです。 ### PHPを選ぶ理由 <!-- 2-2 PHPを選ぶ理由 に変更 --> 数あるプログラミング言語の中でも<!--無料体験では --><!-- 削除 Techpitのフォーマットに合わないため-->PHPを選びました。最初に学ぶ言語としてPHPを選んだ理由は大きく2つあります。 1つ目に、Webページを作成するために作られたプログラミング言語だということです。そのため、PHPはHTML文書に処理を埋め込みやすくなっています。他のプログラミング言語の多くはWebページ作成を目的として作られておらず、あとからWebページ作成にも使われるようになったという経緯があります。 2つ目に、PHPは多くのWebサービスで使用されている実績があります。Yahoo! JAPANや、Facebookのような大規模なWebサービスもPHPで作成されています。また、ブログやコーポレートページを作るためのCMSとして有名なWordPressもPHPで作成されています。PHPを学んでいけば、大規模なWebサービスや、WordPressのカスタマイズなども可能になります。 PHPはWebのために作られた言語なので、動的なWebページ作成のための最初のとっかかりには最適です。 他にWebページを作成するためにおすすめのプログラミング言語としてRubyがあります。<!-- (TechAcademyのWebアプリケーションコースではRubyを使用しています) --><!-- 削除 Techpitのフォーマットに合わないため --> ### PHPが生まれた理由 <!-- 2-3 PHPが生まれた理由 に変更 --> PHPがどういう必要性で生まれたのかを考えてみましょう。例えば、下記のようなHTMLの一文があったとします。`<p>...</p>` は、**パラグラフ(文章の段落単位)を表すHTMLタグ**です。なので、`p`で囲まれたものは文として扱われます。 ```html <p>こんにちは、太郎さん。</p> ``` これが書かれたWebページをブラウザで開くと、`こんにちは、太郎さん。`と単に表示されます。 しかし、これではどんな名前の人が来ても`太郎さん`と表示されてしまいます。 これを下記のようにプログラムを使って改善しましょう。`(入力フォームで受けとった人の名前)`を表示できるようにすれば、ちゃんと相手の名前を判断して挨拶をすることができそうです。 ```html <p>こんにちは、(入力フォームで受けとった人の名前)さん。</p> ``` PHPはこのように、HTMLに対して応用力を持たせるために生まれました。HTMLだけでは、太郎さん以外には対応できませんが、PHPを使って名前(データ)を出し分けることができれば、誰にでも対応できます。 ### プログラムを使って表示データを出し分ける <!-- 2-4 プログラムを使って表示データを出し分ける に変更 --> さらに時間帯によって、「おはよう」や「こんばんは」と言い換えることもできます。 ```html <p>(時間帯によって言い方を変えた挨拶)、(入力フォームで受けとった人の名前)さん。</p> ``` このように、Webプログラミングを行うことで、条件(時間帯など)によって適切な文言を出し分けることができます。そうなれば、HTMLには実データを多く入れる必要がなくなり、HTMLは受け取ったデータ(時間帯によって言い方を変えた挨拶)を表示する単なる入れ物(雛形)になります。実際に上記HTMLコードには、`<p> 、 さん。</p>`という文字しか入っていません。あとはプログラムによって出し分けされたデータが埋め込まれます。 のちほど、この挨拶だけのWebアプリケーション(動的なWebページ)を作成してみますので、そこで深く理解できるはずです。 ## 実践の開始 <!-- 3章 実践の開始 に変更 --> ### 3−1 ここからの進め方 <!-- 3-1 ここからの進め方 に変更 --> さて、ここからは実践に入ります。 実際にPHPファイルを作成し、プログラムを実行させることになります。 ただし、実践せずに **そのまま読み進めるだけでも理解ができる** ような構成になっています。そのため、自分で実際に試したいと思ったタイミングで、ツールを準備してください。ツールは無料で使用できますが、準備に多少の時間(10分ほど)がかかります。 <!-- ### 準備するツール 準備するツールは4つあります。ご自身のタイミングでツールを準備してください。 - Google Chrome - Cloud9 - Appear(メンタリングでのみ使用します)  - Gyazo(任意) [「使用ツールの準備」のレッスンを開く](tools){:target="_blank"} --> <!-- 環境構築の部分に移行 1章で詳述、Appearについてはメンター制度がないため削除 --> ### HTMLタグ <!-- 3-2 HTMLタグ に変更 --> 準備ができたらHTMLを実際に書いていきましょう。 <!-- 無料体験では、 --><!-- 削除 Techpitのフォーマットに合わないため -->HTMLタグを3つ学びます。 - リスト (`<ul>`, `<li>`) - 文章 (`<p>`) - フォーム (`<form>`, `<input>`) それぞれ見ていきます。 ### リスト <!-- 3-3 リスト に変更 --> リストは先ほど学んだものです。まず、`ul`と`li`の意味は何でしょうか。 - `ul` とは、Unordered Listの略で、順番なしのリストという意味です。 - `li` とは、List Itemの略で、リスト内の1つの項目という意味です。 それではCloud9を使って実際にHTMLを書いてみましょう。Cloud9を開いてください。 Cloud9上で、 *test.html* を作成して、下記のように書いてみましょう。(具体的な手順は、下記の「キャプチャによる手順の説明をご覧ください) *test.html* ```html <head><meta charset="utf-8"></head> <ul> <li>飲料水</li> <li>パン</li> <li>牛乳</li> <li>鶏肉</li> </ul> <ul> <li>飲料水</li> <li>パン</li> <li>牛乳</li> <li>鶏肉</li> </ul> ``` <!-- 現在、 **Chromeの最新版では文字化けが発生** しております。これは Chrome 側のバグなので、一時的な対処として `<head><meta charset="utf-8"></head>` を最初に記述しています。これで文字化けを回避することができます。 Chrome のバグが修正され次第、最初の1行は消去させていただきます。以降の HTML, PHP でも同様に `<head><meta charset="utf-8"></head>` を一行目に加えましょう。 --><!-- 解決済みのため削除--> ここで、気をつけたいのが、 `<ul>` という**開始タグ**に対しては `</ul>` という**終了タグ**が対になって書かれているということです。これは`<li>`と`</li>`でも同じです。 ### キャプチャによる手順の説明 <!-- 3-4 キャプチャによる手順の説明 に変更 --><!-- キャプチャ画像の最新バージョンへのアップデート --> ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_02.png) ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_03.png) ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_04.png) ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_05.png) HTMLが書けたら、プレビューで表示してみましょう。 ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_06.png) ### 文章 <!-- 3-5 文章 に変更 --> 文章に対しては `<p>` というHTMLタグを使用します。`p` はパラグラフ(段落)を略しています。つまり、文章は段落毎に `<p>` を使用することになります。`<p>`にも`</p>`があります。 Cloud9上で先ほど作成した *test.html* に下記を上書きしましょう。(7.1 リストで入力したものは消して構いません) *test.html* ```html <head><meta charset="utf-8"></head> <p>こんにちは、太郎さん。</p> ``` <!-- ※ `<head><meta charset="utf-8"></head>` は一時的な文字化け対策となります。 --><!-- 削除 文字化け対策というより、utf-8については毎回書くため、なぜ書くかについては、Web Designで学習。--> ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_07.png) ### フォーム <!-- 3-6 フォーム に変更 --> フォームに対しては `<form>` というHTMLタグを使用します。さらにformの中に、`<input>`をいくつか入れることで入力欄が生成されます。なお、例外として`<input>`は終了タグ(`</input>`)がありません。 他に、`<form action="index.php" method="POST">`や、`action="index.php"`や`method="POST"`のような設定があります。この組み合わせを属性と属性値と呼びます。`action`や`method`はのちほどPHPを学びながら解説します。 また、inputの属性に関しては、`type`が入力タイプで、`text`は通常のテキストが入力可能、`number`は数字のみ入力可能、`submit`は送信ボタンになります。`name`は後ほどPHPで学びます。`placeholder`は入力支援のために薄くグレーで背景に溶け込んでいる入力ヒントののようなものです。 *test.html* ```html <head><meta charset="utf-8"></head> <form action="index.php" method="POST"> <input type="text" name="nickname" placeholder="入力例: 太郎"> <input type="number" name="hour" placeholder="入力例: 21"> <input type="submit" name="submit" value="送信"> </form> ``` <!-- ※ `<head><meta charset="utf-8"></head>` は一時的な文字化け対策となります。 --><!-- 削除 一時的な文字化け対策というより、utf-8については毎回書くため。なぜ書くかについては、Web Designで学習。--> 表示を確認してみましょう。 ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_08.png) 無事にフォームが表示されましたか? ただし、このままではフォームを送信しても何の反応もありません。フォームを処理するプログラムがないからです。 このフォームが実際に使えるように次からPHPを学んでいきましょう。 ## PHPの文法ルール <!-- 4章 PHPの文法ルール に変更 --> それではまずは、PHPのルールについて学びましょう。 ### PHPファイル <!-- 4-1 PHPファイル に変更 --> PHPファイルも、HTMLファイルやCSSファイルと同じくテキストファイルです。拡張子は*.php*です。 HTMLファイルと同じように、Cloud9上で編集・保存していきましょう。 ### PHPプログラムが動く順番は上から下 <!-- 4-2 PHPプログラムが動く順番は上から下 に変更 --> PHPに限らずプログラムは、人間が文章を読むように、**上から下、同じ行なら左から右**へ向かって実行されます。下記のようにPHPファイルのソースコードがあると、このプログラムは`PHPの命令1`を最初に実行し、次に`PHPの命令2`、最後に`PHPの命令3`を実行することになります。 ``` PHPの命令1 PHPの命令2 PHPの命令3 ``` ### PHPの開始と終了 <!-- 4-3 PHPの開始と終了 に変更 --> PHPはHTMLに埋め込めるように開発されたプログラミング言語です。そのため、HTMLのタグのようなもので囲うのがルールとなっています。開始タグには`<?php`を使い、終了タグには`?>`を使います。 ```php <?php 開始タグと終了タグの中にPHPプログラムを書く ?> ``` 今後のPHPプログラムでもこの開始と終了をしっかり宣言しておきましょう。 また、phpタグ内では1つインデント(半角スペース4つ)入れて、見やすくしています。 ### データの表示 - print それでは、プログラムを実行してみるので、Cloud9 を開いてください。 Cloud9上で、 *test.php* を作成しましょう。 `print`という命令はデータを表示するときに使用します。 *test.php* ```php <?php print "こんにちは"; ?> ``` ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_09.png) 実際に上記コードをCloud9でプログラミングして*test.php*として保存してください。 ### - PHPはターミナル上で実行される <!-- 4-4 PHPはターミナル上で実行される に変更 --> 多くのプログラミング言語は、ターミナル上で動作します(ターミナルについてはこのあと解説します)。PHPも例外ではなく、ターミナル上で動作します。ターミナルには、`php`というコマンドが用意されており、このコマンドがPHPファイルを実行するためのコマンドになります。 ターミナルの`php`コマンドを使用して*test.php*を実行してみましょう。 *ターミナルで実行($は入力しない)* ``` $ php test.php ``` ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_10.png) 上記のように実際にターミナル上で`php test.php`と打ち込んで<kbd>Enter</kbd> キー(Macの場合は <kbd>return</kbd> キー)を押してください。コマンドを入力したあとに、<kbd>Enter</kbd> を押すと実行されます。`こんにちは` が表示されたでしょうか?表示されれば正常に実行できたことになります。今後は何かあれば上記の方法でPHPファイルを実行してください。<!-- 動作しないという場合には、チャットでメンターに聞いてみましょう。 --><!-- 削除 Techpitのフォーマットに合わないため --> なお、ターミナルが表示されていない場合は、Cloud9の上部にある「View」から「Console」にチェックを入れて表示させてください。 #### コマンドの前の$について <!-- 削除 --> <!-- コマンドを実行して欲しいときに、下記のように`$`から始めます。`$`はターミナルだよという意味に過ぎません(先ほどのキャプチャにあるCloud9のターミナルのところに`$`があることを確認してください)。そのため、`$`以降のコマンドを入力してください。下記の場合は、`php test.php`が実際のコマンドになります。 --><!-- Techpitでは、$と言ったプロンプトを省略して記述しているため --> ``` $ php test.php ``` #### ターミナルとは <!-- 4-5 ターミナルとは に変更 --> ここでターミナルについて補足しておきます。 ターミナルとは、**コマンドと呼ばれる命令文を用いてコンピュータの操作をおこなうツール**です。コマンドは、UNIXコマンドや、Linuxコマンドと呼ばれます。UNIXやLinuxはWindowsやMacのようなOSのことで、ターミナルがメインのOSです。実はMac(OSX)はUNIXから派生して作られたOSなので、ターミナルを持っています。 WindowsやMacなどの最近のOSでは、起動するとグラフィカルなデスクトップが立ち上がり、多くの操作をマウスを使って操作することができます。ダブルクリックでアプリを起動し、用意された様々なボタンやメニューを駆使することで多くの操作が可能となっています。しかし、昔のコンピュータを起動すると、コマンドを入力する画面が立ち上がり、コマンドを入力することでコンピュータを操作していました。 ただし、今でも開発者はターミナルを利用します。基本的に開発ツールが `php` のようにコマンドとして提供されるからです。コマンドで提供される理由は、グラフィカルなソフトウェアを用意するのには開発コストがかかり大変なのに対して、コマンドは開発しやすく、個人の環境にも依存しにくいからです。 これからターミナルの `php` コマンドを使用して実際にプログラムを動作させていきます。Cloud9でもターミナルが自動的に立ち上がっているので、見てみましょう。このbashと書いているものがターミナルです。 ![](https://techacademy.s3.amazonaws.com/training/github/terminal/terminal_01.png) その隣にある `Immediate (JavaScript (browser))` タブは、ターミナルではなく、JavaScriptを動作させるものなので閉じてしまっても構いません。 **ターミナルもグラフィカルなデスクトップも操作対象はどちらも同じコンピュータなので、フォルダ構成は全く同じです。** ##### ターミナルのタブを増やす、閉じる 下記のキャプチャの通りにすると、ターミナルを増やすことができます。 ![](https://techacademy.s3.amazonaws.com/training/github/terminal/1-new_bash.png) ☓ボタンをクリックするとターミナルを閉じることができます。 ##### 文末のセミコロン <!-- 4-6 文末のセミコロン に変更 --> PHPでは命令を一文書く度に`;`を書くのがルールです。日本語でも文末には`。`を書くのが決まっていますが、PHPでも同じように文末は`;`と決まっています。 ```php <?php print "こんにちは"; ?> ``` PHPの1文は1行かどうかで判断されるわけではなく、`;`で判断されます。したがって、下記のように書いても上記コードと同じく1文と判断されます。つまり、半角スペースや改行は無視されます。 ```php <?php print "こんにちは" ; ?> ``` ただし、上記のようなコードでははわかりにくいので、実際にはわかりやすく書くようにしましょう。 ##### 実行 <!-- 4-7 実行 に変更 --> 一文が行ではなく`;`で判断されていることを確認するために、下記コードを`php`コマンドで実行してみましょう。 *test.php* ```php <?php print "こんにちは" ; ?> ``` 上記コードを*test.php*として上書きして、実行してみましょう。 ``` $ php test.php ``` 先ほどと同じく、`こんにちは`が表示されれば問題ありません。 <!-- 5章 PHPの基本文法 を追加 --> ### 変数 <!-- 5-1 変数 に変更 --> 引き続き、PHPが持つプログラミングのための機能を学んでいきます。 ### 変数へデータを代入 プログラム内部では、データをどこかに保存しておかないと不要だと判断されて勝手に消去されていきます。せっかく導き出した答えがコンピュータに勝手に消去されては困りますね。 コンピュータに、これは必要なデータだから保存しておくんだよ、という命令が**変数への代入(変数にデータを保存)**です。変数はとりあえずデータを保存しておける箱だと考えましょう。また、変数という箱に入れておくことで、何度でも使いまわすことができます。 ![](https://techacademy.s3.amazonaws.com/training/trial/php/variable.png) では変数へ代入して、データを一時的に保存してみましょう。 *変数への代入* ```php <?php $greeting = "こんにちは"; ?> ``` `$greeting`が変数(greetingは挨拶という意味の英単語)で、`"こんにちは"`が変数に保存される文字列データとなります。`$`の後に英数字を付けると変数になります(ターミナルの`$`とは無関係です)。 `=`は数学でのイコールとは使い方が違って、右側から左側への代入を表しています。変数にデータを代入しています。 ##### 実行 *test.php* ```php <?php $greeting = "こんにちは"; print $greeting; ?> ``` 実際に上記を実行してみましょう。 ``` $ php test.php ``` `こんにちは`という文字が表示されるはずです。`print`に変数が渡されると、変数名である`$greeting`を表示するのではなく、変数の中に入っている実際のデータ(ここでは`こんにちは`という文字列)が引き出されて表示されます。 ## 条件分岐 <!-- 5-2 条件分岐 に変更 --> ここまでで、変数に値を代入して、それを表示することはできるようになりました。 次に条件分岐するプログラムを学びます。条件分岐は、ある条件を指定して、合っていればコードを実行し、そうでなければ別のコードを実行するというような、プログラムに条件を判断させて実行処理を分岐させるものです。 今までは、ただ上から下へ全てのプログラムを実行していたプログラムでしたが、ここからは**場合によっては実行しないプログラム**が出てきます。上から下に実行する基本的な順番は守られていますが、条件によって実行するかしないか変化します。条件分岐はプログラムの実行をいろいろなパターンへ対応させ、プログラムの幅を大きく広げてくれるものです。 ### if文 条件分岐の代表はif文です。英語でもifは「もし〜ならば」という訳になります。プログラムでも同じく、「もしこの変数が0以上であれば」のような条件を付けて、実行するプログラムを分岐させ、実行するものと実行しないものに分けることができます。 if文では、状況に応じてコンピュータに判断させるために、いくつかの場合に分けてあらかじめ決めた処理を書きます。PHPでif文を書いてみましょう。 *test.php* ```php <?php $number = 10; if ($number > 5) { print 'ここだけ表示される'; } if ($number <= 5) { print 'ここには絶対来ない'; } ?> ``` 上記コードを実行してみましょう。`if ($number > 5) { ... }`だけが実行され、`if ($number <= 5) { ... }` は無視されます。if文は直後の`()`の中に書いてある条件が**正しければ実行**されます。`$number = 10;` だったので、 `5` より大きい数です。そのため、今回のコードは`if ($number > 5)`の書いてある`{...}`の中身だけが実行されます。 また、`else` という文を書くことで `$number > 5` の反対である `$number <= 5` を書く必要がありません。 else は英語で **その他** という意味で、 ifで書かれた条件の正反対の条件であれば実行されます。 *test.php* ```php <?php $number = 3; if ($number > 5) { print 'ここには絶対来ない'; } else { print 'ここだけ表示される'; } ?> ``` `else`とは`if`の対として書かれ、if側が実行されなかった場合に実行されます。今回は `$number = 3` で `if ($number > 5)` は誤りなので、`else` 側が実行されます。 毎回同じ処理をしてもつまらないので、ランダムな数字を生成してif文の動きを見ていきましょう。 *test.php* ```php <?php $number = mt_rand() % 10; if ($number < 5) { print "{$number}は5より小さい数"; } else { print "{$number}は5以上の数"; } ?> ``` 上記の*test.php*を10回ほど実行してみてください。`$number`の値が実行するたびに変わって、それによって表示される文字列もif文によって変わったはずです。`print "..."` の中は `{$hour}` のように `{変数名}` とすることで変数の中身を埋め込むことができます。 `mt_rand() % 10`は`0 ~ 9`のランダムな数を生成します。特に深く理解する必要はないですが、知りたい方のために少し解説します。(下記を読んで理解できなくても問題ありません) `mt_rand()`で生成される数は、0 〜 2,147,483,647(2の31乗-1)の、2,147,483,648(2の31乗)個の数字のうちの1つです。これほど大きな数ではなくて、0 〜 9までのランダムの数が欲しいときは、`mt_rand()`で取得した数の一桁目だけを取り出せば良さそうです。一桁目を取りだすには10で割った余りをみれば良いので、`mt_rand() % 10`という計算式(`%`は余り計算)をして、`$number`には0 〜 9までのランダムな数が代入されます。 次にif文の動きを見ていきましょう。`$number`に`$number < 5`な条件を満たす数(0 〜 4)が来れば、`$number < 5`は正しいので、if文が実行され、`1は5より小さい`と表示されます。逆に`$number`に`$number < 5`な条件を満たさない数(5 〜 9)が来れば、`$number < 5`は誤りなのでelse文が実行されます。 さらに、`elseif`を加えれば条件を3パターン以上に増やすことができます。 *test.php* ```php <?php $number = mt_rand() % 10; if ($number < 3) { print "{$number}は3より小さい数"; } elseif ($number < 6) { print "{$number}は3以上で6より小さい数"; } elseif ($number < 8) { print "{$number}は6以上で8より小さい数"; } else { print "{$number}は8か9しか来ません"; } ?> ``` ![](https://techacademy.s3.amazonaws.com/bootcamp/first-programming/php/6-2.png) これで条件分岐は完璧です。if-elseif-elseとできることを覚えて、その中に必要な条件を書けば、条件によって処理を分岐させることができます。 PHPが使える命令や文法の基礎は以上です。 ## HTMLへの埋め込み用としてPHPを使う <!--6章 HTMLとPHPを使ってアプリケーションを作ろう  などに変更--> ここからはPHPでWeb用に応用していきましょう。 雛形のHTMLにデータを埋め込むためにPHPを使うのが、WebプログラミングとしてのPHPの使い方です。 今までPHPをターミナルで実行してきたので、PHP(プログラム)を実行すると、`print`に与えたデータが表示されることは、もう理解できているはずです。 ### PHPが入っていないHTMLファイルをPHPファイルとして扱う <!-- 6-1 PHPが入っていないHTMLファイルをPHPファイルとして扱う に変更 --> まずはHTMLファイルを*test.php*として保存してみましょう。 *test.php* ```php <p>こんにちは、太郎さん。</p> ``` そしてこれをターミナルでPHPとして実行してみます。何が返ってくるでしょうか? ##### 実行 ``` $ php test.php ``` 実は、そのまま何の変更もなく返ってきます。なぜなら、`<?php ... ?>`がないからです。`php`コマンドは`<?php ... ?>`以外の部分はそのまま文字列を返します。 *実行結果* ``` <p>こんにちは、太郎さん。</p> ``` これで、HTMLファイルをPHPで実行しても何の変化もないことがわかりました。 ### PHPをHTMLに埋め込んでみる <!-- 6-2 PHPをHTMLに埋め込んでみる に変更 --> #### print文を埋め込む それでは、HTMLに埋め込む形でPHPを書いてみます。body要素内の`本文です。`を書き換えてPHPの命令を埋め込んでみましょう。 *test.php* ```php <?php $nickname = "太郎"; ?> <p>こんにちは、<?php print $nickname; ?>さん。</p> ``` そしてこれをターミナルでPHPとして実行してみます。何が返ってくるでしょうか? ##### 実行 ``` $ php test.php ``` 実行前に想像できたかもしれませんが、HTMLタグの中だとしても、PHPコードを埋め込めばPHPが実行されてHTMLが返ってきます。 *出力結果(PHP => HTML)* ``` <p>こんにちは、太郎さん。</p> ``` 返ってきた結果を見ると、`<?php ... ?>`で囲んだ部分は実行されて、`太郎`という文字列がHTMLに埋め込まれていることがわかります。他の例として、`$nickname = "花子"` とすると、`太郎`が`花子`に変わります。 #### HTMLタグごと埋め込む <!-- 6-3 HTMLタグごと埋め込む に変更 --> 先ほどは、`<p><?php print $nickname; ?></p>`として、`<p><?php PHPコード ?></p>`のようにp要素の中にPHPコードを入れました。今度は、PHPコードの中にHTMLタグを入れてみます。`"`を囲んだ文字列の中に変数を入れたい場合には、`{$nickaname}`のように`{}`で変数を囲みます。 *test.php* ```php <?php $nickname = "太郎"; ?> <?php print "<p>こんにちは、{$nickname}さん。</p>"; ?> ``` ##### 実行 ``` $ php test.php ``` これも同じ結果になります。`print`はHTMLタグでも問題なく出力できます。 *出力結果(PHP => HTML)* ``` <p>こんにちは、太郎さん。</p> ``` #### if文を埋め込む <!-- 6-4 if文を埋め込む に変更 --> どうやってWebアプリケーションを作るのか、なんとなくわかってきたのではないでしょうか? 下記のコードは、現在時刻によって`おはよう`と`こんにちは`と`こんばんは`を使い分けるプログラムです。 `$nickname`には名前が、`$hour`には現在時刻が代入されます。そして、`$hour`に入っている現在時刻をif文で判断して、`$greeting`に今の時間帯に適切な挨拶の言葉が代入されます。 また、`&&`がありますが、これは `〜かつ〜` という意味で、条件が2つ以上のものを同時に満たす必要があるときに使用されます。`6 <= $now_hour && $now_hour < 12`は`$now_hour`が`6`以上で、かつ、`12`未満の場合です。 *test.php* ```php <?php $nickname = "太郎"; $hour = 15; if (6 <= $hour && $hour < 12) { $greeting = "おはよう"; } elseif (12 <= $hour && $hour < 18) { $greeting = "こんにちは"; } else { $greeting = "こんばんは"; } print "<p>現在時刻は{$hour}時ですね。</p>"; print "<p>{$greeting}、{$nickname}さん。</p>"; ?> ``` ##### 実行 ``` $ php test.php ``` ``` <p>現在時刻は15時ですね。</p> <p>こんにちは、太郎さん。</p> ``` 実行結果を見ると、現在時刻と太郎さんへの挨拶が表示されています。`print` の中で使用されている変数は `$hour` と `$greeting` と `$nickname` です。 上記プログラムでは、`$nickname` と `$hour` は初期設定で決めてしまい、`if` で `$hour` の数値をみて処理を分岐させています。6時〜12時前は「おはよう」、12時〜18時前は「こんにちは」、それ以外の時間帯は全て「こんばんは」が表示されます。 今回は `$hour = 15;`, `$nickname = "太郎";` と決めていたので、常に同じ結果が表示されますが、後ほど、フォームと組み合わせて `$hour` や `$nickname` に応用力をもたせます。 ## Webサーバを起動してPHPを自動的に実行させる <!-- 7章 Webサーバを起動してPHPを自動的に実行させる に変更--> さて、ここまでターミナルの`php`コマンド(`$ php test.php`)を使ってPHPファイルを実行してきました。しかし、実際には、ユーザからのアクセスがある度に管理者がわざわざターミナルで`php`コマンドを入力していてはプログラムの意味がありません。 人の代わりに`php`コマンドを実行してくれるものとしてWebサーバがあります。ここからは、Webサーバを起動してPHPが自動的に実行させる方法について学んでいきます。 ### index.php <!-- 7-1 index.php に変更--> まずは、 *test.php* として作成してきたPHPファイルを *index.php* というファイル名でコピーしてください。 *index.php* がないとWebサーバを起動してもWebページが表示されないからです。 *index.php* ```php <head><meta charset="utf-8"></head> <?php $nickname = "太郎"; $hour = 15; if (6 <= $hour && $hour < 12) { $greeting = "おはよう"; } elseif (12 <= $hour && $hour < 18) { $greeting = "こんにちは"; } else { $greeting = "こんばんは"; } print "<p>現在時刻は{$hour}時ですね。</p>"; print "<p>{$greeting}、{$nickname}さん。</p>"; ?> ``` <!-- ※ `<head><meta charset="utf-8"></head>` は一時的な文字化け対策となります。 --><!-- 削除 一時的な文字化け対策というより、utf-8については毎回書くため。なぜ書くかについては、Web Designで学習。--> ### リクエストとレスポンス <!-- 7-2 リクエストとレスポンス に変更--> ここで少し、Webサーバの挙動も簡単に学んでおきましょう。 #### コンピュータも客と店員のように会話する コンピュータ同士の通信は、お客さんと店員のやり取りに似ています。お客さんは店員に要求し、店員はその要求に対して応えます。例えば、飲食店では、お客さんは「注文いいですか?ハンバーグ定食を1つください」と要求します。それに対して店員はお客さんに待ってもらい、シェフに料理を頼み、料理が完成すると、「お待たせしました。ハンバーグ定食です。」と料理を渡します。 #### クライアントとサーバのリクエストとレスポンス コンピュータ同士の通信も全く同じです。要求する側のコンピュータがいて、それに応答する側のコンピュータがいます。このとき、要求する側のコンピュータをクライアントコンピュータと呼び、応答する側のコンピュータをサーバコンピュータと呼びます。そして、コンピュータがコンピュータに要求することを**リクエスト**と呼び、それに対して返事をすることを**レスポンス**と呼びます。 この通信方式をクライアント/サーバモデルと呼びます。コンピュータ通信のほとんどはこのクライアント/サーバモデルによって成り立っています。 ![](https://techacademy.s3.amazonaws.com/bootcamp/first-programming/internet/4-1.png) ### Webサーバ - Apache HTTP Server <!-- 7-3 Webサーバ - Apache HTTP Server に変更--> Webサーバとは、**HTTPリクエストを受け取り、HTMLなどのWebページをHTTPレスポンスとして返すサーバ**のことです。 単なるHTML/CSSだけのWebページ(PHPなどのプログラムがないページ)であれば、Webページ(HTMLやCSS)をそのままレスポンスとして返すだけですが、リクエストで要求されたWebページがPHPで出来ていると、`php`コマンドを実行して出力されたWebページ(HTMLやCSS)をレスポンスとして返します。 仮にWebサーバを起動しなければ、HTTPリクエストが来ても誰も対応する役割がいないので、HTTPリクエストは無視されます。HTTPリクエストが来た時にWebサーバが起動していれば、何らかのレスポンスを返します。 <!-- **※HTTPとは、Web上での通信を指します。無料体験では詳しく学びませんが、Web上の通信だと知っておけばここでは充分です。** --><!-- 削除 Techpitのフォーマットに合わないため --> ![](https://techacademy.s3.amazonaws.com/bootcamp/first-programming/php/6-4.png) 今回はWebサーバとしてApache HTTP Serverを使用します。Apache HTTP Serverは、Webサーバとして最も有名で、古くから利用されてきました。単にApacheとも呼ばれます。Cloud9でもあらかじめ用意されています。 ### Webサーバの起動 <!-- 7-4 Webサーバの起動 に変更--> Webサーバを起動してみましょう。Cloud9にはWebサーバを簡単に起動するボタン(「Run Project」)が用意されています。「Run」ボタンを押しましょう。 ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_11.png) ターミナル画面に下記のようなログが表示され、`ユーザ名`のところは皆さんのCloud9のユーザ名が入ります。 ``` Starting Apache httpd, serving https://techacademy-trial-htmlcss-ユーザ名.c9users.io/. Started apache2 ``` このログの意味は、下記の通りです。 ``` Apache httpd を起動開始、https://techacademy-trial-htmlcss-ユーザ名.c9users.io/ というURLで提供開始 apache2 を起動しました。 ``` ここで、`Apache httpd`や`apache2`と書いているものはどちらも同一で、Apache HTTP Serverのことです。 サーバを起動すると、サーバはリクエストを待つ状態になります。この状態でリクエストが来ると、レスポンスを返します。Webサーバの場合、HTTPリクエストが来ると、レスポンスとしてHTMLやCSS(Webページ)を返します。 実際に、 `https://techacademy-trial-htmlcss-ユーザ名.c9users.io/` にアクセスしてください。Cloud9に残っているログはリンクとしてクリックできるので、「Open」もしくは「Open Preview」で表示してください。 *index.php* をPHPで実行した結果が表示されます。 ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_12.png) ### Webサーバがしたこと <!-- 7-5 Webサーバがしたこと に変更--> ここまでWebサーバを使ったときの流れを解説します。 1. Webサーバ(Apache HTTP Server)を起動(Run)して、リクエストを受け付ける状態にした 2. Webブラウザで `https://techacademy-trial-htmlcss-ユーザ名.c9users.io/` にアクセス(リクエスト)を送る 3. Webサーバがリクエストを見て、トップページである *index.php* のリクエストだと判断する 4. Webサーバは、PHPファイルを`php`コマンドに通す約束があるので、`$ php index.php`を実行して、HTMLファイルにする 4. 実行結果である HTML をレスポンスとして返す 5. Webブラウザがレスポンス(実行結果HTML)を受け取る 6. 受け取ったHTMLを解析してWebページとして表示する 簡単にまとめると、WebサーバはPHPファイルへのリクエストがあると、そのPHPファイルを`php`コマンドを通してHTMLファイルにし、それをレスポンスとして返します。 ## フォームデータの送受信 <!-- 8章 フォームデータの送受信 に変更--> この<!--チャプター --><!-- パートで に変更 -->でゴールとなるフォームが完成します。 ### HTTPリクエストのPOSTメソッドでフォームを送信する <!-- 8-1 HTTPリクエストのPOSTメソッドでフォームを送信する に変更--> ここでは、HTTPリクエストの中でPOSTメソッドを使ってフォームの送信を行うところを学びます。HTTP(Web上での通信)で、フォームを送信するとき、POSTメソッドという指定が必要です。POSTメソッドについては、フォームのようにユーザが入力したデータを送信するときに指定するものとだけ知っておきましょう。 まずはフォームを追加したPHPファイルを見ていきましょう。 *index.php* ```php <head><meta charset="utf-8"></head> <form action="index.php" method="POST"> <input type="text" name="nickname" placeholder="入力例: 太郎"> <input type="number" name="hour" placeholder="入力例: 21"> <input type="submit" name="submit" value="送信"> </form> <?php $nickname = "太郎"; $hour = 15; if (6 <= $hour && $hour < 12) { $greeting = "おはよう"; } elseif (12 <= $hour && $hour < 18) { $greeting = "こんにちは"; } else { $greeting = "こんばんは"; } print "<p>現在時刻は{$hour}時ですね。</p>"; print "<p>{$greeting}、{$nickname}さん。</p>"; ?> ``` <!-- ※ `<head><meta charset="utf-8"></head>` は一時的な文字化け対策となります。 --><!-- 削除 一時的な文字化け対策というより、utf-8については毎回書くため。なぜ書くかについては、Web Designで学習。--> 下記の入力フォームを追加しました。この入力フォームでは、名前(`nickname`)と時刻(`hour`)を入力し、送信します。送信先ファイルはformタグのaction属性で指定します。タグの中に`項目=値`という形で表記されているものを、属性と呼びます。`action="index.php"`となっているところで、フォームに入力されたデータを*index.php*へ送信する設定をしています。 したがって、*index.php*の中で送信されてきたフォームデータを処理するプログラムも必要になります。さらにHTTPリクエストのPOSTメソッドとして送信することを指定しているのが、formタグの`method="POST"`です。 ```html <form action="index.php" method="POST"> <input type="text" name="nickname" placeholder="入力例: 太郎"> <input type="number" name="hour" placeholder="入力例: 21"> <input type="submit" name="submit" value="送信"> </form> ``` ##### 確認 現状では、formで`nickcname`, `hour`を送信しても、それを処理するプログラムが書かれていないので、送信されたデータ(`nickname`, `hour`)は無視され、何も起こりません。変化がないことを確認してみましょう。 ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_13.png) ### POSTで受け取ったデータを処理 <!-- 8-2 POSTで受け取ったデータを処理 に変更--> POSTメソッドで送信されてくるフォームデータを取得するには、`$_POST`というあらかじめ存在する変数を使用します。`$_POST['nickname']`のように、フォームのinputタグのname属性で指定されていた部分を`$_POST[ここ]`に入力することで、フォームデータを取り出すことができます。 それでは、POSTメソッドで送信されてくる`nickname`を処理するPHPプログラムを書きましょう。 下記は`$nickname = "太郎"`となっていたところを、`$nickname = $_POST['nickname']`として、POSTメソッドで受け取った`nickname`をそのまま代入しています。`$hour`も`$_POST['hour']`で代入されています。 また、 `if ($_POST['submit']) { ... }` で囲っているのは、フォームデータがない場合には表示したくないからです。フォームが送信されたときだけ、 `if ($_POST['submit']) { ... }` の条件部分は正しくなり、`{ ... }` の部分(つまりif文が囲っている中身)が実行されます。 *index.php* ```php <head><meta charset="utf-8"></head> <form action="index.php" method="POST"> <input type="text" name="nickname" placeholder="入力例: 太郎"> <input type="number" name="hour" placeholder="入力例: 21"> <input type="submit" name="submit" value="送信"> </form> <?php if ($_POST['submit']) { $nickname = $_POST['nickname']; $hour = $_POST['hour']; if (6 <= $hour && $hour < 12) { $greeting = "おはよう"; } elseif (12 <= $hour && $hour < 18) { $greeting = "こんにちは"; } else { $greeting = "こんばんは"; } print "<p>現在時刻は{$hour}時ですね。</p>"; print "<p>{$greeting}、{$nickname}さん。</p>"; } ?> ``` <!-- ※ `<head><meta charset="utf-8"></head>` は一時的な文字化け対策となります。 --><!-- 削除 一時的な文字化け対策というより、utf-8については毎回書くため。なぜ書くかについては、Web Designで学習。--> ![](https://techacademy.s3.amazonaws.com/bootcamp/first-programming/php/6-6.png) ##### 確認 <!-- 8-3 確認 に変更 --> ここまでできたら、入力フォームに名前を入力し、送信してみましょう。下記は入力フォームの名前に`スズキイチロウ`と入力して送信したときの例です。時刻は14時でした。 ``` 現在時刻は14時ですね。 こんにちは、スズキイチロウさん。 ``` ![](https://techacademy.s3.amazonaws.com/training/trial/php/cloud9_14.png) 以上でフォームが完成しました。 これまで、POSTメソッドでのフォーム送信と、それを受け取る側の処理を学びました。 POSTメソッドを使えば、ユーザからHTMLのform要素(入力フォーム)を通して、データを受け取ることができます(今回は`nickname`等を受け取った)。そして、受け取ったデータは`$_POST`という変数に自動的に格納されます。`$_POST`から格納されたデータは取り出すには`$_POST['nickname']`と書くことで取りだすことができます。この`nickname`は、入力フォームで`<input type="text" name="nickname">`としたときの`name="nickname"`と同じになります。 重要なのは、ユーザがWebサーバに対してデータを送信できるようになった点です。これでWebサーバから一方的に情報を受け取るだけだったユーザが、ようやくWebページを操作できるようになりました。 <!-- ### 課題にチャレンジ  ここまでできたら課題にチャレンジしてみましょう。提出された課題はメンターがレビューします。 課題の提出方法は下記をご覧ください。 #### Cloud9との連携 [アカウント設定](settings){:target="_blank"}にアクセスし、Cloud9アカウントが連携されているかご確認ください。 連携されていないと、メンターが課題のレビューをできません。 連携されていない場合は [Cloud9を学習システムに登録](tools#chapter-3-2){:target="_blank"}を参照してください。''' ここまで削除 課題についての記載を削除 '''#### 課題の提出方法 課題のファイルを作成したら、「課題を提出する」のボタンをクリックしてください。 ![codereview](https://techacademy.s3.amazonaws.com/bootcamp/lessons/orientation/report_wp_01.png) すると、次のようなポップアップが表示されるので、ここでコメントを書いてください。 不安な箇所や特に見て欲しい箇所をメンターに伝えましょう。 コメントを書いて「提出する」をクリックすると提出が完了します。 ![codereview](https://techacademy.s3.amazonaws.com/bootcamp/lessons/orientation/report_wp_02.png) 提出できたらメンターがレビューするまで少々お待ちください。 課題がレビューされるのはチャット対応の時間帯と同じく、 **15:00 〜 23:00** の間です。 #### 課題レビューの確認方法 提出した課題は学習システムの上部にある「課題レビュー」からステータスを確認できます。 ![codereview](https://assets.techacademy.jp/techacademy-bootcamp/pictures/296/original.png) ステータスは以下の4つがあります。 - レビュー待ち:まだメンターがレビューしていません - レビュー中:メンターがレビュー中です - 再提出:課題に間違いがあります - 合格:合格です レビューの結果はステータスの横にある「レビューを見る」で確認しましょう。 --> <!-- 削除 Techpitのフォーマットに合わないため --> ## 学習のまとめ Webプログラミングの実践、お疲れ様でした! <!-- 前半は、Webページが HTML, CSS, 画像などによって構成されていることを学びました。HTML は文書であり、CSS は HTML をデザインするための言語でした。わざわざ文書を HTML で書くのは、Webブラウザが文書を解釈して適切に表示するためです。 --><!-- 削除 HTMLは本教材では扱わないため。 --> <!--中盤は、 --><!-- 本教材では、などに文言変更 -->PHPの基礎を学びました。WebページはHTMLですが、HTMLの中にPHPコードを埋め込むことで、状況に応じてWebページの表示が可能になりました。PHPを通して、プログラミングの基本である、変数、条件分岐などを学びました。そして、そのプログラムをターミナルから実行する方法を学びました。プログラムを書いて、ターミナルで実行するという流れはもう充分わかったと思います。 そして後半は、<!-- 次にやそして などに接続詞を変更 --> Web サーバである Apache HTTP server を「Run」から起動して、PHP を実行してみました。ここでは Apache がターミナルの代わりに PHP を実行してくれます。フォームを受け取れば、 `$_POST` にアクセスすれば良く、データ保存の不要な小規模 Web サービスであれば、これだけでも実現できるでしょう。 <!-- ## 最後に 以上で無料体験は終了となります。ここまでお付き合いいただきありがとうございました。 TechAcademyは今後も学習システムならびオンライン教材、サービスの改善に努め、一人でも多くの方がスキルを習得できるよう、最高の学習システムを提供していきます。 --><!-- 削除 Techpitのフォーマットに合わないため -->

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully