
PHP المتقدم
بعد تعلم أساسيات PHP وتدفق التحكم والوظائف والمصفوفات والتعبيرات العادية والنماذج، فإن الخطوة التالية هي فهم ميزات PHP المتقدمة المستخدمة في التطبيقات الحقيقية.
تشرح هذه المقالة موضوعات PHP المتقدمة الهامة بما في ذلك التاريخ والوقت، وتتضمن معالجة الملفات، وفتح الملفات وقراءتها، وإنشاء الملفات وكتابتها، ورفع الملفات، وملفات تعريف الارتباط، والجلسات، والمرشحات، والمرشحات المتقدمة، ووظائف رد الاتصال، وJSON، والاستثناءات.
تساعد هذه المفاهيم المطورين على بناء المزيد من التطبيقات العملية التي يمكنها إدارة الملفات وتذكر المستخدمين والتحقق من صحة البيانات وتبادل المعلومات مع واجهات API والتعامل مع الأخطاء بشكل صحيح.
PHP التاريخ والوقت
يوفر PHP وظائف مدمجة للتعامل مع التواريخ والوقت. تعد التواريخ مهمة في العديد من تطبيقات الويب، مثل المدونات ولوحات المعلومات والفواتير والتقارير والمواعيد والسجلات والاشتراكات وتتبع نشاط المستخدم.
الوظيفة الأكثر شيوعًا لتنسيق التواريخ هي date().
<?php
echo date("Y-m-d");
echo date("Y-m-d H:i:s");
?>تتحكم سلسلة التنسيق في كيفية ظهور التاريخ. على سبيل المثال، ي يمثل سنة كاملة م يمثل الشهر د يمثل اليوم، ح يمثل الساعة أنا يمثل دقائق، و ق يمثل ثواني.
يمكنك أيضًا ضبط المنطقة الزمنية باستخدام date_default_timezone_set().
<?php
date_default_timezone_set("Europe/Istanbul");
echo date("Y-m-d H:i:s");
?>PHP يوفر أيضًا التاريخ والوقت فئة، وهي أكثر مرونة للتطبيقات الحديثة.
<?php
$date = new DateTime();
echo $date->format("Y-m-d H:i:s");
?>تعد فئة DateTime مفيدة عند إضافة الأيام ومقارنة التواريخ والتعامل مع المناطق الزمنية وإنشاء التطبيقات التي تعتمد على حسابات الوقت الدقيقة.
PHP تضمين
ال يشمل تسمح لك العبارة بإدراج ملفات PHP داخل ملفات PHP آخر. يساعد هذا المطورين على تنظيم التعليمات البرمجية وتجنب تكرار نفس المنطق HTML أو PHP في العديد من الملفات.
على سبيل المثال، قد يحتوي موقع ويب على رأس وتذييل مشتركين. بدلاً من نسخ الرأس في كل صفحة، يمكنك تضمينه.
<?php include "header.php"; ?>
<h1>Home Page</h1>
<?php include "footer.php"; ?>PHP يوفر أيضًا يتطلب, include_once، و require_once.
يشمل: يتضمن ملفًا ويظهر تحذيرًا في حالة فقدان الملف.
يتطلب: يتضمن ملفًا ويوقف البرنامج النصي إذا كان الملف مفقودًا.
include_once: يتضمن الملف مرة واحدة فقط.
مطلوب_مرة: يتطلب ملف مرة واحدة فقط.
في المشاريع الحقيقية، غالبًا ما يتم استخدام التضمين والطلب لملفات التكوين والتخطيطات المشتركة والوظائف المساعدة واتصالات قاعدة البيانات والمكونات القابلة لإعادة الاستخدام.
PHP التعامل مع الملفات
تعني معالجة الملفات العمل مع الملفات من خلال PHP. يمكن لـ PHP قراءة الملفات وكتابة الملفات وإنشاء الملفات ورفع الملفات وحذف الملفات والتحقق من وجود الملفات.
تعد معالجة الملفات مفيدة للسجلات والتقارير والتخزين البسيط وملفات التكوين والمستندات التي تم تحميلها والصادرات التي تم إنشاؤها والملفات المؤقتة.
قبل العمل مع ملف، من المهم التحقق من وجود الملف.
<?php
$file = "example.txt";
if (file_exists($file)) {
echo "File exists.";
} else {
echo "File does not exist.";
}
?>يوفر PHP العديد من وظائف الملفات مثل file_exists(), filesize(), file_get_contents(), file_put_contents(), fopen(), fread(), fwrite()، و fclose().
عند العمل مع الملفات، يجب على المطورين دائمًا الانتباه إلى الأذونات ومسارات الملفات والأمان وإدخال المستخدم. لا تسمح مطلقًا للمستخدمين بالتحكم بحرية في مسارات الملفات دون التحقق من صحتها.
PHP ملف فتح/قراءة
يمكن لـ PHP فتح الملفات وقراءتها باستخدام وظائف مثل fopen(), fread()، و fclose(). ال fopen() تفتح الوظيفة ملفًا، بينما fread() يقرأ محتواه.
<?php
$file = fopen("example.txt", "r");
$content = fread($file, filesize("example.txt"));
fclose($file);
echo $content;
?>الحجة الثانية في fopen() هو الوضع. الوضع ص يعني القراءة فقط
هناك طريقة أبسط لقراءة ملف كامل وهي استخدام file_get_contents().
<?php
$content = file_get_contents("example.txt");
echo $content;
?>هذه الطريقة أقصر ومفيدة عندما تريد قراءة الملف بأكمله مرة واحدة.
بالنسبة للملفات الكبيرة، قد تكون القراءة سطرًا تلو الآخر أفضل لأنها تستخدم ذاكرة أقل.
<?php
$file = fopen("example.txt", "r");
while (!feof($file)) {
echo fgets($file);
}
fclose($file);
?>تُستخدم ملفات القراءة بشكل شائع للسجلات والملفات النصية وملفات CSV والقوالب والمحتوى المخزن مؤقتًا والبيانات المستوردة.
PHP ملف إنشاء/كتابة
يمكن لـ PHP إنشاء الملفات وكتابتها باستخدام وظائف مثل fopen(), fwrite()، و file_put_contents().
يقوم المثال التالي بإنشاء ملف أو فتحه وكتابة نص فيه.
<?php
$file = fopen("notes.txt", "w");
fwrite($file, "Learning PHP file writing.");
fclose($file);
?>الوضع ث يفتح الملف للكتابة. إذا كان الملف غير موجود، يحاول PHP إنشائه. إذا كان الملف موجودًا بالفعل، فستتم إزالة محتواه القديم.
لإلحاق محتوى جديد بنهاية الملف، استخدم أ وضع.
<?php
$file = fopen("notes.txt", "a");
fwrite($file, "\nNew line added.");
fclose($file);
?>يمكنك أيضًا استخدام file_put_contents() لبناء جملة أقصر.
<?php
file_put_contents("notes.txt", "Hello from PHP.");
?>لإلحاق المحتوى باستخدام file_put_contents()، استخدم FILE_APPEND علَم.
<?php
file_put_contents("notes.txt", "\nAnother line.", FILE_APPEND);
?>تعد كتابة الملفات مفيدة للسجلات والتقارير التي تم إنشاؤها وملفات ذاكرة التخزين المؤقت والبيانات المصدرة والتخزين البسيط القائم على الملفات.
PHP تحميل الملف
يسمح رفع الملفات للمستخدمين بإرسال الملفات من أجهزة الكمبيوتر الخاصة بهم إلى الخادم. يُستخدم هذا في صور الملف الشخصي والسيرة الذاتية والمستندات والمعارض والمرفقات ولوحات الإدارة.
لرفع الملفات، يجب استخدام النموذج HTML طريقة = "آخر" و enctype = "متعدد الأجزاء/بيانات النموذج".
<form method="post" enctype="multipart/form-data">
<input type="file" name="document">
<button type="submit">Upload</button>
</form>في PHP، تتوفر معلومات الملف الذي تم تحميله من خلال $_FILES superglobal.
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$fileName = $_FILES["document"]["name"];
$tmpName = $_FILES["document"]["tmp_name"];
move_uploaded_file($tmpName, "uploads/" . $fileName);
echo "File uploaded.";
}
?>يعمل هذا المثال الأساسي، لكن أنظمة رفع الملفات الحقيقية تحتاج إلى تحقق أقوى. يجب على المطورين التحقق من حجم الملف، وامتداد الملف، ونوع MIME، وأخطاء التحميل، وإنشاء أسماء ملفات آمنة.
<?php
$allowedExtensions = ["jpg", "png", "pdf"];
$fileName = $_FILES["document"]["name"];
$tmpName = $_FILES["document"]["tmp_name"];
$fileSize = $_FILES["document"]["size"];
$extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
if (!in_array($extension, $allowedExtensions)) {
echo "File type is not allowed.";
} elseif ($fileSize > 2 * 1024 * 1024) {
echo "File is too large.";
} else {
$newName = uniqid("upload_", true) . "." . $extension;
move_uploaded_file($tmpName, "uploads/" . $newName);
echo "File uploaded successfully.";
}
?>يجب التعامل مع تحميلات الملفات بعناية لأن أنظمة التحميل غير الآمنة يمكن أن تخلق مشكلات أمنية خطيرة.
PHP ملفات تعريف الارتباط
ملفات تعريف الارتباط هي أجزاء صغيرة من البيانات المخزنة في متصفح المستخدم. يمكن لـ PHP إنشاء ملفات تعريف الارتباط وقراءتها في الطلبات اللاحقة.
تُستخدم ملفات تعريف الارتباط بشكل شائع لتذكر التفضيلات واختيار اللغة وقيم التتبع البسيطة وإعدادات المستخدم غير الحساسة.
يمكن إنشاء ملف تعريف الارتباط باستخدام setcookie().
<?php
setcookie("theme", "dark", time() + 3600, "/");
?>يؤدي هذا إلى إنشاء ملف تعريف الارتباط المسمى سمة مع القيمة مظلم. ستنتهي صلاحية ملف تعريف الارتباط بعد ساعة واحدة.
يمكن قراءة ملفات تعريف الارتباط باستخدام $_COOKIE superglobal.
<?php
$theme = $_COOKIE["theme"] ?? "light";
echo $theme;
?>لحذف ملف تعريف الارتباط، قم بتعيين وقت انتهاء صلاحيته على وقت سابق.
<?php
setcookie("theme", "", time() - 3600, "/");
?>لا ينبغي استخدام ملفات تعريف الارتباط لتخزين المعلومات الحساسة مثل كلمات المرور. يجب التعامل مع بيانات المصادقة الحساسة بشكل آمن باستخدام الجلسات والرموز المميزة وممارسات الأمان المناسبة.
PHP الجلسات
تسمح الجلسات لـ PHP بتخزين البيانات لمستخدم معين عبر صفحات متعددة. على عكس ملفات تعريف الارتباط، يتم تخزين بيانات الجلسة على الخادم، بينما يقوم المتصفح عادةً بتخزين معرف الجلسة فقط.
تُستخدم الجلسات بشكل شائع لأنظمة تسجيل الدخول وعربات التسوق ولوحات معلومات المستخدم ورسائل الفلاش وبيانات المستخدم المؤقتة.
لاستخدام الجلسات، ابدأ الجلسة بـ session_start().
<?php
session_start();
$_SESSION["user_id"] = 15;
$_SESSION["user_name"] = "Adnan";
echo $_SESSION["user_name"];
?>وفي صفحة أخرى، يمكنك بدء الجلسة مرة أخرى والوصول إلى القيم المخزنة.
<?php
session_start();
if (isset($_SESSION["user_id"])) {
echo "User is logged in.";
} else {
echo "User is not logged in.";
}
?>لإزالة قيمة الجلسة، استخدم unset().
<?php
session_start();
unset($_SESSION["user_id"]);
?>لتدمير الجلسة بأكملها، استخدم session_destroy().
<?php
session_start();
session_destroy();
?>تعد الجلسات ضرورية للتطبيقات التي تحتاج إلى تذكر المستخدمين بشكل آمن بين الطلبات.
PHP المرشحات
يتم استخدام مرشحات PHP للتحقق من صحة البيانات وتعقيمها. يتحقق التحقق من صحة البيانات، بينما يقوم التعقيم بتنظيف البيانات أو تعديلها.
وتتمثل المهمة الرئيسية للمرشحات filter_var().
<?php
$email = "user@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Valid email.";
} else {
echo "Invalid email.";
}
?>يمكن لمرشحات PHP التحقق من صحة رسائل البريد الإلكتروني وعناوين URL والأعداد الصحيحة والعوامات وعناوين IP والقيم المنطقية.
<?php
$url = "https://example.com";
if (filter_var($url, FILTER_VALIDATE_URL)) {
echo "Valid URL.";
}
?>يتم استخدام عوامل التصفية بشكل شائع مع إدخال النموذج، وإدخال API، ومعلمات الاستعلام، وقيم التكوين.
PHP مرشحات متقدمة
تسمح التصفية المتقدمة للمطورين باستخدام الخيارات والأعلام لقواعد تحقق أكثر تحديدًا.
على سبيل المثال، يمكنك التحقق من صحة عدد صحيح داخل نطاق معين.
<?php
$age = 25;
$options = [
"options" => [
"min_range" => 18,
"max_range" => 60
]
];
if (filter_var($age, FILTER_VALIDATE_INT, $options)) {
echo "Age is valid.";
} else {
echo "Age is not valid.";
}
?>يمكنك أيضًا التحقق من صحة عنوان IP.
<?php
$ip = "192.168.1.1";
if (filter_var($ip, FILTER_VALIDATE_IP)) {
echo "Valid IP address.";
}
?>بالنسبة لمصفوفات قيم الإدخال، يوفر PHP filter_input() و filter_input_array()، والتي تكون مفيدة عند العمل مباشرةً مع بيانات الطلب.
<?php
$email = filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL);
if ($email) {
echo "Valid email from POST.";
}
?>تساعد عوامل التصفية المتقدمة المطورين على إنشاء قواعد تحقق أكثر صرامة وتقليل الإدخال غير الصحيح أو غير الآمن في التطبيقات.
PHP وظائف رد الاتصال
دالة رد الاتصال هي دالة يتم تمريرها كوسيطة إلى دالة أخرى. يمكن لـ PHP استدعاء هذه الوظيفة لاحقًا عند الحاجة.
تعتبر عمليات الاسترجاعات مفيدة للفرز وتصفية المصفوفات وتحويل البيانات ومنطق نمط الحدث والتعليمات البرمجية المرنة القابلة لإعادة الاستخدام.
يمكن استخدام مثال رد اتصال بسيط array_map().
<?php
$numbers = [1, 2, 3, 4];
$result = array_map(function ($number) {
return $number * 2;
}, $numbers);
print_r($result);
?>يرسل هذا المثال وظيفة مجهولة كرد اتصال لـ array_map(). يتم تطبيق الوظيفة على كل عنصر في المصفوفة.
يستخدم مثال رد اتصال شائع آخر array_filter().
<?php
$numbers = [1, 2, 3, 4, 5, 6];
$evenNumbers = array_filter($numbers, function ($number) {
return $number % 2 === 0;
});
print_r($evenNumbers);
?>يمكن أيضًا استخدام الوظائف المُسمّاة كرد اتصال.
<?php
function makeUppercase($value) {
return strtoupper($value);
}
$names = ["php", "laravel", "symfony"];
$result = array_map("makeUppercase", $names);
print_r($result);
?>تعد وظائف رد الاتصال مهمة في PHP الحديث لأنها تساعد في جعل التعليمات البرمجية أكثر مرونة وتعبيرًا.
PHP JSON
JSON يرمز إلى JavaScript تدوين الكائن. وهو تنسيق بيانات شائع يستخدم لتبادل المعلومات بين التطبيقات وواجهات API والواجهات الأمامية والواجهات الخلفية وتطبيقات الهاتف المحمول والخدمات الخارجية.
PHP يوفر json_encode() لتحويل المصفوفات أو الكائنات PHP إلى JSON.
<?php
$user = [
"name" => "Adnan",
"role" => "Developer",
"active" => true
];
$json = json_encode($user);
echo $json;
?>سيكون الإخراج عبارة عن سلسلة JSON يمكن إرسالها إلى الواجهة الأمامية أو عميل API.
PHP يوفر أيضًا json_decode() لتحويل JSON مرة أخرى إلى بيانات PHP.
<?php
$json = '{"name":"Adnan","role":"Developer"}';
$data = json_decode($json, true);
echo $data["name"];
?>الحجة الثانية حقيقي يخبر PHP بتحويل كائن JSON إلى مصفوفة ترابطية.
يُستخدم JSON بكثرة في REST واجهات API وطلبات AJAX وملفات التكوين وعمليات التكامل الخارجية وتطبيقات الويب الحديثة.
عند العمل مع JSON، من المفيد التحقق من الأخطاء باستخدام json_last_error() أو json_last_error_msg().
<?php
$json = '{"name": "Adnan"';
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_last_error_msg();
}
?>PHP الاستثناءات
تُستخدم الاستثناءات لمعالجة الأخطاء بطريقة خاضعة للرقابة. بدلاً من السماح لخطأ ما بإيقاف التطبيق بشكل غير متوقع، يمكن لـ PHP طرح استثناء والتقاطه.
يستخدم الهيكل الأساسي يحاول, يمسك، وأحيانا أخيراً.
<?php
try {
throw new Exception("Something went wrong.");
} catch (Exception $exception) {
echo $exception->getMessage();
}
?>الكود داخل يحاول يتم تنفيذ الكتلة أولاً. إذا تم طرح استثناء، ينتقل PHP إلى يمسك حاجز.
ال أخيراً يتم تشغيل الكتلة سواء حدث استثناء أم لا.
<?php
try {
echo "Trying to process data.";
} catch (Exception $exception) {
echo $exception->getMessage();
} finally {
echo "Process finished.";
}
?>تكون الاستثناءات مفيدة عند العمل مع قواعد البيانات وواجهات API والملفات والمدفوعات والمصادقة وأي عملية قد تفشل.
يمكنك أيضًا إنشاء رسائل استثناء مخصصة لتصحيح الأخطاء ومعالجة الأخطاء بشكل أفضل.
<?php
function divide($a, $b) {
if ($b === 0) {
throw new Exception("Division by zero is not allowed.");
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (Exception $exception) {
echo "Error: " . $exception->getMessage();
}
?>معالجة الاستثناءات الجيدة تجعل التطبيقات أكثر استقرارًا وأسهل في تصحيح الأخطاء.
كيف تعمل موضوعات PHP المتقدمة معًا
في مشاريع PHP الحقيقية، غالبًا ما يتم استخدام هذه المواضيع المتقدمة معًا. على سبيل المثال، قد يستخدم نظام ملف تعريف المستخدم الجلسات للتحقق من حالة تسجيل الدخول، ورفع الملفات لرفع صورة الملف الشخصي، والمرشحات للتحقق من صحة الإدخال، وJSON لإرجاع استجابات API، والاستثناءات لمعالجة الأخطاء.
قد تجمع استجابة API البسيطة بين التحقق من الصحة وJSON والاستثناءات.
<?php
header("Content-Type: application/json");
try {
$email = $_POST["email"] ?? "";
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new Exception("Invalid email address.");
}
echo json_encode([
"success" => true,
"message" => "Email is valid."
]);
} catch (Exception $exception) {
echo json_encode([
"success" => false,
"message" => $exception->getMessage()
]);
}
?>يستخدم هذا المثال إدخال النموذج وعوامل التصفية والاستثناءات وJSON لإنشاء بنية استجابة بسيطة يمكن استخدامها في طلب API أو AJAX.
ملاحظات أمنية للمتقدم PHP
تعد ميزات PHP المتقدمة قوية، ولكن يجب استخدامها بعناية. يمكن أن تؤدي معالجة الملفات والتحميلات وملفات تعريف الارتباط والجلسات وإدخال المستخدم إلى مخاطر أمنية إذا لم يتم التعامل معها بشكل صحيح.
تشمل الممارسات الأمنية المهمة ما يلي:
التحقق من صحة جميع مدخلات المستخدم وتعقيمها.
استخدم أسماء الملفات الآمنة للملفات التي تم تحميلها.
تقييد ملحقات التحميل وأحجام الملفات المسموح بها.
لا تقم بتخزين البيانات الحساسة مباشرة في ملفات تعريف الارتباط.
استخدم الجلسات بشكل آمن للبيانات المتعلقة بالمصادقة.
الهروب من الإخراج قبل عرض بيانات المستخدم.
التعامل مع الاستثناءات دون الكشف عن تفاصيل الخادم الحساسة.
استخدم الأذونات المناسبة للملفات وتحميل الدلائل.
في التطبيقات الاحترافية، توفر أطر العمل مثل Laravel أدوات مدمجة للتحقق من الصحة وتخزين الملفات والجلسات وملفات تعريف الارتباط واستجابات JSON ومعالجة الاستثناءات. ومع ذلك، فإن فهم مفاهيم PHP هذه بشكل مباشر أمر مهم لأنه يشرح كيفية عمل إطار العمل خلف الكواليس.
خاتمة
موضوعات PHP المتقدمة مثل التاريخ والوقت، تتضمن معالجة الملفات، وفتح الملفات وقراءتها، وإنشاء الملفات وكتابتها، ورفع الملفات، وملفات تعريف الارتباط، والجلسات، والمرشحات، والمرشحات المتقدمة، ووظائف رد الاتصال، وJSON، والاستثناءات ضرورية لإنشاء تطبيقات ويب حقيقية.
تساعد هذه الميزات المطورين على إدارة الملفات والتحقق من صحة البيانات وتذكر المستخدمين وتبادل المعلومات مع واجهات API والتعامل مع الأخطاء بطريقة منظمة.
بعد تعلم هذه المفاهيم، الخطوة التالية هي التدريب من خلال بناء مشاريع صغيرة مثل نموذج الاتصال ونظام رفع الملفات ونظام تسجيل الدخول وJSON API ولوحة التحكم البسيطة. ستعمل هذه المشاريع على ربط أساسيات PHP بخبرة تطوير حقيقية.

