コンピュータサイエンス
パスの指定。\と/、""と''
\と/
/を基本的に使用したほうが良い。
理由はChatGPTに回答を参考。
- Unix系システム(Linux、macOSなど):
パス区切りとして スラッシュ(/) を使用します。
例: /home/user/documents/file.txt- Windowsシステム:
パス区切りとして バックスラッシュ(\) を使用します。
例: C:\Users\Username\Documents\file.txt- 違いと互換性:
Windows では、パス名にバックスラッシュを使いますが、プログラムやソフトウェアによってはスラッシュも使える場合があります(例えば、コマンドラインではスラッシュがサポートされている場合があります)。
Unix系システム では、スラッシュが標準です。
プログラムで両方の環境に対応させる場合、スラッシュを使用することが一般的です。多くのプログラミング言語やツール(PythonやNode.jsなど)は、Unixスタイルのスラッシュに対応しており、Windows環境でもスラッシュで問題なく動作する場合があります。- パスの書き換え:
WindowsからUnix系への移行: パス内のバックスラッシュ(\)をスラッシュ(/)に変更する必要があります。
Unix系からWindowsへの移行: パス内のスラッシュ(/)をバックスラッシュ(\)に変更する必要があります。
""と''
パスの指定は、'を使用したほうが良い。
""だとエスケープシーケンス文字として認識される危険性がある。
結果
ドキュメントルートとは
ドキュメントルートとは、Webサーバー上にプログラムを公開するときのディレクトリ一番上のディレクトリパスのこと。
Apacheの場合は、httpd.confのDocumentRootで指定できる
DocumentRoot "C:\MAMP\htdocs"
試してみる。
①C:\MAMP\htdocsにtest.txtを作成する。
DocumentRootTest
②Apacheを起動し、WebブラウザのURLにhttp://localhost:8888/test.txtを叩く。
すると、test.txtの中身がブラウザ上で表示される。
リクエストをまたいで情報を共有する
HTTP通信はステートレスなのでリクエストをまたいで情報を共有したいときにCoookieやセッションや使用する。
これらは、ログイン状態やショッピングカートの内容をリクエストまたいで情報を共有するためによく使用される。
Cookieとは
Cookieとは、ブラウザに保存できる情報のことである。
実際に確認してみる。
下記のindex.phpにアクセスしてみる。
index.php
<?php
// Cookieを設定する。
// 名前がVISIT_COUNT、値が1
setcookie('VISIT_COUNT', 1, [
// Cookieの有効期限
'expires' => time() + 60 * 60 * 24 * 30,
// index.phpのパスを指定
'path' => '/'
]);
var_dump($_COOKIE['VISIT_COUNT']);
①index.phpに1回目アクセスした際の実行画面とCookie
Response Headerにsetcookieで設定したVISIT_COUNTの情報をクライアントのWebブラウザのCookieに保存。
実行画面
Cookie
①index.phpに2回目アクセスした際の実行画面とCookie
一回目でWebブラウザ上のCookieに保存したVISIT_COUNTをRequest Headerに入れてWebサーバーへリクエストすると、$_COOKIE['VISIT_COUNT']に反映される。
Response Headerも一回目同様再度、setcookieで設定したVISIT_COUNTの情報をクライアントのWebブラウザのCookieに保存する。
実行画面
Cookie
Cookie属性 HttpOnlyとSecure
セッションとは
セッションとは、Webサーバ上で保存される情報のことである。
セッションの情報は以下のようなファイルに格納される。
以下のコードで確認してみる。
index.php
<?php
// セッション管理開始
session_start();
if (!isset($_SESSION['count'])) {
// キー'count'が登録されていなければ、1を設定
$_SESSION['count'] = 1;
} else {
// キー'count'が登録されていれば、その値をインクリメント
$_SESSION['count']++;
}
echo $_SESSION['count']."回目の訪問です。";
①index.phpに1回目アクセス
画面
Cookie
session_start()や$_SESSION['count']でセッション情報を作成する。
すると、Webサーバー(今回はApache)上に、以下のようなファイルが作成され$_SESSION['count']で設定した値が格納される。
そのうえで、セッションIDをResponse HeaderのSet Cookieに設定し、クライアント(Webブラウザ)にレスポンスに返す。
またまだ一回目なので、Request HeaderのCookieはなしである。
②index.phpに2回目アクセス
画面
Cookie
①でWebブラウザ上のCookieに保存したセッションIDを、Request HeaderのCookieに設定してサーバー上にリクエストを投げる。
そのセッションIDが、サーバー上で生成したセッションIDと一致していた場合に、セッション情報が格納されているファイルからキーを読み取る。
読み取ってキーがあれば、$_SESSION['count']++でカウントアップした結果がまたセッション情報が格納されているファイルに書き込まれる。
Cookieとセッションのセキュリティ
ChatGPTによると、以下である。
セッション:
セッションIDは、ユーザーのブラウザに保存されるだけで、セッション自体のデータはサーバー側にあります。適切なセキュリティ対策がされていれば、セッションは比較的安全です。主に一時的な状態管理に使用。
クッキー:
クッキーはブラウザに保存され、ユーザーが複数回サイトに訪れる際に利用されます。クッキーに含まれる情報が悪用されるリスクがあるため、セキュリティ上の注意が必要です。主に長期的な情報保存に使用。
セッションとCookieでログイン機能を作る
PHP上でセッションを作成し、リクエストをまたいでもログインできていることがわかる
UUIDとは
UUIDとは、一意となる値のことである。
動的メモリと静的メモリの違い
ミューテックスとは
複数のスレッドが共有リソースへ同時にアクセスすることを防ぐための仕組みのこと。
ただいくつか注意する点がある。
デッドロック、パフォーマンス低下、スターベーション(飢餓状態)などがある。
使う場面としては、データベースの同時書き込み、ファイルの排他アクセス、マルチスレッド処理の同期制御などがあります。
ページネーションとは
ページネーション(Pagination)とは、データやコンテンツを複数のページに分割して表示する仕組みのことです。例えば、検索エンジンの検索結果や、ECサイトの商品一覧、ブログ記事の一覧などでよく使われます。
メリットや、実装方法などは下記を参照する。
TCPとUDPの違い
TCP (Transmission Control Protocol) と UDP (User Datagram Protocol) は、どちらもインターネット上でデータを送信するためのプロトコルですが、それぞれ異なる特性を持っています。
HTTP/1、HTTP/2、HTTP/3の違い
SSLとTLSの違い
SSLとTLSは、HTTPS通信する際に暗号化する技術のことである。
現在はTLSの方が推奨されている。
Markdownとは
Markdown(マークダウン)は、文書を記述するための軽量マークアップ言語のひとつである。
例えば、このZennで太文字にしようとすると、
以下のように記載するが
**太字**
結果
太字
このように簡単に、文字に装飾を加えることができる言語のことである
プレーンテキストとリッチテキストの違い
プレーンテキスト(例: .txt ファイル)は、文字に装飾(文字を太くしたり、色を変えたり)できない文字のこと。
リッチテキスト(.rtf, Microsoft Word (.doc/.docx), HTML など)は、文字に装飾可能な文字のこと。
それぞれメリットデメリットがある。
例えば、プレーンテキストの方が
・ファイルサイズが小さい
・どんなエディタでも使用可能
・ソフトの互換性が高い
セマンティックバージョニングとは
バージョンの書き方のひとつ。
MAJOR.MINOR.PATCH
・MAJOR(メジャー)バージョン
後方互換性のない変更が加えられたときに増加。
例: APIが壊れるような変更、大きな設計の変更など。
・MINOR(マイナー)バージョン
後方互換性のある新機能が追加されたときに増加。
例: 既存の機能は壊さずに、新しい機能を追加した場合。
・PATCH(パッチ)バージョン
バグ修正や、小さな改善(後方互換性あり)のときに増加。
例: セキュリティ修正、バグフィックスなど。
1.0.0: 初回の安定版リリース
1.1.0: 新機能を追加(既存との互換性あり)
1.1.1: バグ修正
2.0.0: 後方互換性のない変更を含む大きなアップデート
WSLでWindowsの環境でLinuxを使えるようにする
暗号化(AES、RSAなど)とハッシュ化(SHA-256、MD5など)の違い
Discussion