2017-01-02 72 views
2

我正在測試我的代碼,並且我有一些標題問題。在每個API我用PHPUnit - getallheaders不工作

$headers = getallheaders(); 

得到的是,當我與應用程序或crhome郵遞員延伸測試能正常工作。 當我勞克我的測試,這樣

$client = $this->createClient(); 
    $client->request('GET', '/api/shotcard', 
     ['qrcode'=>'D0m1c173'], [], 
     ['HTTP_API_TOKEN' => 'abc123'] 
    ); 

    $this->assertEquals(200, $client->getResponse()->getStatusCode()); 

在那裏我嘗試用該測試令牌(不是令牌我會在應用程序中使用),用戶拍攝的卡片與QR碼,我看到了一個電話像這樣:https://stackoverflow.com/a/11681422/5475228。 測試以這種方式失敗:

PHP Fatal error: Call to undefined function AppBackendBundle\Controller\getallheaders() in /var/www/pitstop/src/AppBackendBundle/Controller/ApiController.php on line 42

+0

來自doc:此函數是apache_request_headers()的別名。請閱讀apache_request_headers()文檔以獲取有關此函數如何工作的更多信息。 http://php.net/manual/en/function.apache-request-headers.php – Matteo

+0

你使用哪個版本的php?它應該是可用的CLI自PHP 5.5.7以來 – Matteo

回答

1

我決心以這種方式(感謝https://stackoverflow.com/a/11681422/5475228

private function request_headers($type, Request $request) 
{ 
    if(function_exists("getallheaders")) 
    { 
     if($header = getallheaders()[$type]) 
     { 
      return $header; 
     } 
    } 

    return $request->headers->get($type); 
} 

所以正常請求從app get header和getallheaders(),來自PHPUnit的請求獲取它請求對象。我不知道爲什麼(如果有人能解釋),但工作。

5

this文章:

If you use Nginx, PHP-FPM or any other FastCGI method of running PHP you’ve probably noticed that the function getallheaders() does not exist. There are many creative workarounds in the wild, but PHP offers two very nice features to ease your pain.

if (!function_exists('getallheaders')) { 
    function getallheaders() { 
    $headers = []; 
    foreach ($_SERVER as $name => $value) { 
     if (substr($name, 0, 5) == 'HTTP_') { 
      $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; 
     } 
    } 
    return $headers; 
    } 
} 
+0

我也使用這個解決方案,並且工作正常,當我從應用程序或郵遞員測試。但用PHPUnit dont,我也試着打印頭文件,PHPUnit打印出一個空值。我使用PHP 5.5.9 – NicolaPez