3

我正在使用DOMDocument从网页中检索几位文本并将它们放入数组中。相同的代码适用于另一台服务器,但不适用于我的。我得到Trying to get property of non-object循环的每次迭代,while最后数组保持为空。

$html = file_get_contents("http://sugarkettle.site44.com/catering.html");
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
libxml_clear_errors();

$meatPrices = array();

function fillArrayFromDOM($array,$type) {
    global $doc;
    $i = 0;
    $label = 1;
    $array = array();
    while ($label <= 15):
      $array[$i] = $doc->getElementById($type.$label)->textContent;
      $i++;
      $label++;
    endwhile;
    return $array;
}

fillArrayFromDOM($meatPrices,"meat");
echo var_dump($meatPrices); 

这是它的工作链接: http ://www.evintr.com/willtest.php

他正在运行 GoDaddy 服务器,而我有一个本地 WAMP (2.2) 服务器。我可以提供的任何配置选项都可以解释为什么会发生这种情况?还是问题与我的服务器配置无关?

非常感谢任何帮助。提前致谢!

更新 1 - 2012 年 11 月 16 日

在我的服务器上,我已经测试过$meatPrices[1] = $doc->getElementById('meat1')->textContent;并且可以正常工作。无论出于何种原因,在while循环内部,相同的表达式(getElementById参数中的变量除外)都会抛出错误:Trying to get property of non-object.

更新 2 - 2012 年 11 月 17 日

我的 WAMP 服务器正在运行 PHP 版本5.3.13。我朋友的服务器正在运行 PHP 版本5.3.6

4

1 回答 1

2

尝试添加allow_url_fopen=on您的 PHP 配置文件 ( php.ini)。保存并重新启动 Apache;它应该工作......

编辑: 还要检查您是否php_openssl.dll启用了扩展名(extension=php_openssl.dll在您的php.ini文件中)。同样,需要重新启动 Apache。

编辑:

这取决于您拥有的 PHP 版本,但这里有两个潜在的解决方案:

  1. fillArrayFromDOM($meatPrices,"meat");$meatPrices = fillArrayFromDOM($meatPrices,"meat");替换行 您还可以更改函数以删除必要的 $meatPrices 参数)。

或者

  1. function fillArrayFromDOM($array,$type) {用你替换行function fillArrayFromDOM(&$array,$type) { //note new character &; it will keep reference to $array variable so it could be changeable;也可以删除行:$array = array();

两者都应该工作;我很着急,没有时间等待您的评论回复。让我们知道你得到了什么...

于 2012-11-17T03:43:14.043 回答