【问题标题】:PHP - How to give users download link of file they have uploadedPHP - 如何为用户提供他们上传的文件的下载链接
【发布时间】:2014-02-09 15:25:06
【问题描述】:

我创建了一个简单的upload.php 文件。 但是我想创建一个文件托管站点,用户可以在该站点上上传文件而无需登录/注册并获取下载链接,以便其他人可以使用该链接下载他们的文件。就像在 datafilehost.com 上一样。

我的 html 文件是:-

<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file" /><br />
<input type="submit" value="Upload" />
</form>

我的简单 php 文件是:-

    <?php 
 $target = "upload/"; 
 $target = $target . basename( $_FILES['uploaded']['name']) ; 
 $ok=1; 

 //This is our size condition 
 if ($uploaded_size > 350000) 
 { 
 echo "Your file is too large.<br>"; 
 $ok=0; 
 } 

 //This is our limit file type condition 
 if ($uploaded_type =="text/php") 
 { 
 echo "No PHP files<br>"; 
 $ok=0; 
 } 

 //Here we check that $ok was not set to 0 by an error 
 if ($ok==0) 
 { 
 Echo "Sorry your file was not uploaded"; 
 } 

 //If everything is ok we try to upload it 
 else 
 { 
 if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
 { 
 echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; 
 } 
 else 
 { 
 echo "Sorry, there was a problem uploading your file."; 
 } 
 } 
 ?> 

请帮帮我………… 谢谢。

【问题讨论】:

  • 您面临什么问题以及在哪里遇到问题?
  • 确定如果他们上传了一张图片,这只会显示图片而不是提供下载吗?在这种情况下,可以使用 htaccess 解决问题
  • if ($uploaded_type =="text/php") - 这远非充分和充分的检查,它迟早会在你的脸上炸毁。我建议你不要“创建一个文件托管网站”,只要你的知识太少。
  • 另外一点,使用这个脚本,如果我上传了一个可执行文件,我可以在你的服务器上做任何事情。

标签: php file file-sharing self-hosting


【解决方案1】:

echo http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['REQUEST_URI']), '\/').'/'.$uploadpath.'

我不会使用您的代码,因为它来自 about.com 文章,旨在帮助教授使用 php 进行文件上传的概念,它没有您需要的那种安全性。

【讨论】:

  • 请使用 html_entities() 转义您的 $_SERVER['REQUEST_URI'],因为这可能会导致安全问题,例如 xss
【解决方案2】:

全局 $_FILES 从 PHP 4.1.0 开始存在(如果使用早期版本,请使用 $HTTP_POST_FILES 代替)。这些数组将包含所有上传的文件信息..

$_FILES['userfile']['name'] 

客户端计算机上文件的原始名称。 $_FILES['userfile']['type'] 文件的 MIME 类型(如果浏览器提供此信息)。一个例子是“image/gif”。然而,这种 mime 类型在 PHP 端没有被检查,因此不要认为它的价值是理所当然的。

$_FILES['userfile']['size']

上传文件的大小,以字节为单位。

$_FILES['userfile']['tmp_name']

上传文件存储在服务器上的文件的临时文件名。

$_FILES['userfile']['error']

与此文件上传相关的错误代码。这个元素是在 PHP 4.2.0 中添加的

在您的情况下,您已经定义了文件名和文件存储路径。

$file = $_FILES['userfile']['name'];
$path = $_FILES['userfile']['tmp_name'].$_FILES['userfile']['name'].ext;

if (file_exists($path)) {
     // show user download link
}

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多