我寫了一個小腳本來測試我的項目功能,它工作得很好。在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 "http" - did you forget to enable it when you configured PHP?
相同或不同'request_fulluri' => true,
或'request_fulluri' => false,
您是否嘗試在'file_get_contents'方法之前刪除\? – Vardius
是的,當然,它沒有做任何事情(我感到很驚訝,因爲我在想如果我們在一個特定的命名空間中,我們需要用\來指定我們希望使用的PHP標準庫函數。 \。例如,當我使用ZipArchive類而沒有\時,我得到了上下文錯誤。 –
@Vardius你對代理的看法是什麼?我在上下文數組'proxy'=>'http://proxy.mycompany中添加。 com:3128'現在我得到了:無法打開流:無法找到套接字傳輸" http " - 你忘了啓用它時,你配置PHP? –