【问题标题】:file_get_contents, curl, get_headers, .. returns nothingfile_get_contents, curl, get_headers, .. 什么都不返回
【发布时间】:2025-12-22 05:40:12
【问题描述】:

我正在尝试获取外部文件的内容(youtube json 提要) 我首先尝试使用file_get_contents() 和 curl。 他们都没有给我任何回应。

在 php.ini 中,allow_url_fopen 设置为开启。我还尝试关闭安全模式。

error_reporting('E_ALL');
ini_set('display_errors',1);
echo file_get_contents('http://gdata.youtube.com/feeds/api/playlists/760E7F6C9B5CD71E?v=2&alt=json');

可能出了什么问题?

【问题讨论】:

  • 它的error_reporting(E_ALL),你也检查了你的服务器日志,也许你有某种限制。只需查找您的配置即可查看使用<?php phpinfo();?> 安装的所有内容
  • 改成error_reporting(E_ALL);获取:无法打开流:file.php 中的网络无法访问
  • 一些主机有一个传出连接防火墙类型的东西,也许它设置为拒绝所有。
  • 有没有办法判断服务器是否有这样的防火墙?我在 plesk 安装中使用共享主机。
  • 好吧,如果您遇到提示的错误,请查看您的控制面板中的 Server > IP Addresses > Firewall 或类似信息,如果您遇到问题,请向您的主机开一张票并让他们修复它。

标签: php curl file-get-contents get-headers


【解决方案1】:

使用 curl 代替 file_get_contents。像这样的:

$url  = 'http://gdata.youtube.com/feeds/api/playlists/760E7F6C9B5CD71E?v=2&alt=json';
$ch = curl_init();
$timeout = 5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

【讨论】:

  • 我没有收到任何错误,也没有回应。脚本在线:test.odb-competition.be/test.php
  • 如果您收到“网络无法访问”错误,那么这是网络问题,您可以联系您的托管公司。
  • @cloetensbrecht 您可以在 php.ini 文件中启用错误报告以查看您的 php 错误。