使用PHP简单html DOM解析器处理html时,有时会出现致命错误
我正在使用PHP简单HTML DOM解析器根据目录号从宜家网站提取一些元数据 我测试的30275861号和其他几十个都工作正常,因此给出了该链接($produkt变量)和一些数据(如果链接粘贴到浏览器,则会给出带有kallax系统设备的页面) 给出数字69136138-链接结果($produkt变量),如果粘贴到浏览器(besta tv furniture),则会出现错误: 致命错误:调用布尔值上的成员函数find() 在大多数情况下有效的代码如下所示:使用PHP简单html DOM解析器处理html时,有时会出现致命错误,php,html,dom,Php,Html,Dom,我正在使用PHP简单HTML DOM解析器根据目录号从宜家网站提取一些元数据 我测试的30275861号和其他几十个都工作正常,因此给出了该链接($produkt变量)和一些数据(如果链接粘贴到浏览器,则会给出带有kallax系统设备的页面) 给出数字69136138-链接结果($produkt变量),如果粘贴到浏览器(besta tv furniture),则会出现错误: 致命错误:调用布尔值上的成员函数find() 在大多数情况下有效的代码如下所示: <?php include('s
<?php
include('simple_html_dom.php');
function clean($string) {
$string = str_replace(',', '.', $string);
return preg_replace('/[^A-Za-z0-9\-.]/', '', $string);
}
if(isset($_POST['produkt_id'])){
$produkt_id=str_replace('.', '', $_POST['produkt_id']);
$url="http://www.ikea.com/pl/pl/search/?query=".$produkt_id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Must be set to true so that PHP follows any "Location:" header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$a = curl_exec($ch); // $a will contain all headers
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // Return the last effective URL
$produkt=(string)$url;
$html = file_get_html($produkt);
echo $produkt_id;
echo "<br>";
echo $produkt;
foreach($html->find('meta[name=partnumber]') as $e) echo $kod=$e->content;
foreach($html->find('link[rel=image_src"]') as $e) echo $obrazek=$e->href;
foreach($html->find('meta[name=title]') as $e) echo $nazwa=$e->content;
foreach($html->find('meta[name=price]') as $e) echo $cena=floatval(clean($e->content));
?>
为什么不尝试在条件语句中包装您的foreach
循环,以便只有当$html
既不为null也不为空时,循环才会运行
<?php
// ... SOME CODE ABOVE
$html = file_get_html($produkt);
/* WHY NOT (AT THIS POINT) TRY TO INSPECT THE CONTENT OF $html? WITH VAR_DUMP?*/
var_dump($html); //<== JUST TO SEE THE DATA CONTENT...
// ONLY RUN FOR LOOPS (ECHOING OUT SOME DATA)
// IF AND ONLY IF $html HAS SOME CONTENT
if($html && !empty($html)){
echo $produkt_id; //<== MAKES SENSE TO ECHO THIS ONLY IF $html HAS DATA
echo "<br>"; //<== MAKES SENSE TO ECHO THIS ONLY IF $html HAS DATA
echo $produkt; //<== MAKES SENSE TO ECHO THIS ONLY IF $html HAS DATA
foreach($html->find('meta[name=partnumber]') as $e){
echo $kod=$e->content;
}
foreach($html->find('link[rel=image_src"]') as $e){
echo $obrazek=$e->href;
}
foreach($html->find('meta[name=title]') as $e){
echo $nazwa=$e->content;
}
foreach($html->find('meta[name= price]') as $e){
echo $cena=floatval(clean($e->content));
}
}
为什么不尝试在条件语句中包装您的foreach
循环,以便只有当$html
既不为null也不为空时,循环才会运行
<?php
// ... SOME CODE ABOVE
$html = file_get_html($produkt);
/* WHY NOT (AT THIS POINT) TRY TO INSPECT THE CONTENT OF $html? WITH VAR_DUMP?*/
var_dump($html); //<== JUST TO SEE THE DATA CONTENT...
// ONLY RUN FOR LOOPS (ECHOING OUT SOME DATA)
// IF AND ONLY IF $html HAS SOME CONTENT
if($html && !empty($html)){
echo $produkt_id; //<== MAKES SENSE TO ECHO THIS ONLY IF $html HAS DATA
echo "<br>"; //<== MAKES SENSE TO ECHO THIS ONLY IF $html HAS DATA
echo $produkt; //<== MAKES SENSE TO ECHO THIS ONLY IF $html HAS DATA
foreach($html->find('meta[name=partnumber]') as $e){
echo $kod=$e->content;
}
foreach($html->find('link[rel=image_src"]') as $e){
echo $obrazek=$e->href;
}
foreach($html->find('meta[name=title]') as $e){
echo $nazwa=$e->content;
}
foreach($html->find('meta[name= price]') as $e){
echo $cena=floatval(clean($e->content));
}
}
什么是file\u get\u html
?@Dekelfile\u get\u html
是simple\u html\u dom
类的一种方法…;-)因为它不是标准的PHP类/方法,所以应该在文章中提到它(应该提供lib的链接)。[…]使用PHP简单HTML DOM解析器。代码中包括('simple_html_dom.php');但是你在这里是链接什么是file\u get\u html
?@Dekelfile\u get\u html
是simple\u html\u dom
类的一种方法…;-)因为它不是标准的PHP类/方法,所以应该在文章中提到它(应该提供lib的链接)。[…]使用PHP简单HTML DOM解析器。代码中包括('simple_html_dom.php');但你就在这里,这是链接,谢谢波依兹。事实上,代码是肮脏的,不是最优的,但这不是重点-有没有人能告诉我为什么两个链接都指向同一个页面,但一个作为数据源,另一个不是-这是这里的问题。谢谢波伊兹。事实上,代码是肮脏的,不是最优的,但这不是重点——有没有人能告诉我为什么两个链接都指向同一个页面,但一个作为数据源,另一个不是——这就是这里的问题。