كيف يمكنني الوصول إلى طلب الرؤوس التي لا تظهر في $ _SERVER؟

StackOverflow https://stackoverflow.com/questions/827060

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا محاولة لخلق API REST في PHP وأود أن تنفيذ نظام مصادقة على غرار النهج S3 الأمازون. وهذا ينطوي على تحديد العرف رأس "التفويض" في الطلب.

ولقد فكرت أنني سأكون قادرا على الوصول إلى رأس مع _SERVER $ [ 'HTTP_AUTHORIZATION']، لكنه لم يعثر على أثر في var_dump ($ _ SERVER). وapache_request_headers () أن وظيفة حل مشكلتي، ولكن مضيفي تنفذ PHP كما CGI، لذلك فمن غير متوفرة.

هل هناك طريقة أخرى يمكنني الوصول إلى رؤوس طلب كاملة في PHP؟

هل كانت مفيدة؟

المحلول

وستحتاج إلى القيام ببعض سحر mod_rewrite للحصول على رؤوس ماضيك حاجز CGI، كما يلي:

RewriteEngine on
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

<?php
    $auth = $_SERVER['HTTP_AUTHORIZATION'];
?>

لاحظ أنه إذا كنت تستخدم mod_rewrite لأغراض أخرى، ويمكن أن ينتهي الأمر $_SERVER['REDIRECT_HTTP_AUTHORIZATION'].

نصائح أخرى

وحاول

$_ENV['HTTP_AUTHORIZATION']

عند استخدام واجهة CGI بدلا من واجهة أباتشي وحدة، وينبغي أن تكون رؤوس HTTP متاح في متغيرات البيئة.

وهناك تمديد PECL رائع أن يسمح لجميع أنواع من الوصول المتعلقة HTTP. PECL_HTTP وبشكل أكثر تحديدا <لأ href = "http://php.net/http" يختلط = "نوفولو noreferrer"> http://php.net/http و <لأ href = "http://php.net/manual/en/function.http-get-request-headers.php" يختلط = "نوفولو noreferrer"> http://php.net/manual/en/function.http-get-request-headers.php .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top