我正在构建一个PHP应用程序,它允许用户只需输入通常位于远程服务器上的图像的URL就可以将图像文件上传到服务器。
当您将图片上传到提问题屏幕时,StackOverflow也具有此功能。
我的应用程序将成为SugarCRM模块的一部分,该模块将安装在具有不同配置和软件的许多服务器上。出于这个原因,我需要尽可能灵活地构建我的应用程序并尽量考虑尽可能多的设置。
我最大的障碍是将PHP INI设置allow_url_fopen
设置为false / off的服务器,因为它限制了我使用URL下载远程文件的选择。
我的问题更侧重于获取远程文件的文件类型。现在很多网站都会在网址中提供没有文件扩展名的图片,即使这样做也可能会让我感到欺骗。
目前这是应用程序获取远程服务器上文件的文件扩展名的方式......
$info = @GetImageSize($this->remote_image_url);
$mime = $info['mime'];
// What sort of image?
$fileType = substr(strrchr($mime, '/'), 1);
查看GetImageSize()
的PHP文档,它说明了这个......
$ filename此参数指定要检索的文件 相关信息。它可以引用本地文件或(配置 允许)使用其中一个支持的流的远程文件。
(配置允许)使用其中一个支持的流
的远程文件在服务器上关闭 allow_url_fopen 的障碍是我的噩梦!
我可以用{...}来检测allow_url_fopen
的状态。
if(ini_get('allow_url_fopen')){
return true;
}
所以我可以检测到allow_url_fopen
已启用,如果是,那么我可以使用GetImageSize()
来检测文件类型,当它未启用时,请确保不要调用该函数。
问题:
所以问题是如何只使用URL访问PHP INI设置为allow_url_fopen
的服务器上的文件来可靠地获取远程文件的文件类型?