我正在使用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)服务器。我可以提供的任何配置选项可以解释为什么会发生这种情况?或者问题与我的服务器配置无关?
任何帮助非常感谢。提前谢谢!
在我的服务器上,我测试了$meatPrices[1] = $doc->getElementById('meat1')->textContent;
并且它有效。无论出于何种原因,在while
循环内,相同的表达式(getElementById
参数中的变量除外)都会抛出错误:Trying to get property of non-object
。
我的WAMP服务器正在运行PHP版本 5.3.13 。 我朋友的服务器正在运行PHP版 5.3.6 。
答案 0 :(得分:2)
尝试在PHP配置文件(allow_url_fopen=on
)中添加php.ini
。保存并重启Apache;它应该工作......
修改强>
还要检查php_openssl.dll
文件中是否启用了extension=php_openssl.dll
扩展程序php.ini
。同样,需要重新启动Apache。
修改强>
这取决于您拥有的PHP版本,但这里有两个可能的解决方案:
fillArrayFromDOM($meatPrices,"meat");
替换为
$meatPrices = fillArrayFromDOM($meatPrices,"meat")
;你也可以
更改您的函数以删除必要的$ meatPrices参数)。或
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();
两者都应该有效;我很急,没时间等你的评论回复。让我们知道你得到了什么...