【问题标题】:How can I get the name of the image from url?如何从 url 获取图像的名称?
【发布时间】:2011-12-19 04:24:42
【问题描述】:

我有一个小问题;在 PHP 中,我使用 curl 从 URL 获取数据:

$url = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg";

我使用curl_getinfo(),它给了我一个数组:

Array
(
[url] => http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg
[content_type] => image/jpeg
[http_code] => 200
[header_size] => 496
[request_size] => 300
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 2.735
[namelookup_time] => 0.063
[connect_time] => 0.063
[pretransfer_time] => 0.063
[size_upload] => 0
[size_download] => 34739
[speed_download] => 12701
[speed_upload] => 0
[download_content_length] => 34739
[upload_content_length] => -1
[starttransfer_time] => 1.282
[redirect_time] => 0
)

如何获取链接[url] => http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg中的图片名称如

[image_name] : example
[image_ex] : jpg

感谢您的任何建议!

【问题讨论】:

  • 严格来说,这不是图像的名称,尽管它是大多数浏览器在大部分时间保存时都会给它的名称,因为网络上的大多数实体都没有名称,但这可能是一个不错的选择。如果 prelovac.com 的负责人真的想设置一个名称,他们会使用 content-disposition 标题。虽然浏览器仍然可以忽略这一点,但如果您想匹配大多数用户将看到的文件保存为的内容,请先检查该文件,如果不存在则仅检查 URI 的路径信息。

标签: php curl


【解决方案1】:

使用pathinfo

【讨论】:

【解决方案2】:

有时 url 会附加额外的参数。在这种情况下,我们可以先删除参数部分,然后我们可以使用 PHP 内置的 pathinfo() 函数从 url 中获取图像名称。

$url = 'http://images.fitnessmagazine.mdpcdn.com/sites/story/shutterstock_65560759.jpg?itok=b8HiA95H';

检查图片url是否附加参数。

if (strpos($url, '?') !== false) {
    $t = explode('?',$url);
    $url = $t[0];            
}      

生成的 url 变量现在包含

http://images.fitnessmagazine.mdpcdn.com/sites/story/shutterstock_65560759.jpg

使用pathinfo() 检索所需的详细信息。

$pathinfo = pathinfo($url);
echo $pathinfo['filename'].'.'.$pathinfo['extension'];

这将给出 shutterstock_65560759.jpg 作为输出。

【讨论】:

  • 尝试添加一些解释以提高您的回答质量
  • @Sinha 这正是我一直在寻找的,非常感谢这个答案。
  • @ArakTai'Roth,很高兴知道这对您有所帮助。 :)
【解决方案3】:

考虑下面是图片路径 $image_url='http://development/rwc/wp-content/themes/Irvine/images/attorney1.png'; 从此 url 获取带有扩展名的图像名称,使用以下函数 basename(); 看下面的代码

代码:

$image_url='http://development/rwc/wp-content/themes/Irvine/images/attorney1.png';
echo basename($image_url);

输出: 律师1.png

【讨论】:

    【解决方案4】:
    $URL = urldecode('http://www.greenbiz.com/sites/default/files/imagecache/wide_large/Woman_HORIZ.jpg?sunny=20$mal+1');
    $image_name = (stristr($URL,'?',true))?stristr($URL,'?',true):$URL;
    $pos = strrpos($image_name,'/');
    $image_name = substr($image_name,$pos+1);
    $extension = stristr($image_name,'.');
    if($extension == '.jpg' || $extension == '.png' || $extension == '.gif' || $extension == '.jpeg'){`enter code here`
    print $image_name;
    }
    

    【讨论】:

    • 有PHP函数可以一次性完成。
    【解决方案5】:
    $imagePath = 'http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg';
    
    $imageName = get_basename($imagePath);
    
    function get_basename($filename)
    {
        return preg_replace('/^.+[\\\\\\/]/', '', $imagePath);
    }
    

    【讨论】:

      【解决方案6】:
      $url_arr = explode ('/', $arr['url']);
      $ct = count($url_arr);
      $name = $url_arr[$ct-1];
      $name_div = explode('.', $name);
      $ct_dot = count($name_div);
      $img_type = $name_div[$ct_dot -1];
      
      echo $name . "  " . $img_type;
      

      【讨论】:

        【解决方案7】:

        你可以使用正则表达式/(?:.+\/)(.+\.(png|jpg|jepg))[?#]?.*$/

        例子:

        $examples = [
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/with_query.jpg?itok=b8HiA95H',
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/with_hash.jpg#hghgh',
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/with_query.jpg?',
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/with_hash.jpg#',
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/with_multydots.65560759.jpg',
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/image.png',
            'http://images.fitnessmagazine.mdpcdn.com/sites/story/without_ext',   
            ];
        
        foreach($examples as $example) {
            preg_match('/(?:.+\/)(.+\.(png|jpg|jepg))[?#]?.*$/', $example, $matches);
            
            if(isset($matches[1]) && $matches[1]) {
             echo "Url: {$example}, image name: {$matches[1]} \n";   
            } else {
                echo "Url: {$example} is not image url \n";   
            }
        }
        
        
        

        印刷:

        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/with_query.jpg?itok=b8HiA95H, image name: with_query.jpg 
        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/with_hash.jpg#hghgh, image name: with_hash.jpg 
        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/with_query.jpg?, image name: with_query.jpg 
        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/with_hash.jpg#, image name: with_hash.jpg 
        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/with_multydots.65560759.jpg, image name: with_multydots.65560759.jpg 
        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/image.png, image name: image.png 
        Url: http://images.fitnessmagazine.mdpcdn.com/sites/story/without_ext is not image url 
        

        【讨论】:

          【解决方案8】:

          如果你想从 url 中获取文件名而忽略 uri 参数,你可以试试这个:

          $url = 'http://host/filename.ext?params';
          $parsedUrl = parse_url($url);
          $pathInfo = pathinfo($parsedUrl['path']);
          print_r($pathInfo);
          Array
          (
              [dirname] => /
              [basename] => filename.ext
              [extension] => ext
              [filename] => filename
          )
          
          

          【讨论】:

            猜你喜欢
            • 2017-04-15
            • 1970-01-01
            • 2021-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-02
            • 2012-01-04
            • 2011-05-03
            相关资源
            最近更新 更多