w3schools - php تحميل




دعوة إلى وظيفة غير معرفة apache_request_headers() (4)

لقد قمت بتحويل البرامج النصية الخاصة بي إلى خادم آخر. على الخادم السابق ، عمل هذا بشكل لا تشوبه شائبة ، والآن بعد أن حولته إلى خادم آخر ، لا أستطيع فهم المشكلة.

لست متأكدًا من أن ذلك سيساعد ، ولكن إليك الشفرة ذات الصلة.

$headers = apache_request_headers();

إصدار PHP هو: PHP 5.3.2

سيكون موضع تقدير أي مساعدة.


إذا تم تثبيت php كوحدة Apache :

apache_request_headers()["Authorization"];

آخر ، انتقل إلى ملف .htaccess وأضف:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

يمكنك بعد ذلك الوصول إلى رؤوس الطلبات باستخدام أيٍّ من هذه العناوين:

$_SERVER["HTTP_AUTHORIZATION"]; // using super global

أو

$app->request->headers("Authorization"); // if using PHP Slim

حدث نفس الشيء عند استخدام "apache_request_headers ()" لذلك استخدمت هذا الرمز - يعمل بشكل مثالي بالنسبة لي لإخراج جميع الرؤوس:

<?php

    $headers = array();

    foreach($_SERVER as $key => $value) {
        if(strpos($key, 'HTTP_') === 0) {
            $headers = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
            echo $headers." : ". $i[$headers] = $value . "<br>";
        }
    }

?>

مثال الإخراج:

Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding : gzip, deflate
Accept-Language : en-US,en;q=0.5
Cache-Control : max-age=0
Connection : keep-alive
Host : example.com
Referer : https://example.com/
User-Agent : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

من docs ، قبل إصدار PHP 5.4.0:

يتم دعم هذه الوظيفة فقط عندما يتم تثبيت PHP كوحدة أباتشي.

PHP 5.4.0 ولاحقًا تدعم هذه الوظيفة دون قيد أو شرط.

تتضمن مستندات Said أيضًا وظائف بديلة تحاكي وظائف apache_request_headers من خلال التنقل عبر $_SERVER .


يمكنك استخدام وظيفة الاستبدال التالية:

<?php
if( !function_exists('apache_request_headers') ) {
///
function apache_request_headers() {
  $arh = array();
  $rx_http = '/\AHTTP_/';
  foreach($_SERVER as $key => $val) {
    if( preg_match($rx_http, $key) ) {
      $arh_key = preg_replace($rx_http, '', $key);
      $rx_matches = array();
      // do some nasty string manipulations to restore the original letter case
      // this should work in most cases
      $rx_matches = explode('_', $arh_key);
      if( count($rx_matches) > 0 and strlen($arh_key) > 2 ) {
        foreach($rx_matches as $ak_key => $ak_val) $rx_matches[$ak_key] = ucfirst($ak_val);
        $arh_key = implode('-', $rx_matches);
      }
      $arh[$arh_key] = $val;
    }
  }
  return( $arh );
}
///
}
///
?>

المصدر: docs





php