【问题标题】:file_get_contents from URL works on local server only来自 URL 的 file_get_contents 仅适用于本地服务器
【发布时间】:2020-05-22 13:16:26
【问题描述】:

我刚刚开始学习 PHP,并开始编写从 Myfxbook 页面提取公共数据的代码。是否有任何可能的答案为什么以下函数在我的本地 XAMPP 服务器上运行良好并返回我需要的值但在将其上传到我的共享托管服务器后它返回 0?

function loadFromURL($url) {
    $html = file_get_contents($url);
    $doc = new DOMDocument();
    $doc->loadHTML($html);

    $stats = $doc->getElementById("stats");

    $firstLi = $stats->childNodes[1];
    $secondSpan = $firstLi->childNodes[1];

    $strVal = $secondSpan->textContent;

    $roundGainPC = floatval($strVal);

    return round($roundGainPC);
}

对我来说更奇怪的是,我的代码中的第二个函数既适用于我的本地服务器,也适用于共享网络服务器:

function loadFromURL2($url) {
    $html = file_get_contents($url);
    $doc = new DOMDocument();
    $doc->loadHTML($html);

    $stats = $doc->getElementById("historyTotalSpan");

    $strVal = $stats->textContent;

    $totalTrades = preg_replace('/[^0-9]/', '', $strVal);

    return round($totalTrades);
}

对于这个测试项目,我将公共系统之一用于这两个功能:https://www.myfxbook.com/members/autotrade/turtle-eur/1644166

理想情况下,第一个函数将返回当前为 174(四舍五入)的总增益。相反,它在实时服务器上返回 0。

【问题讨论】:

  • 确保你在服务器上开启了allow_url_fopen
  • 谢谢。我检查了它,它是开着的。此外,如果相关的话,服务器上的 PHP 版本是 7.3。

标签: php dom domdocument


【解决方案1】:

我认为函数file_get_contents 很适合从本地驱动器获取文件 请改用 curl。

function loadFromURL($url) {
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
      $html = curl_exec($ch);
      $doc = new DOMDocument();
      $doc->loadHTML($html);
      ...
      curl_close($ch);
    }

【讨论】:

  • 用这个替换一个简单的单行函数调用?为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
相关资源
最近更新 更多