在PHP中,如何确定是否存在任何远程文件(通过HTTP访问)?
答案 0 :(得分:8)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops
$data = curl_exec($ch);
curl_close($ch);
if (!$data) {
echo "Domain could not be found";
}
else {
preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches);
$code = end($matches[1]);
if ($code == 200) {
echo "Page Found";
}
elseif ($code == 404) {
echo "Page Not Found";
}
}
来自here的修改后的代码版本。
答案 1 :(得分:2)
我喜欢curl或fsockopen来解决这个问题。任何一个都可以提供有关所请求文件状态的标题数据。具体来说,您将寻找404(找不到文件)响应。这是我与fsockopen一起使用的一个例子:
答案 2 :(得分:2)
此函数将返回响应代码(重定向时为最后一个),如果出现dns或其他错误,则返回false。如果提供了一个参数(url),则发出HEAD请求。如果给出第二个参数,则发出完整请求,并且响应的内容(如果有)通过引用存储在作为第二个参数传递的变量中。
function url_response_code($url, & $contents = null)
{
$context = null;
if (func_num_args() == 1) {
$context = stream_context_create(array('http' => array('method' => 'HEAD')));
}
$contents = @file_get_contents($url, null, $context);
$code = false;
if (isset($http_response_header)) {
foreach ($http_response_header as $header) {
if (strpos($header, 'HTTP/') === 0) {
list(, $code) = explode(' ', $header);
}
}
}
return $code;
}
答案 3 :(得分:1)
我最近在寻找相同的信息。在这里找到了一些非常好的代码:http://php.assistprogramming.com/check-website-status-using-php-and-curl-library.html
function Visit($url){
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url );
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE,false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$page=curl_exec($ch);
//echo curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode >= 200 && $httpcode < 300){
return true;
}
else {
return false;
}
}
if(Visit("http://www.site.com")){
echo "Website OK";
}
else{
echo "Website DOWN";
}
答案 4 :(得分:0)
使用Curl,检查请求是否成功完成。 http://w-shadow.com/blog/2007/08/02/how-to-check-if-page-exists-with-curl/
答案 5 :(得分:0)
请注意,这些解决方案不适用于未找到未找到页面的相应响应的网站。例如,我在测试网站上的页面时遇到了问题,因为它只是在收到无法处理的请求时才加载主网站页面。因此,即使对于不存在的页面,该网站也几乎总是会给出200响应。
某些网站会在标准网页上提供自定义错误,但仍然不会提供404标题。
除非您知道页面的预期内容并开始测试预期的内容是否存在,或者测试页面中的某些预期错误文本,否则您无法在这些情况下执行此操作,这一切都变得有点混乱... < / p>