2016-02-03 56 views
0

我寫了一個小腳本來測試我的項目功能,它工作得很好。在PHP中file_get_contents在命令行工作,但不在我的Symfony項目

<?php 

$username = 'exportcsv'; 
$password = 'exportcsv'; 

$context = \stream_context_create(array(
    'http' => array(
     'header' => "Authorization: Basic " . \base64_encode("$username:$password"), 
     'timeout' => 2 
    ) 
)); 

$content = \file_get_contents('http://theurl', false, $context); 

var_dump($content); 

url實際上是一個硬編碼的Symfony路由,它返回一個CSV文本字符串。

但是,當我做同樣的一個控制器,我得到:

Warning: file_get_contents(http://myurl): failed to open stream: HTTP request failed! (http://myurl): failed to open stream: HTTP request failed! 

Whetever我用file()file_get_contents()相同的硬編碼的URL或絕對路徑生成:

$url = $this->generateUrl('the_route_name', array(
    'variable' => $variable 
), true); 

編輯:也許這是一個重要的事情要注意,我在一個公司代理,所以我添加在上下文數組'proxy' => 'http://proxy.mycompany.com:3128',現在我得到了:failed to open stream: Unable to find the socket transport &quot;http&quot; - did you forget to enable it when you configured PHP?

相同或不同'request_fulluri' => true,'request_fulluri' => false,

+0

您是否嘗試在'file_get_contents'方法之前刪除\? – Vardius

+0

是的,當然,它沒有做任何事情(我感到很驚訝,因爲我在想如果我們在一個特定的命名空間中,我們需要用\來指定我們希望使用的PHP標準庫函數。 \。例如,當我使用ZipArchive類而沒有\時,我得到了上下文錯誤。 –

+0

@Vardius你對代理的看法是什麼?我在上下文數組'proxy'=>'http://proxy.mycompany中添加。 com:3128'現在我得到了:無法打開流:無法找到套接字傳輸" http " - 你忘了啓用它時,你配置PHP? –

回答

0

我找到解決方案。我通過symfony命令使用PHP內置服務器:app/console server:run (bin/console server:run since 2.8+)

所以當file_get_contents的上下文無法取數據。當使用我的Apache2網絡服務器時,一切正常。

我搜索,但無法找到如何設置上下文的http數組端口值。

而這並不告訴我爲什麼它在命令行和單個腳本中工作。

相關問題