PHP抓取远程图片(含无后缀)类库实现

0 下载量 201 浏览量 更新于2024-09-04 收藏 78KB PDF 举报
"这篇教程详细介绍了如何使用PHP抓取远程图片,特别是对于那些不带后缀名的图片,如微信头像。作者在实践中遇到这个问题并解决了它,将解决方案封装成一个类,供其他人参考学习。" 在进行PHP远程图片抓取时,遇到的一个挑战是某些图片URL可能不包含文件后缀,如微信头像。传统的HTTP GET请求或file_get_contents函数可能无法正确处理这种情况。为了克服这个问题,我们可以创建一个自定义类,如教程中的`GrabImage`,来进行特殊处理。 首先,我们需要在PHP项目中创建一个`GrabImage`类,定义一些关键属性。这些属性包括: 1. `$img_url`: 存储待抓取的远程图片URL。 2. `$file_name`: 保存文件的基本名称,不包括扩展名,以便在需要时灵活更换扩展名。 3. `$extension`: 图片的文件扩展名,例如jpg、png等,需要根据实际URL动态获取。 4. `$file_dir`: 图片在本地存储的相对路径,通常相对于PHP入口文件。 5. `$save_dir`: 用于存储到数据库的路径,通常是日期加文件名的组合,便于系统迁移时更改路径。 接着,我们需要一个公共方法`getInstances`,用于接收远程图片URL和本地保存路径,并将它们赋值给对应的属性。同时,该方法会生成一个带有日期的保存目录结构,如`201610/19/`。 在保存图片之前,需要确保目标目录存在。为此,我们需要一个`mkdir`或者`is_dir`结合`mkdir`的方法来创建目录。这确保了即使目录尚未创建,程序也能在保存图片前创建好相应的路径。 然后,我们需要实现实际的图片下载功能。这可以通过发送HTTP请求,或者使用file_get_contents来完成。对于不带后缀名的图片,我们需要从响应的HTTP头信息中提取MIME类型,从而推断出正确的文件扩展名。例如,如果MIME类型是image/jpeg,则扩展名为.jpg。 下载完成后,使用`file_put_contents`将图片内容写入本地文件,文件名由基本名称`$file_name`加上推断出的扩展名`$extension`组成。同时,确保文件权限设置允许读取和访问。 最后,如果需要将图片路径存储到数据库,应使用`$save_dir`,而不是`$file_dir`,因为它包含了日期和文件名,更适合作为数据库存储的唯一标识。 这个教程提供了处理无后缀名远程图片抓取的完整流程,从创建类、定义属性和方法,到实际的图片下载和存储,以及目录创建和路径管理,对PHP开发者来说是非常实用的参考资料。