php,图片下载

php,图片下载,php,Php,当用户上传图像时,我将其保存到htdocs目录下的image文件夹中。因此,任何未登录网站的用户都可以输入url/images/name。预防这种情况的最佳方法是什么。因为浏览会像用户直接在地址栏中键入图像的位置一样请求。 在检查会话详细信息后,我考虑使用脚本从目录下载每个图像文件。你认为这将是一个很好的方法,如果是的话,你能建议我一个脚本。 我不想使用数据库。我想会很慢。或者如果这是更好的方法,请告诉我 THnks是的,您可以拥有一个image.php文件,该文件只在末尾添加用户ID并显示图像

当用户上传图像时,我将其保存到htdocs目录下的image文件夹中。因此,任何未登录网站的用户都可以输入url/images/name。预防这种情况的最佳方法是什么。因为浏览会像用户直接在地址栏中键入图像的位置一样请求。 在检查会话详细信息后,我考虑使用脚本从目录下载每个图像文件。你认为这将是一个很好的方法,如果是的话,你能建议我一个脚本。 我不想使用数据库。我想会很慢。或者如果这是更好的方法,请告诉我


THnks

是的,您可以拥有一个image.php文件,该文件只在末尾添加用户ID并显示图像。实际上它没有那么多代码

文档中有一个示例。但是,如果要下载图像,您可以跳过附件标题并使用内容类型标题


您可以将图像位置保存在数据库中,这样不会太慢。。由于我不建议将纯图像数据存储在数据库中,您可以将其放在htdocs/目录之外,然后将images/目录修改为image.php或其他内容。所以url/images/test.jpg将转换为image.php?path=test.jpg

image.php可能如下所示:

<?php
if($loggedin) {
    header("Content-Type: image/jpeg");
    echo file_get_contents("../images/".$_GET["path"]);
}
?>

别忘了清理输入!您不希望用户访问任意文件。

如果您不使用身份验证库,我将使用$\u会话跟踪用户是否登录,但也会创建指纹,以便更难劫持会话:

$\会话['loggedIn']=1

这样做很糟糕,因为我可以通过?PHPSESSID=933883&loggedIn=1并基本上欺骗应用程序

$_SESSION['userid'] = 100;
$_SESSION['fingerprint'] = jskdskjdjdk48924829dkshjdkshdjkhsdjsd;

“指纹”是一些带有salt的MD5加密字符串,例如用户名+密码+任何你想要的只有你知道的字符串。您可以在登录时创建指纹,并使用一个函数围绕关键代码验证存储在会话中的指纹。这是一个基本的示例,当您对PHP更加熟悉时,您可以使用许多PHP框架(如CakePHP)中提供的更好的身份验证模块。

当他们登录时,设置cookie

然后在readimg.php中检查cookie

然后输入readimg.php?i=img.png


让readimg.php只检查特定文件夹中的图像

这就是我在这里要做的:


您看到的图像是存储在服务器上的文件的低分辨率版本,您无法看到。如果您已登录,可以单击图像下载原始文件。如果你不是,你就不能。但是,您可以为渲染设置任意分辨率,但这是可以选择的。

而不是使用echo file\u get\u contents。。。我建议使用,以避免出现大文件可能出现的内存不足错误。

因此,当我编写php脚本来显示一个人的图片时,只需输入mod_rewrite,然后使用mod_rewrite将其转换为image.php?=picturename.jpg。我做对了。我是新手,很抱歉问了个愚蠢的问题。对输入进行santizing怎么样…我应该把image.php放在什么标签上?path=test.jpg…应该是这样吗?你做对了吗。如果你不想,你不必重写mod_。那是合适的。当我说sanitize时,我的意思是确保不允许像image.php?path=/etc/passwd这样的事情,因为这会将其内容回显给登录的用户。即,确保除图像目录中的图像外,不能包含其他任何内容。