为什么DOMDocument不能与WAMP服务器一起使用?

时间:2012-11-17 03:35:21

标签: php wamp domdocument

我正在使用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 - 11/16/12

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

更新2 - 11/17/12

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

1 个答案:

答案 0 :(得分:2)

尝试在PHP配置文件(allow_url_fopen=on)中添加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();
    2. 两者都应该有效;我很急,没时间等你的评论回复。让我们知道你得到了什么...