امتحان PHP 4: الجلسات، الكوكيز، والملفات (10 تمارين مركبة)
امتحان PHP 4: الميزات المتقدمة والملفات
اختبر قدرتك على إدارة حالة المستخدم (Sessions/Cookies) والتعامل مع نظام الملفات والوقت.
تمرين 1
التاريخ والوقت (Date & Time)
اعرض الوقت الحالي:
- اطبع تاريخ اليوم بصيغة "Y/m/d".
- اطبع الوقت الحالي بصيغة "h:i:sa".
- اضبط المنطقة الزمنية لتكون "Africa/Cairo".
الحل
<?php
date_default_timezone_set("Africa/Cairo");
echo "Today is " . date("Y/m/d") . "<br>";
echo "The time is " . date("h:i:sa");
?>
تمرين 2
تضمين الملفات (Include & Require)
نظم كودك في ملفات:
- افترض وجود ملف `footer.php`.
- استخدم `include` لتضمينه في الصفحة الحالية.
- اشرح الفرق بين `include` و `require` في تعليق.
الحل
<?php
include 'footer.php';
// الفرق:
// include: إذا لم يجد الملف، يصدر تحذيراً ويستمر الكود.
// require: إذا لم يجد الملف، يصدر خطأ قاتلاً ويوقف الكود.
?>
تمرين 3
قراءة الملفات (File Handling - Read)
اقرأ محتوى ملف نصي:
- افترض وجود ملف `webdictionary.txt`.
- استخدم `readfile()` لقراءة الملف وطباعة عدد البايتات.
- أو استخدم `fopen`, `fread`, `fclose` لقراءته.
الحل
<?php
echo readfile("webdictionary.txt");
// أو الطريقة الأخرى
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile, filesize("webdictionary.txt"));
fclose($myfile);
?>
تمرين 4
الكتابة في الملفات (File Handling - Write)
أنشئ ملفاً جديداً واكتب فيه:
- افتح ملفاً جديداً `testfile.txt` للكتابة (`w`).
- اكتب فيه اسمك باستخدام `fwrite`.
- أغلق الملف.
الحل
<?php
$myfile = fopen("testfile.txt", "w") or die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
تمرين 5
رفع الملفات (File Upload)
تعامل مع رفع الملفات:
- افترض وجود نموذج يرسل ملفاً باسم `fileToUpload`.
- تحقق مما إذا كان الملف صورة حقيقية باستخدام `getimagesize`.
- اطبع "File is an image" أو "File is not an image".
الحل
<?php
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
} else {
echo "File is not an image.";
}
}
?>
تمرين 6
ملفات تعريف الارتباط (Cookies)
احفظ تفضيلات المستخدم:
- أنشئ كوكيز باسم `user` وقيمة "John Doe".
- اجعلها تنتهي بعد 30 يوماً.
- تحقق مما إذا كانت الكوكيز موجودة واطبع قيمتها.
الحل
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set!<br>";
echo "Value is: " . $_COOKIE[$cookie_name];
}
?>
تمرين 7
الجلسات (Sessions)
ابدأ جلسة واحفظ بيانات:
- ابدأ الجلسة باستخدام `session_start()`.
- احفظ متغيرات الجلسة: `favcolor` = "green" و `favanimal` = "cat".
- اطبع "Session variables are set.".
الحل
<?php
session_start();
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>
تمرين 8
الفلاتر (Filters Advanced)
تحقق من نطاق رقم:
- لديك متغير `$int = 122`.
- استخدم `filter_var` للتحقق من أن الرقم بين 1 و 200.
- استخدم `FILTER_VALIDATE_INT` مع خيارات `min_range` و `max_range`.
الحل
<?php
$int = 122;
$min = 1;
$max = 200;
if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {
echo "Variable value is not within the legal range";
} else {
echo "Variable value is within the legal range";
}
?>
تمرين 9
دوال الاستدعاء (Callback Functions)
مرر دالة كمعامل لدالة أخرى:
- عرف دالة `my_callback($item)` تعيد طول النص.
- لديك مصفوفة نصوص.
- استخدم `array_map` لتطبيق الدالة على كل عنصر في المصفوفة.
- اطبع المصفوفة الناتجة (أطوال النصوص).
الحل
<?php
function my_callback($item) {
return strlen($item);
}
$strings = ["apple", "orange", "banana", "coconut"];
$lengths = array_map("my_callback", $strings);
print_r($lengths);
?>
تمرين 10
JSON
تعامل مع بيانات JSON في PHP:
- لديك مصفوفة ترابطية `age = ["Peter"=>35, "Ben"=>37]`.
- حولها إلى نص JSON باستخدام `json_encode`.
- ثم حول نص JSON `{"Peter":35,"Ben":37}` إلى كائن PHP باستخدام `json_decode`.
الحل
<?php
$age = array("Peter"=>35, "Ben"=>37);
echo json_encode($age);
$jsonobj = '{"Peter":35,"Ben":37}';
var_dump(json_decode($jsonobj));
?>