📌 ساخت یک REST API سبک با PHP خالص
خیلی وقتها برای یک فرم ساده، اپ موبایل کوچک یا integration داخلی، لازم نیست کل Laravel را بالا بیاریم. یک API سبک با PHP خالص میتونه هم سریع باشه، هم قابل دیپلوی روی هر هاستی.
در این پست، یه نمونه خیلی عملی میبینیم که شبیه مثالهای سرور داخلی PHP در مستندات رسمی کار میکنه؛ فقط کمی مرتبتر و مدرنتر 👇
💡 ایده اصلی
– استفاده از PHP 8+ با
– هندلکردن
– استفاده از
– جداسازی لاجیک در یک کلاس کوچک (بدون شلوغکاری).
🔧 ساختار پیشنهادی
– یک فایل
– یک کلاس ساده برای مدیریت دادهها (فعلاً in-memory، بعداً راحت میشه به DB وصل کرد)
🚀 اجرا روی لوکال
با سرور داخلی PHP (مطابق داکیومنت رسمی):
حالا:
– با
– بعداً خیلی راحت میشه این ساختار رو به یک لایه Repository و اتصال به MySQL یا PostgreSQL گسترش داد.
🔥 چند نکته کاربردی
– همیشه
– برای پروژه واقعی، لاگگرفتن و error handling مرکزی (مثلاً با یک middleware ساده) خیلی کمک میکنه.
– اگر این سبک رو دوست داشتی، نگاهکردن به سورس micro-frameworkهایی مثل Slim PHP ایدههای خوبی برای routing و middleware میده.
امروز همین نمونه کوچک رو روی سیستم خودت بالا بیار، کمی باهاش بازی کن و بعد شروع کن به اضافهکردن featureهای کوچیک 😉
🔖 #PHP #پی_اچ_پی #PHP #REST_API #Backend #Web #Tutorial
👤 Developix
💎 Channel: @DevelopixPHP
خیلی وقتها برای یک فرم ساده، اپ موبایل کوچک یا integration داخلی، لازم نیست کل Laravel را بالا بیاریم. یک API سبک با PHP خالص میتونه هم سریع باشه، هم قابل دیپلوی روی هر هاستی.
در این پست، یه نمونه خیلی عملی میبینیم که شبیه مثالهای سرور داخلی PHP در مستندات رسمی کار میکنه؛ فقط کمی مرتبتر و مدرنتر 👇
💡 ایده اصلی
– استفاده از PHP 8+ با
type hint و strict_types.– هندلکردن
GET /tasks و POST /tasks برای یک TODO ساده.– استفاده از
json_encode / json_decode با application/json.– جداسازی لاجیک در یک کلاس کوچک (بدون شلوغکاری).
🔧 ساختار پیشنهادی
– یک فایل
public/index.php– یک کلاس ساده برای مدیریت دادهها (فعلاً in-memory، بعداً راحت میشه به DB وصل کرد)
<?php
declare(strict_types=1);
// public/index.php
header('Content-Type: application/json; charset=utf-8');
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$uri = strtok($_SERVER['REQUEST_URI'] ?? '/', '?');
class TaskStore
{
private array $tasks = [];
public function all(): array
{
return array_values($this->tasks);
}
public function add(string $title): array
{
$id = uniqid('task_', true);
$task = [
'id' => $id,
'title' => $title,
];
$this->tasks[$id] = $task;
return $task;
}
}
$store = new TaskStore();
if ($uri === '/tasks' && $method === 'GET') {
echo json_encode($store->all(), JSON_UNESCAPED_UNICODE);
exit;
}
if ($uri === '/tasks' && $method === 'POST') {
$input = json_decode(file_get_contents('php://input'), true) ?? [];
if (!isset($input['title']) || !is_string($input['title'])) {
http_response_code(422);
echo json_encode(['error' => 'title is required']);
exit;
}
$task = $store->add(trim($input['title']));
http_response_code(201);
echo json_encode($task, JSON_UNESCAPED_UNICODE);
exit;
}
http_response_code(404);
echo json_encode(['error' => 'Not Found']);
🚀 اجرا روی لوکال
با سرور داخلی PHP (مطابق داکیومنت رسمی):
php -S localhost:8000 -t public
حالا:
– با
curl یا Postman روی /tasks تست کن.– بعداً خیلی راحت میشه این ساختار رو به یک لایه Repository و اتصال به MySQL یا PostgreSQL گسترش داد.
🔥 چند نکته کاربردی
– همیشه
Content-Type درست برای JSON ست کن تا client ها راحتتر parse کنن.– برای پروژه واقعی، لاگگرفتن و error handling مرکزی (مثلاً با یک middleware ساده) خیلی کمک میکنه.
– اگر این سبک رو دوست داشتی، نگاهکردن به سورس micro-frameworkهایی مثل Slim PHP ایدههای خوبی برای routing و middleware میده.
امروز همین نمونه کوچک رو روی سیستم خودت بالا بیار، کمی باهاش بازی کن و بعد شروع کن به اضافهکردن featureهای کوچیک 😉
🔖 #PHP #پی_اچ_پی #PHP #REST_API #Backend #Web #Tutorial
👤 Developix
💎 Channel: @DevelopixPHP
❤1
📨 ساخت یک فرم تماس امن با PHP 8 و PDO
خیلی وقتها سریع یک فرم «ارتباط با ما» مینویسیم، ولی اگر درست هندل نشه، پر از مشکل امنیتی و باگ میشه؛ از SQL Injection گرفته تا اسپم و خطاهای عجیب. امروز یه نمونهی خیلی کاربردی و مدرن با PHP 8 + PDO رو مرور میکنیم.
این ایده برگرفته از نمونههای رسمی و Best Practiceهای مستندات PHP و PDO هست:
php.net/manual/en/book.pdo.php
🔹 سناریو
فرض کن یه فرم ساده داریم:
• ولیدیت اولیه کنیم (خالی نبودن، ایمیل معتبر)
• امن ذخیره کنیم داخل MySQL با Prepared Statement
• خطاها رو لاگ کنیم، نه اینکه به کاربر Error خام نشون بدیم
🔹 ساخت جدول MySQL (یکبار روی DB اجرا کن)
🔹 فایل
این نمونه از strict types، PDO و Exception Handling استفاده میکنه؛ مناسب PHP 8 به بالا:
✨ چند نکتهی ریز اما مهم
• استفاده از
• فعالکردن
•
• حتماً خروجی خطا به کاربر عمومی باشه و لاگ کامل فقط در
🌱 این الگو یه اسکلت تمیز برای هر نوع فرم (ثبتنام، کامنت، تیکت) تو پروژههای PHP محسوب میشه. یک بار تمیز پیادهسازی بشه، بعد میتونی هی رویش توسعه بدی (CSRF token، Rate Limit, Recaptcha و غیره).
امتحانش کن، روی پروژهی واقعی استفاده کن و اگر باگ یا ایدهی بهتری داشتی، با بقیه توسعهدهندههای PHP به اشتراک بذار 💻
🔖 #PHP #پی_اچ_پی #PHP #PDO #MySQL #Form_Handling #Validation #Backend #Web_Development
👤 Developix
💎 Channel: @DevelopixPHP
خیلی وقتها سریع یک فرم «ارتباط با ما» مینویسیم، ولی اگر درست هندل نشه، پر از مشکل امنیتی و باگ میشه؛ از SQL Injection گرفته تا اسپم و خطاهای عجیب. امروز یه نمونهی خیلی کاربردی و مدرن با PHP 8 + PDO رو مرور میکنیم.
این ایده برگرفته از نمونههای رسمی و Best Practiceهای مستندات PHP و PDO هست:
php.net/manual/en/book.pdo.php
🔹 سناریو
فرض کن یه فرم ساده داریم:
name، email و message. میخوایم دادهها رو:• ولیدیت اولیه کنیم (خالی نبودن، ایمیل معتبر)
• امن ذخیره کنیم داخل MySQL با Prepared Statement
• خطاها رو لاگ کنیم، نه اینکه به کاربر Error خام نشون بدیم
🔹 ساخت جدول MySQL (یکبار روی DB اجرا کن)
CREATE TABLE contacts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
🔹 فایل
process_contact.phpاین نمونه از strict types، PDO و Exception Handling استفاده میکنه؛ مناسب PHP 8 به بالا:
<?php
declare(strict_types=1);
$dsn = 'mysql:host=127.0.0.1;dbname=demo_app;charset=utf8mb4';
$user = 'demo_user';
$pass = 'demo_pass';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
} catch (PDOException $e) {
error_log('DB connection failed: ' . $e->getMessage());
http_response_code(500);
exit('Server Error');
}
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$message = trim($_POST['message'] ?? '');
$errors = [];
if ($name === '') {
$errors[] = 'نام الزامی است.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'ایمیل نامعتبر است.';
}
if ($message === '') {
$errors[] = 'متن پیام را وارد کنید.';
}
if ($errors) {
http_response_code(422);
echo implode("\n", $errors);
exit;
}
$sql = 'INSERT INTO contacts (name, email, message) VALUES (:name, :email, :message)';
$stmt = $pdo->prepare($sql);
$stmt->execute([
':name' => $name,
':email' => $email,
':message' => $message,
]);
echo 'پیام شما با موفقیت ثبت شد.';
✨ چند نکتهی ریز اما مهم
• استفاده از
charset=utf8mb4 برای ساپورت ایموجی و متنهای ترکیبی.• فعالکردن
PDO::ERRMODE_EXCEPTION باعث میشه خطاها رو مثل آدم مدیریت کنیم، نه با die() و متن خام.•
filter_var برای Validation ایمیل ساده و قابل فهمه؛ برای پروژههای بزرگتر میشه از کتابخونههای قویتر استفاده کرد.• حتماً خروجی خطا به کاربر عمومی باشه و لاگ کامل فقط در
error_log ذخیره بشه.🌱 این الگو یه اسکلت تمیز برای هر نوع فرم (ثبتنام، کامنت، تیکت) تو پروژههای PHP محسوب میشه. یک بار تمیز پیادهسازی بشه، بعد میتونی هی رویش توسعه بدی (CSRF token، Rate Limit, Recaptcha و غیره).
امتحانش کن، روی پروژهی واقعی استفاده کن و اگر باگ یا ایدهی بهتری داشتی، با بقیه توسعهدهندههای PHP به اشتراک بذار 💻
🔖 #PHP #پی_اچ_پی #PHP #PDO #MySQL #Form_Handling #Validation #Backend #Web_Development
👤 Developix
💎 Channel: @DevelopixPHP
👍2👎1
اگه برای هر صفحهی پروژهی PHP خودت یه فایل جدا مثل
این پست بر اساس ایدهها و الگوی PSR-7 و نمونههای سادهای مثل klein.php یه روتر سبک رو نشون میده که به راحتی تو هر پروژه PHP 8 میتونی استفادهاش کنی.
ایدهی اصلی چیه؟
✅ همهی request ها از یه
✅ بر اساس
✅ کدهای صفحهها بهجای پخش شدن، در توابع/کلاسها باشن
ساخت یک Router خیلی ساده
تو public روت پروژه، یه
الان وقتی بری به
یه کم تمیزتر با کلاس
میتونی روتر رو تو یه کلاس بذاری (مثلا
چرا این کار مفیده؟
• اضافه کردن route جدید فقط با یه خط تو آرایه انجام میشه 🔧
• بعدا میتونی middleware، auth، یا JSON API رو راحت اضافه کنی
• قدم اولیه برای مهاجرت به معماری تمیزتر و نزدیکتر به استانداردهایی مثل PSR هست
امتحانش کن، یه پروژه کوچیک بساز و چند تا route تعریف کن. اگه برات مفید بود، برای بقیهی PHP dev ها هم بفرست تا اونها هم از این ساختار تمیزتر لذت ببرن 👨💻👩💻
🔖 #PHP #پی_اچ_پی #PHP #Routing #Web #Backend #Modern_PHP #PSR
👤 Developix
💎 Channel: @DevelopixPHP
about.php، contact.php و ... میسازی، کمکم همهچی شلوغ و سختقابلمدیریت میشه. یه Router ساده میتونه کل مسیرها رو تمیز و قابلگسترش کنه، حتی بدون استفاده از فریمورکی مثل Laravel 👌این پست بر اساس ایدهها و الگوی PSR-7 و نمونههای سادهای مثل klein.php یه روتر سبک رو نشون میده که به راحتی تو هر پروژه PHP 8 میتونی استفادهاش کنی.
ایدهی اصلی چیه؟
✅ همهی request ها از یه
index.php رد بشن (Front Controller)✅ بر اساس
REQUEST_METHOD و REQUEST_URI، تابع یا Controller مناسب صدا زده بشه✅ کدهای صفحهها بهجای پخش شدن، در توابع/کلاسها باشن
ساخت یک Router خیلی ساده
تو public روت پروژه، یه
index.php بساز و کد زیر رو بذار:<?php
declare(strict_types=1);
$routes = [
'GET' => [
'/' => function () {
echo 'Home Page';
},
'/about' => function () {
echo 'About Page';
},
],
'POST' => [
'/contact' => function () {
echo 'Form submitted';
},
],
];
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$uri = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH);
if (isset($routes[$method][$uri])) {
$handler = $routes[$method][$uri];
$handler();
} else {
http_response_code(404);
echo '404 Not Found';
}
الان وقتی بری به
/ یا /about یا با POST بری به /contact، روترت دقیقا میدونه چی رو اجرا کنه 🙌یه کم تمیزتر با کلاس
میتونی روتر رو تو یه کلاس بذاری (مثلا
src/Router.php) و با composer و autoload استفادهاش کنی. نمونهی خیلی شبیه به این ساختار رو تو پروژههای کوچیک GitHub مثل "simple-php-router" راحت پیدا میکنی و میتونی ایده بگیری.چرا این کار مفیده؟
• اضافه کردن route جدید فقط با یه خط تو آرایه انجام میشه 🔧
• بعدا میتونی middleware، auth، یا JSON API رو راحت اضافه کنی
• قدم اولیه برای مهاجرت به معماری تمیزتر و نزدیکتر به استانداردهایی مثل PSR هست
امتحانش کن، یه پروژه کوچیک بساز و چند تا route تعریف کن. اگه برات مفید بود، برای بقیهی PHP dev ها هم بفرست تا اونها هم از این ساختار تمیزتر لذت ببرن 👨💻👩💻
🔖 #PHP #پی_اچ_پی #PHP #Routing #Web #Backend #Modern_PHP #PSR
👤 Developix
💎 Channel: @DevelopixPHP
👍5