在非对象上调用成员函数 getAttribute()
Call to a member function getAttribute() on a non-object
这是我得到的错误:
Fatal error: Call to a member function getAttribute() on a non-object
in /home/a4688869/public_html/random/index.php
on line 45
这是一张图片:http://prntscr.com/5rum9z
该功能适用于前几张,但在显示几张图片后就会中断。本质上,代码会生成一个随机 html。我使用 cURL 获取 html,然后用一个函数解析它,然后 select 来自站点的图像,然后重复该过程,直到我得到 5 张图像。
我的代码
$original_string = '123456789abh';
$random_string = get_random_string($original_string, 6);
//Generates a random string of characters and returns the string
function get_random_string($valid_chars, $length)
{
$random_string = ""; // start with an empty random string
$num_valid_chars = strlen($valid_chars); // count the number of chars in the valid chars string so we know how many choices we have
// repeat the steps until we've created a string of the right length
for ($i = 0; $i < $length; $i++)
{
$random_pick = mt_rand(1, $num_valid_chars); // pick a random number from 1 up to the number of valid chars
// take the random character out of the string of valid chars
// subtract 1 from $random_pick because strings are indexed starting at 0, and we started picking at 1
$random_char = $valid_chars[$random_pick-1];
$random_string .= $random_char; // add the randomly-chosen char onto the end of our string so far
}
return $random_string;
}
//Parses the random website and returns the image source
function websearch($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
$dom = new DOMDocument;
@$dom->loadHTML($html); // Had to supress errors
$img = $dom->getElementsByTagName('img')->item(1); //Get just the second picture
$src = $img->getAttribute('src'); //Get the source of the picture
return $src;
}
显示 html
的代码部分
for ($i = 0; $i < $perpage; $i++){
$random_string = get_random_string($original_string, 6);
$src = websearch('http://prntscr.com/' . $random_string);
while( $src == "http://i.imgur.com/8tdUI8N.png"){
$random_string = get_random_string($original_string, 6);
$src = websearch('http://prntscr.com/' . $random_string);
}
?>
<img src="<?php echo $src; ?>">
<p><a href="<?php echo $src; ?>"><?php echo $src; ?></a></p>
<?php if ($i != $perpage - 1){ // Only display the hr if there is another picture after it ?>
<hr>
<?php }}?>
每当您遇到“非对象”错误时,那是因为您在不是对象的变量上调用方法。
这可以通过始终检查您的 return 值来解决。它可能不是很优雅,但计算机是愚蠢的,如果你想让你的代码工作,那么你必须始终确保它做你想做的事。
$img = $dom->getElementsByTagName('img')->item(1);
if ($img === null) {
die("The image was not found!");
}
您还应该养成阅读所用内容文档的习惯(在本例中为 return 值)。
正如您在 DOMNodelist::item
页面上看到的,如果方法失败,return 值是 null
:
Return Values
The node at the indexth position in the DOMNodeList, or NULL if that is not a valid index.
这是我得到的错误:
Fatal error: Call to a member function getAttribute() on a non-object
in /home/a4688869/public_html/random/index.php
on line 45
这是一张图片:http://prntscr.com/5rum9z
该功能适用于前几张,但在显示几张图片后就会中断。本质上,代码会生成一个随机 html。我使用 cURL 获取 html,然后用一个函数解析它,然后 select 来自站点的图像,然后重复该过程,直到我得到 5 张图像。
我的代码
$original_string = '123456789abh';
$random_string = get_random_string($original_string, 6);
//Generates a random string of characters and returns the string
function get_random_string($valid_chars, $length)
{
$random_string = ""; // start with an empty random string
$num_valid_chars = strlen($valid_chars); // count the number of chars in the valid chars string so we know how many choices we have
// repeat the steps until we've created a string of the right length
for ($i = 0; $i < $length; $i++)
{
$random_pick = mt_rand(1, $num_valid_chars); // pick a random number from 1 up to the number of valid chars
// take the random character out of the string of valid chars
// subtract 1 from $random_pick because strings are indexed starting at 0, and we started picking at 1
$random_char = $valid_chars[$random_pick-1];
$random_string .= $random_char; // add the randomly-chosen char onto the end of our string so far
}
return $random_string;
}
//Parses the random website and returns the image source
function websearch($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
$dom = new DOMDocument;
@$dom->loadHTML($html); // Had to supress errors
$img = $dom->getElementsByTagName('img')->item(1); //Get just the second picture
$src = $img->getAttribute('src'); //Get the source of the picture
return $src;
}
显示 html
的代码部分for ($i = 0; $i < $perpage; $i++){
$random_string = get_random_string($original_string, 6);
$src = websearch('http://prntscr.com/' . $random_string);
while( $src == "http://i.imgur.com/8tdUI8N.png"){
$random_string = get_random_string($original_string, 6);
$src = websearch('http://prntscr.com/' . $random_string);
}
?>
<img src="<?php echo $src; ?>">
<p><a href="<?php echo $src; ?>"><?php echo $src; ?></a></p>
<?php if ($i != $perpage - 1){ // Only display the hr if there is another picture after it ?>
<hr>
<?php }}?>
每当您遇到“非对象”错误时,那是因为您在不是对象的变量上调用方法。
这可以通过始终检查您的 return 值来解决。它可能不是很优雅,但计算机是愚蠢的,如果你想让你的代码工作,那么你必须始终确保它做你想做的事。
$img = $dom->getElementsByTagName('img')->item(1);
if ($img === null) {
die("The image was not found!");
}
您还应该养成阅读所用内容文档的习惯(在本例中为 return 值)。
正如您在 DOMNodelist::item
页面上看到的,如果方法失败,return 值是 null
:
Return Values
The node at the indexth position in the DOMNodeList, or NULL if that is not a valid index.