首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 獲取系統環境變數與定義變數完整方法

     編輯:PHP 綜合知識

核心內建函數

<?php
// 1. 獲取所有已定義變數(含超全域、常數、函數內區域變數)
$allVars = get_defined_vars();
echo "=== 所有已定義變數 ===\n";
print_r(array_keys($allVars));

// 2. 獲取物件屬性(公開屬性)
class Demo {
    public $publicProp = 'public';
    protected $protectedProp = 'protected';
    private $privateProp = 'private';
}
$obj = new Demo();
$props = get_object_vars($obj); // 僅取得 public 屬性
echo "\n=== 物件公開屬性 ===\n";
print_r($props);

// 3. PHP 完整環境資訊(僅開發/除錯使用)
// phpinfo(); // 輸出 HTML 表格,含模組、配置、環境變數等

// 4. PHP 版本資訊
echo "\nPHP 版本:" . PHP_VERSION . "\n"; // 常數
echo "PHP 版本:" . phpversion() . "\n"; // 函數,可接受擴充名稱
echo "Zend 引擎版本:" . zend_version() . "\n";

// 5. 系統常用常數
echo "\n=== 系統常數 ===\n";
echo "PHP_OS: " . PHP_OS . "\n";           // 作業系統
echo "PHP_SAPI: " . PHP_SAPI . "\n";       // 介面類型 (cli, fpm-fcgi, apache2handler)
echo "PHP_EOL: '" . PHP_EOL . "'\n";       // 換行符
echo "PHP_INT_MAX: " . PHP_INT_MAX . "\n"; // 最大整數
echo "DEFAULT_TIMEZONE: " . date_default_timezone_get() . "\n";

// 6. 記憶體使用
echo "\n=== 記憶體 ===\n";
echo "目前使用:" . formatBytes(memory_get_usage()) . "\n";
echo "峰值使用:" . formatBytes(memory_get_peak_usage()) . "\n";

// 7. 包含檔案追蹤
echo "\n=== 包含檔案 ===\n";
print_r(get_included_files());

function formatBytes($bytes, $precision = 2) {
    $units = ['B', 'KB', 'MB', 'GB'];
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
    return round($bytes / (1024 ** $pow), $precision) . ' ' . $units[$pow];
}
?>

超全域陣列詳細說明

超全域用途常用鍵
$_SERVER伺服器與執行環境資訊REQUEST_METHOD, HTTP_HOST, REMOTE_ADDR, SCRIPT_FILENAME, DOCUMENT_ROOT, HTTP_USER_AGENT
$_ENV環境變數APP_ENV, DB_HOST, API_KEY (需 php.ini variables_order 包含 E)
$_GETURL 查詢字串參數自動解析 ?key=value
$_POSTPOST 請求主體 (application/x-www-form-urlencoded, multipart/form-data)表單欄位
$_FILES上傳檔案資訊name, type, tmp_name, error, size
$_COOKIEHTTP Cookie鍵值對
$_SESSIONSession 資料需先 session_start()
$_REQUEST$_GET + $_POST + $_COOKIE 合併 (順序受 request_order 影響)不建議使用(安全性)

環境變數最佳實踐

<?php
// 1. 使用 vlucas/phpdotenv 管理 .env 檔案 (composer require vlucas/phpdotenv)
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

// 2. 存取環境變數
$dbHost = $_ENV['DB_HOST'] ?? getenv('DB_HOST') ?? '127.0.0.1';
$dbPass = $_ENV['DB_PASS'] ?? getenv('DB_PASS') ?? '';

// 3. 型別轉換輔助
function env($key, $default = null, $cast = 'string') {
    $value = $_ENV[$key] ?? getenv($key) ?? $default;
    switch ($cast) {
        case 'bool': return filter_var($value, FILTER_VALIDATE_BOOLEAN);
        case 'int': return (int)$value;
        case 'float': return (float)$value;
        case 'array': return json_decode($value, true) ?? explode(',', $value);
        case 'json': return json_decode($value, true);
        default: return $value;
    }
}

// 使用
$debug = env('APP_DEBUG', false, 'bool');
$port = env('DB_PORT', 3306, 'int');
$allowedHosts = env('ALLOWED_HOSTS', [], 'array');
?>

除錯技巧

  • var_dump(get_defined_vars()) 在函數內部可見所有區域變數
  • debug_backtrace() 追蹤呼叫堆疊
  • debug_print_backtrace() 直接輸出堆疊
  • Xdebug + IDE 斷點除錯(生產環境勿開啟)
  • memory_get_usage(true) 參數 true 回傳系統分配的真實記憶體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved