1

URL で動作する単純な is_file タイプの関数を作成しようとしています。

function isFileUrl($url){
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // don't want it rendered to browser
  curl_exec($ch);

  if(curl_errno($ch)){
    $isFile = false;
  }
  else {
    $isFile = true;
  }
  curl_close($ch);
  return $isFile;
}

if(isFileUrl('https://www.google.com/images/srpr/logo4w.png')==true){
  echo 'TRUE';
} else {
  echo 'FALSE';
}

削除curl_setoptされたもので動作しますが、コンテンツ (画像の URL) をブラウザーにレンダリングしますが、これは望ましくありません。私は何が欠けていますか?この同様のスレッドを確認しましたが、私のコンテキストでは機能しませんでした。ありがとう。

4

3 に答える 3

4

get_headers()関数を使用しないのはなぜですか? そんなもののためのデザインです。

簡単な例は次のようになります。

function isFile($url) {
    $headers = get_headers($url);
    if($headers && strpos($headers[0], '200') !== false) { //response code 200 means that url is fine
        return true;
    } else {
        return false;
    }
}

また、必要に応じて content-type またはその他のヘッダーを確認することもできます。

于 2013-09-17T21:32:24.920 に答える
2

あなたが望むのは、それが有効な(200)URLであり、画像(コンテンツタイプ===画像/ jpg、画像/ pngなど)に関連しているかどうかを確認するためのHTTPヘッダーチェックだと思います。次のコードが始まりかもしれません。

function getHTTPStatus($url) {
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_VERBOSE => false
    ));
    curl_exec($ch);
    $http_status = curl_getinfo($ch);
    return $http_status;
}

$img = getHTTPStatus($url);
$images = array('image/jpeg', 'image/png', 'etc');
if($img['http_code'] === 200 && in_array($img['content_type'], $images)) {
   //it is an image, do stuff
 }
于 2013-09-17T21:27:54.787 に答える
0

(自問自答・まとめ)

ドラゴステとエナプペの両方の回答が機能します。Enapupe の回答に基づいて、それをすべての包括的な関数にラップし、オプションのファイル タイプ パラメータを追加しました。それが誰かを助けることを願っています...

function isFileUrl($url, $type=''){
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_VERBOSE => false
    ));
    curl_exec($ch);
    $gh = curl_getinfo($ch);

    if($type!==''){
      // add types here (see http://reference.sitepoint.com/html/mime-types-full for list)
      if($type=='img'){
        $typeArr = array('image/jpeg', 'image/png');
      }
      elseif($type=='pdf'){
        $typeArr = array('application/pdf');
      }
      elseif($type=='html'){
        $typeArr = array('text/html');
      }

      if($gh['http_code'] === 200 && in_array($gh['content_type'], $typeArr)){
        $trueFalse = true;
      }
      else {
        $trueFalse = false;
      }

    }
    else {
      if($gh['http_code'] === 200){
        $trueFalse = true;
      }
      else {
        $trueFalse = false;
      }
    }
    return $trueFalse;
}

//test - param 1 is URL, param 2 (optional) can be img|pdf|html
if(isFileUrl('https://www.google.com/images/srpr/logo4w.png', 'img')==true){
  // do stuff
  echo 'TRUE';
}
else {
  echo 'FALSE';
}
于 2013-09-18T13:18:55.040 に答える