程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP判斷遠程文件是否存在的幾種方法

PHP判斷遠程文件是否存在的幾種方法

編輯:關於PHP編程

在做一個圖片預覽中圖的東西,遇到一個問題,就是要判斷遠程文件是否存在(不是同一台服務器)。 代碼如下:   0102030405060708091011121314151617181920212223242526272829303132333435 //方法一function   file_exists($url){$ch   = curl_init();curl_setopt($ch,  curlopt_url,$url);curl_setopt($ch,  curlopt_nobody, 1); //  不下載curl_setopt($ch,  curlopt_failonerror, 1);curl_setopt($ch,  curlopt_returntransfer, 1); if(curl_exec($ch)!==false)return   true;elsereturn   false;} //方法二function   file_exists2($url){if(file_get_contents($url,0,null,0,1))return   1;elsereturn   0;}//方法三function   file_exists($url)  {$curl   = curl_init($url);//  不取回數據curl_setopt($curl,  CURLOPT_NOBODY, true);//  發送請求$result   = curl_exec($curl);$found   = false;//  如果請求沒有發送失敗if   ($result   !== false) {//  再檢查http響應碼是否為200}    方法一無論圖片在不在都是返回FALSE; 方法二windows下可行,LINUX下無論圖片在不在都返加TRUE; 方法三應該是最合適的 另外:用get_headers() 方法存在效率問題,建議不使用作為此解決方案   fsockopen版:   01020304050607080910111213141516171819   $url   = "http://www.baidu.com/img/baidu_sylogo1.gif";     $info   = parse_url($url);    $fp   = fsockopen($info['host'],  80,$errno, $errstr,  30);    fputs($fp,"GET  {$info['path']} HTTP/1.1\r\n");    fputs($fp, "Host:  {$info['host']}\r\n");    fputs($fp, "Connection:  close\r\n\r\n");    $headers   = array();    while(!feof($fp))  {    $line   = fgets($fp);    if($line   != "\r\n")  {    $headers[]  = $line;    }else   {    break;    }    }     echo   "<pre>";    print_r($headers);    通過http狀態碼來判斷文件是否存在,比如,響應 302,301,404等都為不存在,如果是200,304,等可以視為文件存在。   fopen()方法:   010203040506070809101112   <?php    $url   = 'http://www.test.com/images/test.jpg';     if(  @fopen( $url, 'r'   ) )    {        echo   'File Exits';    }    else    {        echo   'File Do Not Exits';    }    ?>    CURL 方法:   01020304050607080910111213141516 <?php    $url2   = 'http://www.test.com/test.jpg';     $ch   = curl_init();    $timeout   = 10;    curl_setopt  ($ch,  CURLOPT_URL, $url2);    curl_setopt($ch,  CURLOPT_HEADER, 1);    curl_setopt  ($ch,  CURLOPT_RETURNTRANSFER, 1);    curl_setopt  ($ch,  CURLOPT_CONNECTTIMEOUT, $timeout);     $contents   = curl_exec($ch);    //echo  $contents;    if   (preg_match("/404/", $contents)){        echo   '文件不存在';    }   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved