ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
$_ENV とは
$_ENV は PHP スーパーグローバル変数の1つで、OSの環境変数を連想配列で取得します。サーバ設定・実行コンテキスト依存の値(PATH、HOME、LANG、自前の APP_ENV など)を読むのに使います。
// CLI で実行
var_dump($_ENV['HOME']); // string(11) "/home/taro"
var_dump($_ENV['LANG']); // string(11) "ja_JP.UTF-8"
var_dump($_ENV['PATH']); // string(...) "/usr/local/bin:..."
// 自作の環境変数
// $ APP_ENV=production php script.php
echo $_ENV['APP_ENV']; // production
$_ENV が空になる: variables_order 設定
php.ini の variables_order ディレクティブは、スーパーグローバル変数のうちどれを初期化するかを決めます。E(ENV)が含まれていないと $_ENV は空配列になります。
; php.ini
; E = $_ENV
; G = $_GET
; P = $_POST
; C = $_COOKIE
; S = $_SERVER
; 既定(多くの環境)
variables_order = "GPCS" ; ← E 無し → $_ENV は空!
; ENV も使いたい
variables_order = "EGPCS" ; ← 推奨
; レガシー
variables_order = "EGPCS"
register_argc_argv = On ; CLI で $argv / $argc を使うなら// 現在の設定を確認
var_dump(ini_get('variables_order')); // "EGPCS" or "GPCS"
// 反映確認
var_dump($_ENV); // 空 or 環境変数全部
// 実行時上書き(recommend ini で設定)
ini_set('variables_order', 'EGPCS'); // 効かないことが多い
getenv() と putenv()
getenv() は variables_order の影響を受けず常に動きます。安全策として推奨:
// 取得
$home = getenv('HOME'); // "/home/taro"
$home = getenv('HOME', true); // ローカル環境のみ(thread-safe)
// すべての環境変数を配列で
$envs = getenv(); // PHP 7.1+
// 設定(現在のプロセス + 子プロセスにのみ反映)
putenv('APP_ENV=production');
echo getenv('APP_ENV'); // production
// 削除
putenv('APP_ENV'); // 値無しで削除
| 方法 | 取得 | 設定 | variables_order の影響 |
|---|---|---|---|
$_ENV['X'] | ○ | ○(変数代入) | 受ける(E 必須) |
getenv('X') | ○ | × | 受けない |
putenv('X=Y') | × | ○ | - |
$_SERVER['X'] | ○(SAPI依存) | × | S 必要 |
CLI vs Web の挙動差
CLI (php script.php)
シェルから起動した子プロセスなのでシェルの全環境変数を継承します:
export APP_ENV=production
export DB_HOST=db.example.com
php -r 'var_dump($_ENV);'
// array(...) { ["APP_ENV"]=> "production" ["DB_HOST"]=> "db.example.com" ... }
Web (PHP-FPM / mod_php)
Web サーバ経由ではシェルの環境変数は引き継がれません。FPM ではプール設定で明示する必要があります:
; /etc/php-fpm.d/www.conf
[www]
; 親環境変数を引き継ぐかどうか
clear_env = no ; ← yes が既定。これを no にすると親環境を引き継ぐ
; 明示的に渡す(推奨)
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[APP_ENV] = production
env[DB_HOST] = db.example.com# Apache mod_php
SetEnv APP_ENV production
PassEnv DB_HOST
# nginx + FPM は php-fpm.conf 経由
Laravel / Symfony の env() ヘルパー
モダンな PHP フレームワークは.env ファイルを vlucas/phpdotenv ライブラリで読み込み、$_ENV や getenv 経由で参照できるようにします:
# .env (Laravel)
APP_ENV=production
APP_DEBUG=false
DB_HOST=db.example.com
DB_PORT=3306
DB_PASSWORD="p@ss w/space"// Laravel
config('app.env'); // 推奨(config キャッシュ可能)
env('APP_ENV', 'local'); // .env 直接(config キャッシュ後はNG)
// Symfony
$_ENV['APP_ENV'];
$_SERVER['APP_ENV'];
// または DI で $env パラメータ受け取り
// 素の vlucas/phpdotenv
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
echo $_ENV['DB_HOST'];
env() を直接使うのが NG なケース
Laravel で php artisan config:cache 実行後は .env が読み込まれなくなり、env() は常に null を返します。必ず config() 経由で使うのが鉄則です。
Docker での環境変数渡し
# Dockerfile
FROM php:8.3-fpm
# ビルド時に固定値(イメージに焼き付く)
ENV APP_ENV=production# docker-compose.yml
services:
web:
image: my-app
environment:
APP_ENV: production
DB_HOST: db
DB_PASSWORD: ${DB_PASSWORD} # ホストの環境変数から取得
env_file:
- .env.production # ファイルから一括投入# 単発 docker run
docker run -e APP_ENV=production -e DB_HOST=db my-app
# 環境変数ファイル
docker run --env-file .env.prod my-app
# Kubernetes
# - ConfigMap / Secret から env: 経由で注入
セキュリティ上の注意
- 機密情報(API キー / DB パスワード)は環境変数で渡すのが定番だが、
phpinfo()で漏洩する → 本番では無効化 ps -efでプロセス引数や環境変数が見える環境では、ファイル + ENV_FILE 方式か Secret Manager を併用- ログに
$_ENV全部を出力しない(パスワードが漏れる) - クラウド: AWS Parameter Store / Secrets Manager、GCP Secret Manager、Vault などで管理し、起動時に
$_ENVへ展開
FAQ
Q: $_ENV と $_SERVER の違いは?
A: 同じ環境変数を両方が持つことがあります。SAPI 経由(Web)の値は $_SERVER、OS 環境変数は $_ENV が主だが境界は曖昧。確実に取りたいなら getenv()。
Q: Web で $_ENV が空
A: PHP-FPM の clear_env = yes(既定)が原因。env[KEY] = value で明示するか clear_env = no に。
Q: .env ファイルは本番でもコミットしていい?
A: 絶対にダメ。.gitignore 必須。.env.example だけリポジトリに置き、本番値はサーバ側で配置。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?