fopen() 无法从连接读取 .xml 文件

问题描述 投票:0回答:1

我能够以正常方式读取 .xml 文件,该文件是公开可用的,并且可以通过网络浏览器访问,直到今天为止,如下所示。

$file_handle = fopen($exchanges_file_url, 'r');

但是,截至今天,我意识到我在阅读时遇到了空值。

当我使用

将输出打印到屏幕上时

dd($file_handle);

stream resource @8 ▼ // app/Http/Controllers/InvoiceController.php:603
  timed_out: false
  blocked: true
  eof: false
  wrapper_data: array:2 [▼
    0 => "HTTP/1.1 200 OK"
    1 => "Connection: Close"
  ]
  wrapper_type: "http"
  stream_type: "tcp_socket/ssl"
  mode: "r"
  unread_bytes: 189
  seekable: false
  uri: "http://www.tcmb.gov.tr/kurlar/today.xml"
  options: []
}

我的 Laravel 项目正在我的本地计算机上运行。当我将同一项目上传到网络服务器时,读取 .xml 文件没有任何问题。

使用 artisan 命令、缓存、配置等...我用 optimization:clear 逐一删除了所有内容,但没有任何改变。我关闭并打开调制解调器,更改了 IP 地址,结果仍然是相同的。当我尝试用curl读取,得到相同的结果。我还看到我的php.ini文件中的“allow_url_fopen”选项处于“on”状态。我添加了用户代理,再次得到相同的结果,没有任何改变。

你能帮我吗?

我正在等待有关我的问题的答案或替代方法的结果。

php xml laravel xml-parsing fopen
1个回答
0
投票

考虑到 CBro 的回复,更改 http -> https 后

$opts=array(
                "ssl"=>array(
                    "verify_peer"=>false,
                    "verify_peer_name"=>false,
                ),
            ); 

@fopen($exchanges_file_url, 'r',false, stream_context_create($opts));

读取具有这些设置的 xml 文件后

$context = stream_context_create(array('ssl'=>array(
                    'verify_peer' => false, 
                    "verify_peer_name"=>false
                    )));

libxml_set_streams_context($context);

$exchanges = simplexml_load_file($exchanges_file_url); 

添加ssl信息后修复错误

© www.soinside.com 2019 - 2024. All rights reserved.