如果404返回Simple DOM PHP,如何获取新URL

时间:2015-01-27 09:02:26

标签: php error-handling http-status-code-404 simple-html-dom

我尝试使用简单的dom从网址获取HTML。我想要获得的网址只有两种可能的变体形式。我想要做的是如果我检查标题,当我得到404时,我需要获取另一个URL。

以下是我的代码。我得到了一个意想不到的ELSE"错误。我不确定从哪里开始。请不要对我的代码笑得太厉害,我还不熟悉php:)

非常感谢任何帮助。

<?php                        
require_once 'libs/simple_html_dom.php';
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
list($chuck, $keep) = explode('=', $url);
list($chuck1, $keep1) = explode('/', $keep);
$myURL = "http://www.example.com/" . $chuck1 . "/" . $keep1 . "-url-1.html";
$myURL2 = "http://www.exmple.com/" . $chuck1 . "/" . $keep1 . "-url-2.html";
$patterns = array();
$patterns[0] = 'find';
$patterns[1] = 'find2';
$patterns[2] = 'find3';
$replacements = array();
$replacements[0] = 'replace1';
$replacements[1] = 'replace2';
$replacements[2] = 'replace3';
$data = str_replace($patterns, $replacements, $myURL, $element);
$data2 = str_replace($patterns, $replacements, $myURL2, $element);
$headers = @get_headers($data);
if (is_array($headers)){
if(strpos($headers[0], '404 Not Found'))
    $html2 = @file_get_html($data2);
    $element = $html->find('div[class="cool-attribute"]', 0);
    echo str_replace($patterns, $replacements, $element);
else
    $html = @file_get_html($data);
    $element = $html->find('div[class="cool-attribute"]', 0);
    echo str_replace($patterns, $replacements, $element);

}

&GT;

1 个答案:

答案 0 :(得分:1)

您在if-else块中错过了大括号{ ... }

以这种方式修复:

if (strpos($headers[0], '404 Not Found')) {
    $html2 = @file_get_html($data2);
    $element = $html->find('div[class="cool-attribute"]', 0);
    echo str_replace($patterns, $replacements, $element);
} else {
    $html = @file_get_html($data);
    $element = $html->find('div[class="cool-attribute"]', 0);
    echo str_replace($patterns, $replacements, $element);
}

添加标签以缩进代码并不能使其成为一个块。您必须将其括在{ }中。当您放置if(或elsewhile等)而没有大括号时,它仅适用于下一行代码。在这种情况下,您编写的代码等同于:

if (strpos($headers[0], '404 Not Found')) {
    $html2 = @file_get_html($data2);
}
$element = $html->find('div[class="cool-attribute"]', 0);
echo str_replace($patterns, $replacements, $element);
else // else? why is there an else here, it's not after an if! :)
$html = @file_get_html($data);
$element = $html->find('div[class="cool-attribute"]', 0);
echo str_replace($patterns, $replacements, $element);