可能重复:
确定 URL 是否是 PHP 中的图像的最佳方法
编辑:
我有一个脚本,它使用 file_get_contents (我的主机允许)将远程文件复制到我的服务器,让用户共享图片。但是,为了避免滥用,我需要代码来检查文件的大小、有效性(以及在我的服务器上允许它们之前的恶意代码。到目前为止,我一直无法找到一个强大的解决方案。其他人指出的旧文章,例如这个:
https://stackoverflow.com/questions/676949/best-way-to-determine-if-a-url-is-an-image-in-php
建议可能的方法——检查文件扩展名、mime 类型并在文件在服务器上之后使用 GD,但请注意,没有一个是万无一失的。然而,无数站点允许远程上传文件,这表明必须有一些更好的方法来处理安全问题。
File_get_upload 是最基本的。卷曲很粗糙,但可能具有更多功能。如果文件不是图像,GD 的 get_image_size 函数将返回 false,如下所示:
$imginfo_array = getimagesize($tempFile);
但是,我的理解是 GD 无法远程处理文件。
这是此阶段使用 file_get_contents 的简单代码:
$url = 'http://example.com/image.php';
$img = '/my/folder/flower.gif';
file_put_contents($img, file_get_contents($url));
这是卷曲版本:
$ch = curl_init('http://example.com/image.php');
$fp = fopen('/my/folder/flower.gif', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);
有谁知道在您的服务器上检查文件大小和有效性的最佳实践?