在PHP中,如何确定是否存在任何远程文件(通过HTTP访问)?检查使用PHP是否存在远程页面?
回答
$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的代码
修改版本。
我最近在寻找相同的信息。发现了一些非常好的代码在这里: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";
}
'304 Not Modified','307 Temporary Redirect',等等? – nickf 2009-11-12 14:49:29
@nickf - 在卷曲获取的上下文中,“304未修改”是否相关?我不知道curl发送了什么头文件 - 假设它不发送除您指定的内容以外的任何内容,服务器如何知道自上次请求它之后页面是否已被修改? – 2009-11-12 14:51:52
我喜欢卷曲或到的fsockopen解决这个问题。任何一个人都可以提供有关所请求文件状态的标题数据。具体来说,你会找一个404(文件未找到)响应。下面是我用的fsockopen使用的例子:
当然,这应该是404“未找到”,而不是404“未找到文件” – 2009-11-12 14:49:00
该函数将返回响应代码(最后一个重定向的情况下),或者虚假的DNS或其它错误的情况下。如果提供了一个参数(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;
}
只需注意,这些解决方案在无法针对未找到页面给出适当响应的网站上无法正常工作。例如,我在测试网站上的页面时遇到问题,因为它只是在获取无法处理的请求时加载主站点页面。因此,即使对于不存在的网页,该网站也几乎总是会提供200个响应。
有些网站会在标准页面上提供自定义错误,但不会提供404头。
在这些情况下你可以做的事情并不多,除非你知道页面的预期内容,并开始测试预期的内容是否存在,或者测试页面中的一些预期的错误文本,并且这一切都变得有点麻烦......
如果可能,请尝试添加一些对您的解释的引用。 – DontVoteMeDown 2013-06-18 13:26:06
- 1. 检查组是否存在远程
- 2. node.js检查是否存在远程URL
- 3. 检查是否存在远程文件
- 4. 检查iFrame页面是否存在
- 5. Jquery - 检查页面是否存在
- 6. 检查脚本是否存在页面
- 7. 如何检查页面是否存在?
- 8. 使用PHP检查URL是否存在
- 9. NodeJS - 使用“Sequest”检查是否存在SFTP远程文件
- 10. bash:使用scp检查远程文件是否存在
- 11. Bash:检查是否存在使用FTP的远程目录
- 12. 检查页面是否在PHP中使用SSL
- 13. 使用VBA检查页面上是否存在元素
- 14. 检查用户是否在页面上
- 15. 用R检查远程目录是否存在
- 16. 检查客户端是否使用urllib2来访问php页面
- 17. PHP检查用户是否存在PDO
- 18. php oop检查用户是否存在?
- 19. .asp页面调用远程.php页面
- 20. 如何检查使用C#查看远程文件是否存在?
- 21. 如果htm或html页面不存在,请检查aspx页面是否存在
- 22. 检查是否使用PHP
- 23. 检测是否有人正在使用远程桌面
- 24. PHP,MYSQL检查用户是否是页面的所有者
- 25. 如何在php中检查是否存在大量的远程图像
- 26. Facebook应用程序 - 检查用户是否是页面所有者(PHP SDK)
- 27. 在PHP中检查URL是否存在
- 28. 检查是否有人正在使用远程桌面连接到计算机
- 29. DRb:如何检查远程对象是否存在?
- 30. ASP:检查是否存在远程图像文件
卷曲是一个很好的建议。我不确定你所包含的链接与什么有关。 – 2009-11-12 14:44:37
谢谢,我可以指责linux剪贴板上有错误的chome。 – CodeJoust 2009-11-12 17:42:48