اذهب إلى المحتوى

لوحة المتصدرين

  1. سارة محمد2

    سارة محمد2

    الأعضاء


    • نقاط

      1

    • المساهمات

      86


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 02/24/21 in مقالات البرمجة

  1. تحليل رابط نستخدم الدالة parse_url()‎ لتقسيم رابط (url) إلى مكوناته الفردية: $url = 'http://www.example.com/page?foo=1&bar=baz#anchor'; $parts = parse_url($url); تصبح محتويات المتغير ‎$parts بعد تنفيذ الشيفرة السابقة: Array ( [scheme] => http [host] => www.example.com [path] => /page [query] => foo=1&bar=baz [fragment] => anchor ) يمكنك أن ترجع أيضًا مكون واحد من الرابط بشكلٍ انتقائي، فمثلًا لترجع سلسلة الاستعلام (query string) فقط: $url = 'http://www.example.com/page?foo=1&bar=baz#anchor'; $queryString = parse_url($url, PHP_URL_QUERY); يعدّ أيّ من الثوابت التالية مقبولًا: PHP_URL_SCHEME ‏PHP_URL_HOST PHP_URL_PORT ‏PHP_URL_USER ‏PHP_URL_PASS ‏PHP_URL_PATH ‏PHP_URL_QUERY PHP_URL_FRAGMENT يمكنك استخدام الدالة parse_str()‎ لتحليل سلسلة الاستعلام إلى أزواج مفتاح/قيمة: $params = []; parse_str($queryString, $params); تصبح محتويات المتغير ‎$params بعد تنفيذ الشيفرة السابقة: Array ( [foo] => 1 [bar] => baz ) بناء سلسلة استعلام للرابط من مصفوفة تنشأ الدالة http_build_query()‎ سلسلة استعلام من مصفوفة أو كائن، يمكن أن تُضاف هذه السلسلة إلى رابط ما لإنشاء طلب من النوع GET أو تُستخدم في طلب POST مع مكتبة cURL مثلًا: $parameters = array( 'parameter1' => 'foo', 'parameter2' => 'bar', ); $queryString = http_build_query($parameters); تصبح محتويات المتغير ‎$queryString بعد تنفيذ الشيفرة السابقة: parameter1=foo&parameter2=bar تعمل الدالة http_build_query()‎ مع المصفوفات متعددة الأبعاد أيضًا: $parameters = array( "parameter3" => array( "sub1" => "foo", "sub2" => "bar", ), "parameter4" => "baz", ); $queryString = http_build_query($parameters); تصبح محتويات المتغير ‎$queryString بعد تنفيذ الشيفرة السابقة: parameter3%5Bsub1%5D=foo&parameter3%5Bsub2%5D=bar&parameter4=baz والذي هو النسخة المرمزة للرابط: parameter3[sub1]=foo&parameter3[sub2]=bar&parameter4=baz إعادة التوجيه إلى رابط آخر يمكنك استخدام الدالة header()‎ لتوجيه المتصفح ليعيد التوجيه إلى رابط مختلف: $url = 'https://example.org/foo/bar'; // فحص الترويسات - لايمكنك إرسال ترويسات إذا أُرسلت بالفعل if (!headers_sent()) { header('Location: ' . $url); // الحماية من تنفيذ الشيفرة بعد إعادة توجيه الطلب exit; } else { throw new Exception('Cannot redirect, headers already sent'); } يمكنك أيضًا إعادة التوجيه إلى رابط نسبي (هذا ليس جزء من توصيف HTTP الرسمي، لكنه يعمل مع جميع المتصفحات): $url = 'foo/bar'; if (!headers_sent()) { header('Location: ' . $url); exit; } else { throw new Exception('Cannot redirect, headers already sent'); } إذا كانت الترويسات قد أُرسلت، يمكنك إرسال وسم HTML ‏meta refresh. يعتمد وسم ‏meta refresh على معالجة HTML بشكلٍ صحيح عند العميل لكن قد لايتم ذلك وفقًا للمطلوب، بشكلٍ عام يعمل بشكل صحيح فقط مع متصفحات الويب، ويجب أن تنتبه أيضًا أنه إذا كانت الترويسات قد أُرسلت بالفعل فقد تحصل على خطأ وهذا يشغّل استثناءً. يمكنك أيضًا أن تطبع رابطًا يضغط عليه المستخدم للعملاء الذين يتجاهلون وسم ‏meta refresh: $url = 'https://example.org/foo/bar'; if (!headers_sent()) { header('Location: ' . $url); } else { // ‫الحماية من رؤية المتصفح للرابط على أنّه HTML $saveUrl = htmlspecialchars($url); // ‫إخبار المتصفح أن يعيد توجيه الصفحة إلى ‎$saveUrl بعد 0 ثانية print '<meta http-equiv="refresh" content="0; url=' . $saveUrl . '">'; // إظهار الرابط للمستخدم print '<p>Please continue to <a href="' . $saveUrl . '">' . $saveUrl . '</a></p>'; } exit; كيفية تحليل رابط عند كتابتك شيفرة بلغة PHP قد تحتاج إلى تقسيم رابط إلى عدة أجزاء، ويوجد عدة طرق لذلك وفقًا لاحتياجاتك، سنشرح هذه الطرق في الفقرة التالية لتختار منها ما يناسبك. استخدام parse_url()‎ تحلل الدالة parse_url()‎ رابطًا وتعيد مصفوفة ترابطية (associative array) تتضمن مكونات الرابط المختلفة. $url = parse_url('http://example.com/project/controller/action/param1/param2'); /* Array ( [scheme] => http [host] => example.com [path] => /project/controller/action/param1/param2 ) */ يمكنك استخدام الدالة explode إذا كنت تحتاج أن يكون path مقسّمًا: $url = parse_url('http://example.com/project/controller/action/param1/param2'); $url['sections'] = explode('/', $url['path']); /* Array ( [scheme] => http [host] => example.com [path] => /project/controller/action/param1/param2 [sections] => Array ( [0] => [1] => project [2] => controller [3] => action [4] => param1 [5] => param2 ) ) */ يمكنك استخدام الدالة end()‎ إذا كنت تحتاج الجزء الأخير من sections: $last = end($url['sections']); إذا كان الرابط يحتوي على متغيرات GET يمكنك استعادتها أيضًا: $url = parse_url('http://example.com?var1=value1&var2=value2'); /* Array ( [scheme] => http [host] => example.com [query] => var1=value1&var2=value2 ) */ إذا أردت تقسيم متغيرات الاستعلام يمكنك استخدام parse_str()‎ كما يلي: $url = parse_url('http://example.com?var1=value1&var2=value2'); parse_str($url['query'], $parts); /* Array ( [var1] => value1 [var2] => value2 ) */ استخدام explode()‎ تعيد الدالة explode مصفوفة من السلاسل النصية، كل منها سلسلة جزئية من سلسلة نصية مُشكَّلة من تقسيمها على الحدود التي يشكّلها حد السلسلة النصية. $url = "http://example.com/project/controller/action/param1/param2"; $parts = explode('/', $url); /* Array ( [0] => http: [1] => [2] => example.com [3] => project [4] => controller [5] => action [6] => param1 [7] => param2 ) */ يمكنك استعادة الجزء الأخير من الرابط كالتالي: $last = end($parts); // param2 يمكنك أيضًا التنقل في المصفوفة باستخدام sizeof()‎ مع عامل رياضي كما في الشيفرة التالية: echo $parts[sizeof($parts)-2]; // param1 استخدام basename()‎ تُعطى الدالة basename()‎ سلسلة نصية تتضمن مسارًا إلى ملف أو مجلد وترجع مكوّن الاسم الزائد أي ترجع الجزء الأخير من الرابط فقط. $url = "http://example.com/project/controller/action/param1/param2"; $parts = basename($url); // param2 إذا كان الرابط يحتوي على المزيد من الأشياء وكل ما تحتاجه هو اسم المجلد الذي يتضمن الملف الذي تستخدمه عندها يمكنك استخدام dirname()‎: $url = "http://example.com/project/controller/action/param1/param2/index.php"; $parts = basename(dirname($url)); // param2 ترجمة -وبتصرف- للفصول [URLs - How to break down an URL] من كتاب PHP Notes for Professionals book اقرأ أيضًا المقال التالي: معالجة بيانات طلبيات HTTP والتعامل مع أخطاء رفع الملفات في PHP المقال السابق: شرح المولدات وتوضيح مفهوم المغلف (closure) في PHP
    1 نقطة
×
×
  • أضف...