1

サイトから画像を取得するためのスクリプトをコーディングしています。すべてが良好ですが、次のような形式の画像を掲載しているサイトがいくつかあることに気付きました。

http://site-name/images/dude-i-m-batman.jpg?1414151413
http://site-name/images/dude-i-m-batman.jpg?w=300

今、私はそれをやっています

$file = substr($media,0, strrpos($image, '.') + 4);

それが良い習慣なのか、それとももっと良い方法があるのか​​、私はただ疑問に思っています。

pathinfoと他のいくつかのメソッドを試しましたが、すべてクエリ文字列で拡張子を返します。

ありがとう

4

6 に答える 6

8

で URL を解析しparse_url、パス部分を取得します。

 $datum = parse_url($url);

 $parts = pathinfo($datum['path']);

 $ext = $parts['extension'];

getImageInfo($full_url)許可されている場合は を使用fopen_wrappersして、幅、高さ、そして最も重要な mime_type などの画像情報を取得することもできます。

これは、拡張子のないファイルや間違ったファイルがいくつかあるため、ブラウザをだまして画像としてダウンロードさせ、それでもブラウザが画像形式を認識することを信頼するためにそこに置きます(そこにいて、それを行いました:-()

于 2012-07-09T16:09:46.527 に答える
2

拡張機能が必要なのか、(現在のコードから判断して)フルパス(クエリ文字列を除く)が必要なのかわかりません。

これが両方です:

$file = "http://site-name/images/dude-i-m-batman.jpg?1414151413";
preg_match('/^([^\?]+)(?:\?.*)?/', $file, $path_noQS);
preg_match('/(?<=\.)(\w{2,5})(?:\?.*)?/', $file, $extension);
echo $path_noQS[1]; //path, without QS
echo $extension[1]; //extension
于 2012-07-09T16:14:28.997 に答える
2

明らかに、あなたが今やっていることにはいくつかの欠点があります。そのうちの 1 つは、すでにあなた自身のものであることに気付きました:

  • すべての URL がファイル拡張子で終わるわけではありません。
  • すべてのファイル拡張子が 3 文字であるとは限りません (例: .jpeg)

したがって、必要なのは URL からパスを取得することです。

$imagePath = parse_url($imageUrl, PHP_URL_PATH);

次に、そのパスから拡張子を取得します。

$imageName = pathinfo($imagePath, PATHINFO_EXTENSION);

そして完了。あなたはそれを必要とする最初の人ではないので、その仕事のために関数はすでに存在しています。

于 2012-07-09T16:16:15.267 に答える
0

このようなものかもしれません

$parsedUrl = parse_url('http://site-name/images/dude-i-m-batman.jpg?1414151413');
$parsedFileInfo = pathinfo($parsedUrl['path']);
echo $parsedFileInfo['extension'];              
于 2012-07-09T16:10:58.497 に答える
0

http://codepad.org/KXZwKCjs

$u = 'http://site-name/images/dude-i-m-batman.zip.jpg?1414151413?1234';
$u = explode('?', $u, 2 ); // ignore everything after the first question mark
$ext = end(explode('.',$u[0])); // last 'extension'
于 2012-07-09T16:11:06.660 に答える
0

ソリューションは3文字の拡張子でのみ機能します。すべての拡張子が3文字になることがわかっている場合は、完全に実行可能なソリューションです。さもないと:

$ext = pathinfo($filename, PATHINFO_EXTENSION);

あなたが正しいファイル名を持っているなら、これは間違いなく機能するはずです

何らかの理由で機能しない場合は、次を使用できます。

$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];
于 2012-07-09T16:07:34.437 に答える