Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的可过期下载链接_Php - Fatal编程技术网

PHP中的可过期下载链接

PHP中的可过期下载链接,php,Php,我知道关于这个话题也有类似的帖子,但我想不出来。因为我是这个地区的新手 我有一个网站主机和一个下载主机。我想将我的.rar文件上载到我的下载主机,并提供48小时访问的下载链接。这样:(例如,尽管文件名是a.rar,但URL是另一个名称) www.example.com/sdf3r234/dfsf343434fd368jmnvb34.rar 我的网站已经准备好了,这是最后一部分,也是最具挑战性和最重要的部分。我不知道该读什么或做什么。使用linux符号链接。把你的rar文件放在一个单独的地方,不能

我知道关于这个话题也有类似的帖子,但我想不出来。因为我是这个地区的新手

  • 我有一个网站主机和一个下载主机。我想将我的.rar文件上载到我的下载主机,并提供48小时访问的下载链接。这样:(例如,尽管文件名是a.rar,但URL是另一个名称)
  • www.example.com/sdf3r234/dfsf343434fd368jmnvb34.rar


    我的网站已经准备好了,这是最后一部分,也是最具挑战性和最重要的部分。我不知道该读什么或做什么。

    使用linux符号链接。把你的rar文件放在一个单独的地方,不能从互联网上获取。在文档根目录中创建一个指向所需rar文件的符号链接,添加到带有日期和时间的数据库表中,并在48小时后删除记录和符号链接

    如果您不/不能使用数据库,请在符号链接名称中包含日期和时间,并每小时运行一个脚本来清理它们,使用glob()检索符号链接列表,从文件名中解析日期和时间,然后决定要删除哪些

    关于
    ln
    命令:

    ln -s /home/myuser/rarstorage/originalrarfile.rar /var/www/download/201712171536randomcharacters.rar
    
    我假设您的rar文件存储在
    /home/myuser/rarstorage
    中。无法从任何url访问此目录

    我假设您的网站位于
    /var/www

    ln
    命令在
    /var/www/download
    中创建指向原始rar文件.rar的符号链接。在我的示例中,我将格式为YYYYMMDDHII的日期和时间包含在符号链接名中

    如果您有shell访问权限,请手动尝试此操作

    您可以使用PHP命令获得相同的结果

    要检查下载是否过期,请使用函数列出所有符号链接。 您有一个文件数组。解析每个名称并转换为日期和时间,与当前日期和时间进行比较,决定是否必须删除符号链接

    你应该每小时检查一次过期的文件,所以如果你的主机不允许cron,你最好使用cronjob或者用其他方式模拟它

    如果您的提供商不允许在文档根目录以外的目录,只需在文档根目录内创建
    rarstorage
    目录,并使用此.htaccess文件阻止对其的任何访问:

    deny from all
    

    使用linux符号链接。把你的rar文件放在一个单独的地方,不能从互联网上获取。在文档根目录中创建一个指向所需rar文件的符号链接,添加到带有日期和时间的数据库表中,并在48小时后删除记录和符号链接

    如果您不/不能使用数据库,请在符号链接名称中包含日期和时间,并每小时运行一个脚本来清理它们,使用glob()检索符号链接列表,从文件名中解析日期和时间,然后决定要删除哪些

    关于
    ln
    命令:

    ln -s /home/myuser/rarstorage/originalrarfile.rar /var/www/download/201712171536randomcharacters.rar
    
    我假设您的rar文件存储在
    /home/myuser/rarstorage
    中。无法从任何url访问此目录

    我假设您的网站位于
    /var/www

    ln
    命令在
    /var/www/download
    中创建指向原始rar文件.rar的符号链接。在我的示例中,我将格式为YYYYMMDDHII的日期和时间包含在符号链接名中

    如果您有shell访问权限,请手动尝试此操作

    您可以使用PHP命令获得相同的结果

    要检查下载是否过期,请使用函数列出所有符号链接。 您有一个文件数组。解析每个名称并转换为日期和时间,与当前日期和时间进行比较,决定是否必须删除符号链接

    你应该每小时检查一次过期的文件,所以如果你的主机不允许cron,你最好使用cronjob或者用其他方式模拟它

    如果您的提供商不允许在文档根目录以外的目录,只需在文档根目录内创建
    rarstorage
    目录,并使用此.htaccess文件阻止对其的任何访问:

    deny from all
    

    您可以将过期日期添加到URL中,并在PHP中进行检查-如果该日期是在将来,请提供该文件,否则将失败。是的,在这种简单的方法中,攻击者可以篡改数据并更改过期日期。因此,您可以添加另一个URL参数,其中包含日期的安全哈希和只有您知道的秘密-如果哈希丢失或哈希秘密,并且您的过期日期与提供的哈希不匹配,则不得提供该文件


    这比Ghigo的方法要简单一些,因为您不需要数据库

    您可以将过期日期添加到URL中,并在PHP中进行检查-如果日期是将来的,则提供该文件,否则将失败。是的,在这种简单的方法中,攻击者可以篡改数据并更改过期日期。因此,您可以添加另一个URL参数,其中包含日期的安全哈希和只有您知道的秘密-如果哈希丢失或哈希秘密,并且您的过期日期与提供的哈希不匹配,则不得提供该文件


    这比Ghigo的方法要简单一些,因为您不需要数据库

    最后一个问题:通过这个过程,我可以根据不同的用户请求创建不同的符号链接。对吗?是的,你可以很容易地添加一个唯一的标识符,比如一个数字ID。考虑这个文件名:<代码> 2017121733-64-2-xN2nSalsH3Hasqw。RAR < /Cord>你有DATETIME,唯一ID,随机字符。我在一个共享主机上,当我运行symlink()函数时,它会说:symlink()由于安全原因在…..中被禁用。我发了一张罚单。似乎您无法启用功能。我想用数据库来准备。这会使事情变得更复杂。还有另一种基于mod_rewrite的方法,但它需要大量代码,并且需要用php处理文件发送。考虑升级到更好的主机。最后一个问题:通过这个过程,我可以与不同的用户请求建立不同的链接。对吗?是的,你可以很容易地添加一个唯一的标识符,比如一个数字ID。考虑这个文件名:<代码> 2017121733-64-2-xN2nSalsH3Hasqw。RAR < /Cord>你有DATETIME,UNIQUE