Files
michaelschiemer/tests/debug/test-php85-features.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

143 lines
3.5 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
declare(strict_types=1);
echo "=== PHP 8.5 Features Test ===\n\n";
// 1. Check PHP Version
echo "PHP Version: " . PHP_VERSION . "\n";
echo "Zend Engine: " . zend_version() . "\n\n";
// 2. Property Hooks Test (PHP 8.5 Feature)
echo "=== Property Hooks Test ===\n";
class UserProfile
{
private string $rawName = '';
public string $name {
get => ucwords($this->rawName);
set (string $value) {
$this->rawName = strtolower(trim($value));
}
}
public int $age {
set (int $value) {
if ($value < 0 || $value > 150) {
throw new InvalidArgumentException('Invalid age');
}
$this->age = $value;
}
}
}
try {
$user = new UserProfile();
$user->name = ' john doe ';
echo "✅ Property hooks (set): " . $user->name . "\n";
$user->age = 30;
echo "✅ Property hooks (validated age): {$user->age}\n";
} catch (Throwable $e) {
echo "❌ Property hooks failed: " . $e->getMessage() . "\n";
}
echo "\n";
// 3. New ext-uri extension
echo "=== URI Extension Test ===\n";
if (extension_loaded('uri')) {
echo "✅ ext-uri is loaded\n";
// Test URI parsing if available
if (function_exists('uri_parse')) {
$parsed = uri_parse('https://michaelschiemer.de/path?query=value#fragment');
echo "✅ URI parsing works\n";
}
} else {
echo "⚠️ ext-uri not loaded\n";
}
echo "\n";
// 4. New ext-lexbor (HTML5 parser)
echo "=== Lexbor Extension Test ===\n";
if (extension_loaded('lexbor')) {
echo "✅ ext-lexbor is loaded (High-performance HTML5 parser)\n";
} else {
echo "⚠️ ext-lexbor not loaded\n";
}
echo "\n";
// 5. Zend OPcache (built-in)
echo "=== OPcache Test ===\n";
if (extension_loaded('Zend OPcache')) {
echo "✅ Zend OPcache is loaded (built-in)\n";
$status = opcache_get_status(false);
if ($status) {
echo "✅ OPcache enabled: " . ($status['opcache_enabled'] ? 'Yes' : 'No') . "\n";
echo "✅ Cache hits: " . ($status['opcache_statistics']['hits'] ?? 0) . "\n";
}
} else {
echo "❌ OPcache not loaded\n";
}
echo "\n";
// 6. Sodium (built-in crypto)
echo "=== Sodium Cryptography Test ===\n";
if (extension_loaded('sodium')) {
echo "✅ Sodium extension loaded\n";
$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$message = "Test encryption with PHP 8.5";
$encrypted = sodium_crypto_secretbox($message, $nonce, $key);
$decrypted = sodium_crypto_secretbox_open($encrypted, $nonce, $key);
if ($decrypted === $message) {
echo "✅ Sodium encryption/decryption works\n";
}
} else {
echo "❌ Sodium not loaded\n";
}
echo "\n";
// 7. Random Extension (PHP 8.5)
echo "=== Random Extension Test ===\n";
if (extension_loaded('random')) {
echo "✅ Random extension loaded\n";
// Cryptographically secure random
$randomBytes = random_bytes(16);
$randomInt = random_int(1, 100);
echo "✅ Random bytes generated: " . bin2hex($randomBytes) . "\n";
echo "✅ Random int (1-100): {$randomInt}\n";
} else {
echo "❌ Random extension not loaded\n";
}
echo "\n";
// 8. Performance Test
echo "=== Performance Test ===\n";
$start = microtime(true);
$iterations = 1000000;
for ($i = 0; $i < $iterations; $i++) {
$x = $i * 2;
}
$duration = microtime(true) - $start;
$perSecond = $iterations / $duration;
echo sprintf("✅ Performance: %.2f M ops/sec\n", $perSecond / 1000000);
echo "\n=== Test Complete ===\n";