Ray Hata Ayıklayıcısını Kullanma
XOOPS için Ray Debugger’ı kullanma
Section titled “XOOPS için Ray Debugger’ı kullanma”Ray ile modern hata ayıklama: XOOPS uygulamanızda değişkenleri inceleyin, mesajları kaydedin, SQL sorgularını izleyin ve profil performansını izleyin.
Ray nedir?
Section titled “Ray nedir?”Ray, yürütmeyi durdurmadan veya kesme noktalarını kullanmadan uygulama durumunu incelemenize yardımcı olan hafif bir hata ayıklama aracıdır. XOOPS geliştirme için mükemmeldir.
Özellikler:
- Mesajları ve değişkenleri günlüğe kaydet
- SQL sorgularını inceleyin
- Performansı takip edin
- Profil kodu
- Grupla ilgili günlükler
- Görsel zaman çizelgesi
Gereksinimler:
- PHP 7,4+
- Ray uygulaması (ücretsiz sürümü mevcut)
- Composer
Kurulum
Section titled “Kurulum”Adım 1: Ray Paketini Kurun
Section titled “Adım 1: Ray Paketini Kurun”cd /path/to/xoops
# Install Ray via Composercomposer require spatie/ray
# Or install globallycomposer global require spatie/rayAdım 2: Ray Uygulamasını İndirin
Section titled “Adım 2: Ray Uygulamasını İndirin”ray.so adresinden indirin:
- Mac: Ray.app
- Windows: Ray.exe
- Linux: ışın (AppImage)
3. Adım: Güvenlik Duvarını Yapılandırın (gerekirse)
Section titled “3. Adım: Güvenlik Duvarını Yapılandırın (gerekirse)”Ray varsayılan olarak 23517 numaralı bağlantı noktasını kullanır:
# UFWsudo ufw allow 23517/udp
# iptablessudo iptables -A INPUT -p udp --dport 23517 -j ACCEPTTemel Kullanım
Section titled “Temel Kullanım”Basit Günlük Kaydı
Section titled “Basit Günlük Kaydı”<?phprequire_once 'mainfile.php';require 'vendor/autoload.php';
// Initialize Ray$ray = ray();
// Log a simple message$ray->info('Page loaded');
// Log a variable$user = ['name' => 'John', 'email' => 'john@example.com'];$ray->dump($user);
// Log with label$ray->label('User Data')->dump($user);?>Ray uygulamasında çıktı:
ℹ Page loaded👁 User Data: ['name' => 'John', 'email' => 'john@example.com']Farklı Günlük Düzeyleri
Section titled “Farklı Günlük Düzeyleri”<?php$ray = ray();
// Info$ray->info('Informational message');
// Success$ray->success('Operation completed');
// Warning$ray->warning('Potential issue');
// Error$ray->error('An error occurred');
// Debug$ray->debug('Debug information');
// Notice$ray->notice('Notice message');?>Değişkenlerin Boşaltılması
Section titled “Değişkenlerin Boşaltılması”<?php$ray = ray();
// Simple dump$ray->dump($variable);
// Multiple dumps$ray->dump($var1, $var2, $var3);
// With labels$ray->label('User')->dump($user);$ray->label('Post')->dump($post);
// Dump array with formatting$config = [ 'debug' => true, 'cache' => 'redis', 'db_host' => 'localhost'];$ray->label('Configuration')->dump($config);?>Gelişmiş Özellikler
Section titled “Gelişmiş Özellikler”1. SQL Sorgu Takibi
Section titled “1. SQL Sorgu Takibi”<?php$ray = ray();
// Log database query$ray->notice('Running query');$result = $GLOBALS['xoopsDB']->query("SELECT * FROM xoops_users LIMIT 10");
// Log resultwhile ($row = $result->fetch_assoc()) { $ray->dump($row);}
// Or log with label$query = "SELECT COUNT(*) as total FROM xoops_articles";$ray->label('Article Count Query')->info($query);$result = $GLOBALS['xoopsDB']->query($query);?>2. Performans Profili Oluşturma
Section titled “2. Performans Profili Oluşturma”<?php$ray = ray();
// Start a profile$ray->showQueries(); // Show all queries
// Your code$start = microtime(true);expensive_operation();$end = microtime(true);
$ray->label('Execution Time')->info(($end - $start) . ' seconds');
// Or measure directly$ray->measure(function() { expensive_operation();});?>3. Koşullu Hata Ayıklama
Section titled “3. Koşullu Hata Ayıklama”<?php$ray = ray();
// Only in developmentif (defined('XOOPS_DEBUG_LEVEL') && XOOPS_DEBUG_LEVEL > 0) { $ray->debug('Debug mode enabled');}
// Only for specific userif ($xoopsUser && $xoopsUser->getVar('uid') == 1) { $ray->dump($sensitive_data);}
// Only in specific sectionif ($_GET['debug'] == 'module') { $ray->label('Module Debug')->dump($_GET);}?>4. İlgili Günlüklerin Gruplandırılması
Section titled “4. İlgili Günlüklerin Gruplandırılması”<?php$ray = ray();
// Start a group$ray->group('User Authentication'); $ray->info('Checking credentials'); $ray->info('Password verified'); $ray->success('User authenticated');$ray->groupEnd();
// Or use closure$ray->group('Database Operations', function($ray) { $ray->info('Connecting to database'); $ray->info('Running queries'); $ray->success('Operations complete');});?>XOOPS-Özel Hata Ayıklama
Section titled “XOOPS-Özel Hata Ayıklama”module Hata Ayıklama
Section titled “module Hata Ayıklama”<?phprequire_once '../../mainfile.php';require_once XOOPS_ROOT_PATH . '/vendor/autoload.php';
$ray = ray();
// Log module initialization$ray->group('Module Initialization'); $ray->info('Module: ' . XOOPS_MODULE_NAME);
// Check module is active if (is_object($xoopsModule)) { $ray->success('Module loaded'); $ray->dump($xoopsModule->getValues()); }
// Check user permissions if (xoops_isUser()) { $ray->info('User: ' . $xoopsUser->getVar('uname')); } else { $ray->warning('Anonymous user'); }$ray->groupEnd();
// Get module config$config_handler = xoops_getHandler('config');$module = xoops_getHandler('module')->getByDirname(XOOPS_MODULE_NAME);$settings = $config_handler->getConfigsByCat(0, $module->mid());
$ray->label('Module Settings')->dump($settings);?>template Hata Ayıklama
Section titled “template Hata Ayıklama”<?php// In template or PHP code$ray = ray();
// Log assigned variables$tpl = new XoopsTpl();$ray->label('Template Variables')->dump($tpl->get_template_vars());
// Log specific variables$ray->label('User Variable')->dump($tpl->get_template_vars('user'));
// Log Smarty engine state$ray->label('Smarty Config')->dump([ 'compile_dir' => $tpl->getCompileDir(), 'cache_dir' => $tpl->getCacheDir(), 'debugging' => $tpl->debugging]);?>Veritabanında Hata Ayıklama
Section titled “Veritabanında Hata Ayıklama”<?php$ray = ray();
// Log database operations$ray->group('Database Operations');
// Count queries$ray->info('Database Prefix: ' . XOOPS_DB_PREFIX);
// List tables$result = $GLOBALS['xoopsDB']->query("SHOW TABLES");$tables = [];while ($row = $result->fetch_row()) { $tables[] = $row[0];}$ray->label('Tables')->dump($tables);
// Check connectionif ($GLOBALS['xoopsDB']) { $ray->success('Database connected');} else { $ray->error('Database connection failed');}
$ray->groupEnd();?>Özel Işın İşlevleri
Section titled “Özel Işın İşlevleri”Yardımcı İşlevler Oluşturun
Section titled “Yardımcı İşlevler Oluşturun”<?phpclass RayHelper { public static function init() { return ray(); }
public static function module($module_name) { $ray = ray(); $module = xoops_getHandler('module')->getByDirname($module_name);
if (!$module) { $ray->error("Module '$module_name' not found"); return; }
$ray->group("Module: $module_name"); $ray->dump([ 'name' => $module->getVar('name'), 'version' => $module->getVar('version'), 'active' => $module->getVar('isactive'), 'mid' => $module->getVar('mid') ]); $ray->groupEnd(); }
public static function user() { global $xoopsUser; $ray = ray();
if (!$xoopsUser) { $ray->info('Anonymous user'); return; }
$ray->group('User Information'); $ray->dump([ 'uname' => $xoopsUser->getVar('uname'), 'uid' => $xoopsUser->getVar('uid'), 'email' => $xoopsUser->getVar('email'), 'admin' => $xoopsUser->isAdmin() ]); $ray->groupEnd(); }
public static function config($module_name) { $ray = ray();
$module = xoops_getHandler('module')->getByDirname($module_name); if (!$module) { $ray->error("Module '$module_name' not found"); return; }
$config_handler = xoops_getHandler('config'); $settings = $config_handler->getConfigsByCat(0, $module->mid());
$ray->label("$module_name Configuration")->dump($settings); }}?>Kullanımı:
<?phprequire 'class/rayhelper.php';
RayHelper::user();RayHelper::module('mymodule');RayHelper::config('mymodule');?>Performans İzleme
Section titled “Performans İzleme”Sorgu Performansı
Section titled “Sorgu Performansı”<?php$ray = ray();
// Measure query time$ray->group('Query Performance');
$queries = [ "SELECT COUNT(*) FROM xoops_users", "SELECT * FROM xoops_articles LIMIT 1000", "SELECT a.*, u.uname FROM xoops_articles a JOIN xoops_users u"];
foreach ($queries as $query) { $start = microtime(true); $result = $GLOBALS['xoopsDB']->query($query); $time = (microtime(true) - $start) * 1000; // ms
$ray->label(substr($query, 0, 40) . '...')->info("${time}ms");}
$ray->groupEnd();?>Performans Talep Et
Section titled “Performans Talep Et”<?php$ray = ray();
// Measure total request time$ray->group('Request Metrics');
// Memory usage$memory = memory_get_usage() / 1024 / 1024;$peak = memory_get_peak_usage() / 1024 / 1024;$ray->info("Memory: {$memory}MB / Peak: {$peak}MB");
// Check execution timeif (function_exists('microtime')) { $elapsed = isset($_SERVER['REQUEST_TIME_FLOAT']) ? microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'] : 0; $ray->info("Execution time: {$elapsed}s");}
// File inclusion countif (function_exists('get_included_files')) { $files = count(get_included_files()); $ray->info("Files included: $files");}
$ray->groupEnd();?>İş Akışlarında Hata Ayıklama
Section titled “İş Akışlarında Hata Ayıklama”module Kurulumunda Hata Ayıklama
Section titled “module Kurulumunda Hata Ayıklama”<?php// Create modules/mymodule/debug_install.phprequire_once '../../mainfile.php';require_once XOOPS_ROOT_PATH . '/vendor/autoload.php';
$ray = ray();
$ray->group('Module Installation Debug');
// Check xoopsversion.php$version_file = __DIR__ . '/xoopsversion.php';if (file_exists($version_file)) { $modversion = []; include $version_file; $ray->label('xoopsversion.php')->dump($modversion);} else { $ray->error('xoopsversion.php not found');}
// Check language files$lang_files = glob(__DIR__ . '/language/*/');$ray->label('Language files')->info("Found " . count($lang_files) . " language(s)");
// Check database tables$module = xoops_getHandler('module')->getByDirname(basename(__DIR__));if ($module) { $ray->label('Module ID')->info($module->mid());} else { $ray->warning('Module not in database');}
$ray->groupEnd();
echo "Debug information sent to Ray";?>template Hatası Ayıklama
Section titled “template Hatası Ayıklama”<?php// Check template rendering$ray = ray();
$tpl = new XoopsTpl();
$ray->group('Template Debug');
// Log variables$vars = $tpl->get_template_vars();$ray->label('Available Variables')->dump(array_keys($vars));
// Check template exists$template = 'file:templates/page.html';$ray->info("Template: $template");
// Check compilation$compile_dir = $tpl->getCompileDir();$files = glob($compile_dir . '*.php');$ray->label('Compiled Templates')->info(count($files) . " compiled templates");
$ray->groupEnd();?>En İyi Uygulamalar
Section titled “En İyi Uygulamalar”graph TD A[Ray Best Practices] --> B["1. Label your logs"] A --> C["2. Group related logs"] A --> D["3. Use appropriate levels"] A --> E["4. Clean up before production"] A --> F["5. Measure performance"]
B --> B1["ray.label().dump()"] C --> C1["ray.group()"] D --> D1["info, warning, error"] E --> E1["Remove ray() calls"] F --> F1["Use ray.measure()"]Temizleme Komut Dosyası
Section titled “Temizleme Komut Dosyası”<?php// Remove Ray from production// Create script to strip Ray calls
function remove_ray_calls($file) { $content = file_get_contents($file);
// Remove ray() calls $content = preg_replace('/\$ray\s*=\s*ray\(\);/', '', $content); $content = preg_replace('/\$?ray\->[a-zA-Z_][a-zA-Z0-9_]*\([^)]*\);?/', '', $content); $content = preg_replace('/ray\(\)->[a-zA-Z_][a-zA-Z0-9_]*\([^)]*\);?/', '', $content);
file_put_contents($file, $content);}
// Find all PHP files with ray() and remove$files = glob('modules/**/*.php', GLOB_RECURSIVE);foreach ($files as $file) { if (strpos(file_get_contents($file), 'ray()') !== false) { remove_ray_calls($file); echo "Cleaned: $file\n"; }}?>Sorun Giderme Ray
Section titled “Sorun Giderme Ray”S: Ray mesaj almıyor
Section titled “S: Ray mesaj almıyor”C:
- Ray uygulamasının çalışıp çalışmadığını kontrol edin
- Güvenlik duvarının 23517 numaralı bağlantı noktasına izin verdiğini kontrol edin
- Ray’in kurulu olduğunu doğrulayın:
composer require spatie/rayS: SQL sorgularını göremiyorum
Section titled “S: SQL sorgularını göremiyorum”C:
<?php// Log queries manually$ray = ray();
$query = "SELECT * FROM xoops_users";$ray->info("Query: $query");
$result = $GLOBALS['xoopsDB']->query($query);
if (!$result) { $ray->error($GLOBALS['xoopsDB']->error);}?>S: Ray’in performansa etkisi
Section titled “S: Ray’in performansa etkisi”C: Ray’in ek yükü minimum düzeydedir. Üretim için Ray çağrılarını kaldırın veya şunları devre dışı bırakın:
<?php// Disable Ray in productionif (defined('ENVIRONMENT') && ENVIRONMENT == 'production') { function ray(...$args) { return new class { public function __call($name, $args) { return $this; } }; }}?>İlgili Belgeler
Section titled “İlgili Belgeler”- Hata Ayıklama Modunu Etkinleştir
- database Hata Ayıklama
- Performans FAQ
- Sorun Giderme Kılavuzu
#xoops #hata ayıklama #ray #profil oluşturma #izleme