Backend · API · Automatizáció

🐘 PHP Alapok

Űrlapfeldolgozás, adatbázis-kezelés, queue-k és CI/CD: minden, ami egy modern PHP projekthez kell.

Composer PDO + MySQL Queues

1. Gyors indulás

Telepítsd a hivatalos PHP binárist vagy használj XAMPP/MAMP csomagot. Fejlesztéshez a beépített szerver is elég.

php -v
php -S localhost:8000 -t public
  • Kapcsold be az extension=pdo_mysql sort a php.ini-ben.
  • VS Code: PHP Intelephense + PHP Debug (Xdebug) bővítmény.

2. Szintaxis gyorstalpaló

<?php
$nev = "Anna";
$kor = 22;

function udvozles(string $nev): string {
    return "Szia, $nev!";
}

echo udvozles($nev);
?>

Mindig engedélyezd az declare(strict_types=1);-et a fájlok tetején, így hamarabb derülnek ki típushibák.

3. HTTP űrlapok és validáció

<!-- contact.html -->
<form action="submit.php" method="POST" novalidate>
  <input type="text" name="name" placeholder="Név" required>
  <input type="email" name="email" placeholder="Email" required>
  <button type="submit">Küldés</button>
</form>
<?php // submit.php
require __DIR__.'/vendor/autoload.php';

$name  = trim($_POST['name'] ?? '');
$email = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL);

if (!$email) {
    http_response_code(400);
    exit('Érvénytelen email');
}

echo "Köszönjük, $name!";
?>

Űrlap támadás ellen használj CSRF tokent (pl. Symfony HttpFoundation vagy Laminas Diactoros).

4. PDO + MySQL

$pdo = new PDO('mysql:host=localhost;dbname=blog', 'root', '', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$stmt = $pdo->prepare('SELECT title FROM posts WHERE status = :status');
$stmt->execute(['status' => 'published']);

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $post) {
    echo $post['title'].PHP_EOL;
}
  • Mindig készíts READ/WRITE felhasználót külön jelszóval.
  • Kapcsold be a ATTR_DEFAULT_FETCH_MODE = FETCH_ASSOC-ot.

5. Composer és konfiguráció

composer init
composer require vlucas/phpdotenv monolog/monolog
// .env
APP_ENV=local
DB_HOST=127.0.0.1
DB_PASSWORD=secret

Fontos: a .env és /vendor mappát ne töltsd fel verziókezelésbe.

6. Debug és logok

  • Xdebug + VS Code breakpoints.
  • error_reporting(E_ALL); ini_set('display_errors', 1); csak fejlesztéskor.
  • Monolog + Logtail/ELK production környezetben.
$logger = new Monolog\Logger('app');
$logger->pushHandler(new StreamHandler(__DIR__.'/storage/app.log'));
$logger->info('User registered', ['id' => $userId]);

7. Gyakori hibák

  • Headers already sent: BOM nélküli UTF-8 és ne írj ki tartalmat header() előtt.
  • Undefined index: használd a null koaleszcencia operátort: $value = $_POST['id'] ?? null;
  • SQL injection: tilos a string összefűzés, csak prepared statement.

8. Mini JSON API (Slim)

// index.php
require __DIR__.'/vendor/autoload.php';

$app = Slim\Factory\AppFactory::create();
$app->post('/echo', function ($request, $response) {
    $payload = (array) $request->getParsedBody();
    $response->getBody()->write(json_encode([
        'message' => $payload['name'] ?? 'Guest',
    ]));
    return $response->withHeader('Content-Type', 'application/json');
});

$app->run();

9. Rétegezett architektúra

src/
├── Http/Controllers/PostController.php
├── Application/PostService.php
├── Domain/Post.php
└── Infrastructure/PostRepository.php
  • DTO-kal vedd le a terhet a controllerből.
  • Service rétegben intézd a tranzakciókat.
  • Repository réteg legyen felelős az ORM/PDO logikáért.

10. Queue és háttérfeladat

// app/Jobs/SendWelcomeMail.php
class SendWelcomeMail implements ShouldQueue
{
    use Dispatchable, Queueable, SerializesModels;

    public function __construct(public string $email) {}

    public function handle(): void
    {
        Mail::to($this->email)->send(new WelcomeMail());
    }
}

php artisan queue:work --tries=3 --max-time=3600, production környezetben Supervisor felügyelettel.

11. Deployment és megfigyelés

  • Docker multi-stage build: composer install + cache warmup a builder rétegben.
  • CI (GitHub Actions): futtasd a teszteket phpunit, majd php artisan config:cache.
  • Egészségellenőrzés: külön endpoint DB + queue kapcsolattal.
  • Sentry vagy Bugsnag exception monitorozáshoz.