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

السؤال

Recommended Posts

  • 1
نشر (معدل)

لمعرفة الرابط الأساس الذي تعمل ضمنه تحتاج التالي:

  1. البروتوكول الذي يخدم العميل (http - https) يحدد عبر القيمة التالية:
$_SERVER['HTTPS'] // هل بروتوكول التشفير مفعل
  1.  اسم النطاق الذي يمكن للعميل الوصول للمخدم عبره (www.example.com) يحدد عبر القيمة التالية:
    $_SERVER['SERVER_NAME'] // اسم النطاق الحالي

     

  2. تنسيق القيمتين بالصيغة التالية [بروتوكول + "//:" + اسم نطاق] يمكن تضمين التابع الذي ذكرته كما يلي:
function getBaseURL(){
  return sprintf(
    "%s://%s",
    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
    $_SERVER['SERVER_NAME']
  );
}

echo getBaseURL(); // "https://www.example.com" 

 

تم التعديل في بواسطة Hassan Hedr
  • 0
نشر

https يعني ان موقعك مزود بssl وأمن للتواصل, والكود اللذي كتبته انت لا يتضمن تلك المعلومة, انما يتضمن معلومات اخرى :

function getBaseUrl( )
{
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
       echo "https".$_SERVER['HTTP_HOST'].strrev( strstr( strrev( $_SERVER['PHP_SELF'] ), "/" ) );
else
	   echo "http".$_SERVER['HTTP_HOST'].strrev( strstr( strrev( $_SERVER['PHP_SELF'] ), "/" ) );

}

ينقصك هنا ان تتأكد اذا كان الاتصال مؤمن تضف كلمة https للرابط عدا ذلك تضف http فقط,وهذا يمكن اتمامه على النحو التالي:


 

  • 0
نشر

يمكنك صنع دالة للتحقق من شهادة ssl فحيث يمكنك إنشاء الدالة بهذا الشكل 

function isSSL( )
{
        
}

ومن ثم يمكنك استخدام مصفوفة

$_SERVER

لجلب قيمة HTTPS بهذا الشكل 

$_SERVER['HTTPS']

حيث ايضا يمكنك استخدام دالة preg_match  لتقوم بتطبيق تعبيراً نمطياً على سلسلة نصية وتركيب هذه الدالة هو 

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int$offset = 0 ]]] )

بحيث أن pattern هو النص المراد البحث عنه, كسلسة نصية, subject السلسلة النصية المُدخلة , matches إذا ضُبِطَت قيمة المعامل matches، فستُملأ تلك المصفوفة بنتائج البحث. إذ ستحتوي ‎‎‎‎$matches[0]‎ على النص الذي يطابق النمط الكامل، وستحتوي ‎‎‎‎$matches[1]‎ على النص الذي يطابق أول نمط فرعي محاط بالأقواس، وعند تطبيق 

preg_match( "/^(|off|false|disabled)\$/i", $_SERVER['HTTPS'] )

سوف تعيد لنا الدالة 1 إذا كانت الشهادة مفعلة و صفر إذا كانت غير مفعلة

function isSSL( )
{
        return !( !isset( $_SERVER['HTTPS'] ) || preg_match( "/^(|off|false|disabled)\$/i", $_SERVER['HTTPS'] ) );
}

ومن ثم يمكنك استخدام هذه الدالة بداخل دالة getBaseUrl بهذا الشكل 

function getBaseUrl( )
{
        return ( isssl( ) ? "https://" : "http://" ).$_SERVER['HTTP_HOST'].strrev( strstr( strrev( $_SERVER['PHP_SELF'] ), "/" ) );
}

بحيث تضع بجانب الرابط 

https://

إذا كانت الشهادة مفعلة و تضع 

http://

إذا كانت الشهادة غير مفعلة .

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...