Php 在服务器上隐藏文件的最佳方法是什么?

Php 在服务器上隐藏文件的最佳方法是什么?,php,.htaccess,Php,.htaccess,我将用PHP制作一个图像托管系统。 我想知道我应该如何对用户隐藏我的图像,这样他们只能通过一个特殊的url访问 我需要讨论包括htaccess在内的所有技术。您需要编写一个小php脚本来读取图像文件并将内容发送到客户端。PHP脚本可以检查其参数和cookie,图像保存在文档根目录之外的某个位置。您可以编写一个小PHP脚本,读取图像文件并将内容发送到客户端。PHP脚本可以检查其参数和cookie,并且图像保存在文档根目录之外的某个位置。只是不要将图像存储在web根目录中。使用php文件管理访问权限

我将用PHP制作一个图像托管系统。 我想知道我应该如何对用户隐藏我的图像,这样他们只能通过一个特殊的url访问


我需要讨论包括htaccess在内的所有技术。

您需要编写一个小php脚本来读取图像文件并将内容发送到客户端。PHP脚本可以检查其参数和cookie,图像保存在文档根目录之外的某个位置。

您可以编写一个小PHP脚本,读取图像文件并将内容发送到客户端。PHP脚本可以检查其参数和cookie,并且图像保存在文档根目录之外的某个位置。

只是不要将图像存储在web根目录中。使用php文件管理访问权限。如果要显示文件,请执行以下操作:

<?php
header('Content-type: image/jpeg');
$f = file_get_contents('path/to/image.jpg');
print $f;
?>

只是不要将图像存储在web根目录中。使用php文件管理访问权限。如果要显示文件,请执行以下操作:

<?php
header('Content-type: image/jpeg');
$f = file_get_contents('path/to/image.jpg');
print $f;
?>

将文件放在相对根目录之外,并使用showimage.php之类的脚本从webroot目录之外获取文件,然后将其流式传输给用户。代码将类似于:

$len = filesize($filename);
header("Content-type: image/jpeg");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=\"$new_filename\"");
readfile($filename);
此外,由于您正在运行脚本,因此可以在脚本中执行身份验证/授权。这允许您设置modRewrite规则,例如:

RewriteRule ^images/(.*)$   /showimage.php?file=$1
以便您的图像文件可以呈现为:

www.domain.com/images/somefile.jpg
而不是:

www.domain.come/showimage.php?file=somefile.jpg

将文件放在相对根目录之外,并使用showimage.php之类的脚本从webroot目录之外获取文件并将其流式传输给用户。代码将类似于:

$len = filesize($filename);
header("Content-type: image/jpeg");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=\"$new_filename\"");
readfile($filename);
此外,由于您正在运行脚本,因此可以在脚本中执行身份验证/授权。这允许您设置modRewrite规则,例如:

RewriteRule ^images/(.*)$   /showimage.php?file=$1
以便您的图像文件可以呈现为:

www.domain.com/images/somefile.jpg
而不是:

www.domain.come/showimage.php?file=somefile.jpg

将它们放在从文档根目录向上的一个目录中。然后,使用.htaccess文件获取它们:

RewriteBase /
RewriteRule ^(.+?)\.jpg$ ../imgs/$1.jpg

将它们放在从文档根目录向上的一个目录中。然后,使用.htaccess文件获取它们:

RewriteBase /
RewriteRule ^(.+?)\.jpg$ ../imgs/$1.jpg


我更喜欢PHP进程在发送内容时长时间发送文件和hog服务器资源。。创建一个脚本,将文件复制到具有随机名称的目录中,然后将该文件发送给用户,并在设置的时间间隔后让另一个脚本清除该目录。。如果创建时间早于30分钟。。删除。。这样一来,你只需要一个apache进程来发回文件,而不是apache+php进程。

我更喜欢php进程在发送内容时长时间发送文件并占用服务器资源。。创建一个脚本,将文件复制到具有随机名称的目录中,然后将该文件发送给用户,并在设置的时间间隔后让另一个脚本清除该目录。。如果创建时间早于30分钟。。删除。。这样,你只需要一个apache进程来发回文件,而不是apache+php进程。

我认为最好的方法是加密它。

我认为最好的方法是加密它。

tanx,我喜欢你的方式。但是,header的所有属性,或者它们的其他属性都可以改进流程。使用htaccess调用很好+1@assaqqaf你想改进一下流程吗?tanx,我喜欢你的方式。但是,header的所有属性,或者它们的其他属性都可以改进流程。使用htaccess调用很好+1@assaqqaf您希望改进的流程是什么?实际上,我在第一个解决方案中考虑了追索权。但是你能解释一下你的想法吗?好吧,比如你把你的图片存储在/images/中,有一张用户想下载的图片,比如说它叫x.jpg。所以它的路径是/images/x.jpg。下载链接看起来类似于下载。php?fileid=whateverid(如果你愿意,你可以重写这个mod)。。download.php将图像复制到/downloads/2342asdfas.jpg(一个随机名称),并将用户重定向到该url。然后你会有另一个由cron运行的脚本,它可以删除X分钟前创建的文件。通过这种方式,您可以将服务器上的负载降至最低,并使您的图像路径保持匿名。性能将优于php发回内容的第一种方法。。如果你有大量的下载,你将开始看到由于第一种方法的性能下降,因为PHP进程必须在文件发送期间保持活动状态。。因此,如果10个ppl正在下载图像,其中一些图像很大,或者ppl的连接速度较慢,那么10个php进程将与apache进程一起留在内存中。我的方法允许apache完全控制内容交付,并允许php进程在重定向到新创建的图像文件后立即停止:)是的,这是真的,复制过程将花费500毫秒,因为发送内容的过程将持续文件下载的时间,因此,如果一个10mb的文件是通过慢速连接下载的,你可以想象php进程将保持多长时间。除非文件映像非常小。。你比不上那次复印的速度。。我真的很喜欢,我会尝一尝。我真的在第一个解决方案中考虑了追索权。但是你能解释一下你的想法吗?好吧,比如你把你的图片存储在/images/中,有一张用户想下载的图片,比如说它叫x.jpg。所以它的路径是/images/x.jpg。下载链接看起来类似于下载。php?fileid=whateverid(如果你愿意,你可以重写这个mod)。。download.php将图像复制到/downloads/2342asdfas.jpg(一个随机名称),并将用户重定向到该url。然后你会有另一个由cron运行的脚本,它可以删除X分钟前创建的文件。通过这种方式,您可以将服务器上的负载降至最低,并保持映像路径的匿名性