PHP判断远程路径是否存在

作者:暗夜星辰 发布于:2012-7-12 11:45 Thursday 分类:PHP学习笔记

方法一(需要开启allow_url_fopen):

<?php
	$url = "http://http://github.codeigniter.org.cn/download/CodeIgniter_2.1.2.zip";
	$fileExists = @file_get_contents($url, null, null, -1, 1) ? true : false;
	echo $fileExists; //返回1,就说明文件存在。
?> 

方法二(需要服务器支持Curl组件):

<?php
function check_remote_file_exists($url) {
	$curl = curl_init($url); // 不取回数据
	curl_setopt($curl, CURLOPT_NOBODY, true);
	curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求
	$result = curl_exec($curl);
	$found = false; // 如果请求没有发送失败
	if ($result !== false) {

		/** 再检查http响应码是否为200 */
		$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
		if ($statusCode == 200) {
			$found = true;
		}
	}
	curl_close($curl);

	return $found;
}

$url = "http://github.codeigniter.org.cn/download/CodeIgniter_2.1.2.zip";
echo check_remote_file_exists($url); // 返回1,说明存在。

?>
+++++++++++++++++++++++++++++++++++++++

<?php

/*
 函数:remote_file_exists
 功能:判断远程文件是否存在
 参数: $url_file -远程文件URL
 返回:存在返回true,不存在或者其他原因返回false
*/
function remote_file_exists($url_file){
	//检测输入
	$url_file = trim($url_file);
	if (empty($url_file)) { return false; }
	$url_arr = parse_url($url_file);
	if (!is_array($url_arr) || empty($url_arr)){return false; }

	//获取请求数据
	$host = $url_arr['host'];
	$path = $url_arr['path'] ."?".$url_arr['query'];
	$port = isset($url_arr['port']) ?$url_arr['port'] : "80";

	//连接服务器
	$fp = fsockopen($host, $port, $err_no, $err_str,30);
	if (!$fp){ return false; }

	//构造请求协议
	$request_str = "GET ".$path."HTTP/1.1\r\n";
	$request_str .= "Host:".$host."\r\n";
	$request_str .= "Connection:Close\r\n\r\n";

	//发送请求
	fwrite($fp,$request_str);
	$first_header = fgets($fp, 1024);
	fclose($fp);

	//判断文件是否存在
	if (trim($first_header) == ""){ return false;}
	if (!preg_match("/200/", $first_header)){
		return false;
	}

函数描述及例子

<?
	//测试代码
	$str_url = 'http://127.0.0.2/getfile.php?id=404';
	$exits = remote_file_exists($str_url);
	echo $exists ? "存在" : "不存在";
?> 

附送一个JS的判断

<script   language= "网页特效 "> 
function   geturl(url) 
{ 
        var   xmlhttp   =   new   activexobject( "microsoft.xmlhttp "); 
        xmlhttp.open( "get ",url,false); 
        xmlhttp.send(); 
        if   (xmlhttp.readystate==4) 
            alert((xmlhttp.status==200)? "文件存在 ": "文件不存在 "); 
} 
</script> 
请输入文件地址: <input   name= "file "   id= "file "   value= "http://www.111cn.net "> 
<button   onclick= "geturl(file.value) "> 检测地址 </button>

标签: PHP CURL

发表评论:

©2012-2014 woodbunny.com 木头♥兔子的小屋 sitemap