In PHP file_get_contents 在命令行中工作但在我的 Symfony 项目中不工作
In PHP file_get_contents works in command line but not in my Symfony project
我写了一个小脚本来测试我的项目的一个功能,它工作得很好。
<?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 路由,return 我是一个 CSV 文本字符串。
但是当我在控制器上执行相同操作时,我得到:
Warning: file_get_contents(http://myurl): failed to open stream: HTTP request failed! (http://myurl): failed to open stream: HTTP request failed!
每当我使用 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,
相同
我找到了解决办法。我通过 symfony 命令使用 PHP 内置服务器:app/console server:run (bin/console server:run since 2.8+)
.
所以当 file_get_contents
的上下文无法获取数据时。使用我的 Apache2 网络服务器时一切正常。
我搜索但找不到如何在上下文的 http 数组中设置端口值。
这并没有告诉我为什么它在命令行和单个脚本中工作。
我写了一个小脚本来测试我的项目的一个功能,它工作得很好。
<?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 路由,return 我是一个 CSV 文本字符串。
但是当我在控制器上执行相同操作时,我得到:
Warning: file_get_contents(http://myurl): failed to open stream: HTTP request failed! (http://myurl): failed to open stream: HTTP request failed!
每当我使用 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,
我找到了解决办法。我通过 symfony 命令使用 PHP 内置服务器:app/console server:run (bin/console server:run since 2.8+)
.
所以当 file_get_contents
的上下文无法获取数据时。使用我的 Apache2 网络服务器时一切正常。
我搜索但找不到如何在上下文的 http 数组中设置端口值。
这并没有告诉我为什么它在命令行和单个脚本中工作。