我有一个关于上传和下载系统如何与php和mysql一起使用的问题。
我希望能够上传文件(最好是通过我的网页),这样只有特定的用户才能查看按某些类别排序的可用文件并下载他/她想要的文件。
我觉得这很愚蠢,但是文件在哪里保存了?在桌子里面?或者表格是否指向我的网络服务器中的目录?
我问这个,因为我真的想学习这个,但即使是基本的问题也难以制定,更不用解决了......:)
期待一些输入
干杯 亚当
答案 0 :(得分:1)
这一切都取决于你制作它的复杂程度。
最简单的方法是让用户上传文件。使用PHP读取文件信息($_FILE
)并将文件移动到某个文件夹,并将信息放入数据库。假设您链接了用户和文件,用户将能够看到所有文件,然后从列表中下载文件。
更复杂,更安全,整体更好的选择是让用户上传他们的文件。仍然使用PHP来读取文件信息,将其存储在数据库中。使用id重命名文件,或者使用一些唯一的哈希值,因此不会覆盖它,并将它们移动到受保护的目录中,用户或任何其他用户可以访问它。为基于哈希查找所请求文件的用户设置下载页面,如果他们已正确登录,则将其提供给所请求的文件。
同样,这实际上取决于你想要制作它的复杂程度以及你想要完成的目标。当你处理它并陷入困境时,回过头来询问有关问题特定部分的问题,你一定会得到更多的帮助。
答案 1 :(得分:1)
PHP文件上传实际上是一个两步过程(如果要将其保存到所需的路径)。当您尝试上载文件时,$ _FILES变量包含所有详细信息,其中包括名称,类型,大小和temp_name。 temp_name实际上包含文件的临时路径。然后,您可以使用move_uploaded_file函数将文件移动到您想要的任何路径。
关于在数据库中保存,一旦您能够将文件成功移动到所需位置,就可以更新数据库。我建议,最好只为文件名和id设置一个表,我假设你也可以为用户提供一个表。然后,您可以拥有一个可以映射用户ID和文件ID的新表。这将使您能够在用户之间共享访问权限。当然,还有其他方法可以做到这一点。我认为这可能是一个简单的实现。
另外我刚才意识到,您可能想要查看一个简单的文件上传示例。您可以参考this链接
答案 2 :(得分:0)
您可以使用全局变量$_FILES
在PHP上传文件。
上传文件后......它们会暂时存储在系统的临时文件夹中。
例如..如果您正在使用XAMMP ..上传的文件会暂时存储在xammp/tmp/
中。
检查http://php.net/manual/en/reserved.variables.files.php
以获取使用$ _FILES变量的说明
答案 3 :(得分:0)
看起来你对PHP来说是全新的。我给你一个示例代码。使用它并向前发展。这是给我的一个学生。试试吧。
<?php
session_start();
if(!isset($_SESSION['Usernm']))
{
echo header("Location:../Common/MI_Login.php");
}
$usernm = $_SESSION['Usernm'];
include("../Connection/Connection.php");
if(isset($_POST['BTN_Submit_mi_songdesc']))
{
validate_song();
if(count($error) == 0)
{
$SongNm = $_POST['TXT_Nm'];
$ext=strchr($_FILES['FF_Song']['name'],".mp3");
$newfile=str_replace($_FILES['FF_Song']['name'],$SongNm,$_FILES['FF_Song']['name']);
$song = 'Songs/'.$newfile.$ext;
$album = $_POST['DDL_AlbumNm'];
$singernm = $_POST['DDL_SingerNm'];
$bitrate = $_POST['DDL_Bitrate'];
$catg = $_POST['DDL_Catg'];
$ins_song = "INSERT INTO mi_songdesc (SD_SongName, SD_File, SD_AlbumID, SD_SingerID, SD_Bitrate, SD_CatgID, SD_Approved, SD_UploadedBy) VALUES ('$SongNm','$song','$album','$singernm','$bitrate','$catg','1','$usernm')";
mysql_query($ins_song) or die(mysql_error());
move_uploaded_file($_FILES['FF_Song']['tmp_name'],'../'.$song);
header("Location:".$_SERVER['PHP_SELF']);
}
else
{
foreach($error as $i)
{
$test .= $i."<br />";
}
}
}
function validate_song()
{
global $error;
$error = array();
if($_POST['TXT_Nm'] == "")
{
$error[] = "Error : Enter Song Name";
}
if($_FILES['FF_Song']['name'] == "")
{
$error[] = "Error : Browse a Song";
}
if($_POST['DDL_AlbumNm'] == "")
{
$error[] = "Error : Select Album";
}
if($_POST['DDL_SingerNm'] == "")
{
$error[] = "Error : Select Singer";
}
if($_POST['DDL_Bitrate'] == "")
{
$error[] = "Error : Select Bitrate ";
}
if($_POST['DDL_Catg'] == "")
{
$error[] = "Error : Select Category";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload Song</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table width="520" border="1" align="center">
<tr>
<td colspan="3" align="center" valign="middle">Enter Song Details</td>
</tr>
<tr>
<td width="185">Song Name</td>
<td width="16"> </td>
<td width="297"><label for="TXT_Nm"></label>
<input name="TXT_Nm" type="text" id="TXT_Nm" value="<?php echo $_POST['TXT_Nm']; ?>" size="30" maxlength="30"/></td>
</tr>
<tr>
<td>File</td>
<td> </td>
<td><label for="FF_Song"></label>
<input type="file" name="FF_Song" id="FF_Song"/></td>
</tr>
<tr>
<td>Album Name</td>
<td> </td>
<td><label for="DDL_AlbumNm"></label>
<select name="DDL_AlbumNm" id="DDL_AlbumNm">
<option value="">Select</option>
<?php
$res_alb = mysql_query("SELECT * FROM mi_album");
while($row_alb = mysql_fetch_array($res_alb))
{
if($_POST['DDL_AlbumNm']==$row_alb['Alb_SlNO'])
{
?>
<option selected="selected" value="<?php echo $row_alb['Alb_SlNO']; ?>"><?php echo $row_alb['Alb_Name']; ?></option>
<?php
}
else
{
?>
<option value="<?php echo $row_alb['Alb_SlNO']; ?>"><?php echo $row_alb['Alb_Name']; ?></option>
<?php
}
}
?>
</select></td>
</tr>
<tr>
<td>Singer Name</td>
<td> </td>
<td><label for="DDL_SingerNm"></label>
<select name="DDL_SingerNm" id="DDL_SingerNm">
<option value="">Select</option>
<?php
$res_singer = mysql_query("SELECT * FROM mi_singer");
while($row_singer = mysql_fetch_array($res_singer))
{
if($_POST['DDL_SingerNm']==$row_singer['SI_SlNo'])
{
?>
<option selected="selected" value="<?php echo $row_singer['SI_SlNo']; ?>"><?php echo $row_singer['SI_Name']; ?></option>
<?php
}
else
{
?>
<option value="<?php echo $row_singer['SI_SlNo']; ?>"><?php echo $row_singer['SI_Name']; ?></option>
<?php
}
}
?>
</select></td>
</tr>
<tr>
<td>Bitrate</td>
<td> </td>
<td><label for="DDL_Bitrate"></label>
<select name="DDL_Bitrate" id="DDL_Bitrate">
<option value="">Select</option>
<option value="128">128</option>
<option value="256">256</option>
</select>
kbps</td>
</tr>
<tr>
<td>Select Category</td>
<td> </td>
<td><label for="DDL_Catg"></label>
<select name="DDL_Catg" id="DDL_Catg">
<option value="">Select</option>
<?php
$res_catg = mysql_query("SELECT * FROM mi_catg");
while($row_catg = mysql_fetch_array($res_catg))
{
if($_POST['DDL_Catg']==$row_catg['C_SlNo'])
{
?>
<option selected="selected" value="<?php echo $row_catg['C_SlNo']; ?>"><?php echo $row_catg['C_Name']; ?></option>
<?php
}
else
{
?>
<option value="<?php echo $row_catg['C_SlNo']; ?>"><?php echo $row_catg['C_Name']; ?></option>
<?php
}
}
?>
</select></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td align="center" valign="top"><input type="submit" name="BTN_Submit_mi_songdesc" id="BTN_Submit_mi_songdesc" value="Submit" /></td>
</tr>
<tr>
<td colspan="3"><?php echo $test; ?> </td>
</tr>
</table>
</form>
</body>
</html>