<?PHPif(!function_exists("Remote_filesize")){ /** * Get remote or local file information * @param string $STRURL remote file or local file address * @param integer $intType call method (1:get_heade RS 2:fsocketopen 3:curl 4: Local file) * @param array $arrOptional * @return array * @author Mengdj<[email Pro Tected]>*/ functionRemote_filesize ($STRURL,$intType=1,$arrOptional=Array()){ $arrRet=Array( "Length" =>0,//size, byte units"MIME" = "",//MIME type"FileName" = "" ",//file name"Status" =>0//Status Code ); Switch($intType){ Case1://using the Get_headers function if(($ARRTMP=get_headers($STRURL,true))){ $arrRet=Array("Length" =$ARRTMP[' Content-length '], "mime" = =$ARRTMP[' Content-type ']); if(Preg_match('/filename=\ ' (. *) \ "/si",$ARRTMP[' Content-disposition '],$arr)){ $arrRet["FileName"]=$arr[1]; } if(Preg_match('/\s (\d+) \s/',$ARRTMP[0],$arr)){ $arrRet["Status"]=$arr[1]; } } Break; Case2://using Fsocket if(($ARRURL=Parse_url($STRURL))){ if($fp[Email protected]Fsockopen($ARRURL[' Host '],Empty($ARRURL[' Port ']? 80:$ARRURL[' Port '],$error)){ @fputs($fp, "GET". (Empty($ARRURL[' path '])? ' /‘:$ARRURL[' Path ']). " Http/1.1\r\n "); @fputs($fp, "Host:$ARRURL[host]\r\n]); @fputs($fp, "connection:close\r\n\r\n"); while(!feof($fp)){ $tmp=fgets($fp); if(Trim($tmp) = = "'){ //This line of code reads only the header information Break; }Else{ (Preg_match('/(http.*) (\s\d{3}\s)/',$tmp,$arr)) &&$arrRet[' Status ']=Trim($arr[2]); (Preg_match('/content-length: (. *)/si ',$tmp,$arr)) &&$arrRet[' Length ']=Trim($arr[1]); (Preg_match('/content-type: (. *)/si ',$tmp,$arr)) &&$arrRet[' MIME ']=Trim($arr[1]); (Preg_match('/filename=\ ' (. *) \ "/si",$tmp,$arr)) &&$arrRet[' filename ']=Trim($arr[1]); } } @fclose($fp); } } Break; Case3://Using Curl if(($ch=curl_init ($STRURL)) {curl_setopt ($ch, curlopt_header,1); curl_setopt ($ch, curlopt_nobody,1); curl_setopt ($ch, curlopt_returntransfer,1); if(isset($arrOptional[' User ']) &&isset($arrOptional[' Password '])){ $headers=Array(' Authorization:basic '.Base64_encode($arrOptional[' User ']. ': '.$arrOptional[' Password '])); curl_setopt ($ch, Curlopt_httpheader,$headers); } $tmp=curl_exec ($ch); Curl_close ($ch); (Preg_match('/content-length:\s ([0-9].+?) \s/',$tmp,$arr)) &&$arrRet[' Length ']=Trim($arr[1]); (Preg_match('/content-type:\s (. *) \s/',$tmp,$arr)) &&$arrRet[' MIME ']=Trim($arr[1]); (Preg_match('/filename=\ ' (. *) \ "/I",$tmp,$arr)) &&$arrRet[' filename ']=Trim($arr[1]); (Preg_match('/(http.*) (\s\d{3}\s)/',$tmp,$arr)) &&$arrRet[' Status ']=Trim($arr[2]); } Break; Case4://Local Processing if(file_exists($STRURL)) { $arrRet=Array( "Length" =filesize($STRURL), "MIME" =>mime_content_type ($STRURL), "filename" =basename($STRURL), "status" =>200 ); }Else{ $arrRet=Array( "Length" =>0, "mime" + = "," filename "=basename($STRURL), "status" =>404 ); } Break; } if(isset($arrOptional[' getimagesize ']) &&$arrRet[' Status ']== ' 200 '){ if(($ARRTMP[Email protected]getimagesize($STRURL))){ $arrRet[' Width ']=$ARRTMP[0]; $arrRet[' Height ']=$ARRTMP[1]; $arrRet[' Type ']=$ARRTMP[2]; $arrRet[' Tag ']=$ARRTMP[3]; $arrRet[' Bits ']=$ARRTMP[' Bits ']; $arrRet[' Channels ']=$ARRTMP[' Channels ']; !isset($arrRet[' MIME ']) &&$arrRet[' MIME ']=$ARRTMP[' MIME ']; } } return $arrRet; }}
PHP remote access to picture or file information (get_headers, Fsocketopen, Curl)