1

アップロードおよびダウンロード システムが php および mysql でどのように機能するかについて質問があります。

特定のユーザーのみがいくつかのカテゴリに分類された利用可能なファイルを表示し、必要なファイルをダウンロードできるように、(できれば私の Web ページから) ファイルをアップロードできるようにしたいと考えています。

これを尋ねるのは本当にばかげていると思いますが、ファイルはどこに保存されますか? テーブルの中?または、テーブルは Web サーバーのディレクトリを指していますか?

私は本当にこれを学びたいのでこれを尋ねていますが、基本的な質問でさえ、解決するどころか定式化することさえ難しい場合があります... :)

いくつかの入力を楽しみにしています

乾杯アダム

4

4 に答える 4

1

PHPファイルのアップロードは、実際には2段階のプロセスです(目的のパスに保存する場合)。$ _FILES変数には、ファイルをアップロードしようとしたときのすべての詳細(名前、タイプ、サイズ、temp_nameなど)が含まれています。temp_nameには、実際にはファイルの一時パスが含まれています。次に、move_uploaded_file関数を使用して、ファイルを任意のパスに移動できます。

データベースへの保存については、ファイルを目的の場所に正常に移動できるようになったら、データベースを更新できます。私は、ファイル名とIDだけのテーブルを用意する方がよいと思います。また、ユーザー用のテーブルもあると思います。次に、ユーザーIDとファイルIDをマップできる新しいテーブルを作成できます。これにより、ユーザー間でアクセスを共有できるようになります。もちろん、それを行う方法は他にもあります。これは単純な実装かもしれないと思います。

また、簡単なファイルアップロードの例を見たいと思うかもしれないことに気づきました。このリンクを参照できます

于 2012-05-29T22:07:07.930 に答える
1

それはすべて、どれだけ複雑にするかによって異なります。

最も簡単な方法は、ユーザーにファイルをアップロードさせることです。PHP を使用してファイル情報 ( $_FILE) を読み取り、ファイルを任意のフォルダーに移動して、情報をデータベースに入れます。ユーザーとファイルをリンクすると仮定すると、ユーザーはすべてのファイルを表示し、リストからファイルをダウンロードできます。

より複雑で、安全で、全体的に優れたオプションは、ユーザーにファイルをアップロードさせることです。PHP を使用してファイル情報を読み取り、それをデータベースに保存します。ID、または一意のハッシュを使用してファイルの名前を変更し、上書きされないようにし、ユーザーまたは他のユーザーがアクセスできる保護されたディレクトリに移動します。ハッシュに基づいて要求されたファイルを検索し、ユーザーが正しくログインしている場合は要求されたファイルを提供するダウンロード ページをユーザー用にセットアップします。

繰り返しますが、どれだけ複雑にするか、および達成しようとしている目標によって異なります。問題に取り組んで行き詰まったら、戻ってきて問題の特定の部分について質問すれば、さらに多くの助けが得られるはずです。

于 2012-05-29T22:00:05.017 に答える
0

グローバル変数を使用して、PHP でファイルをアップロードできます$_FILES。ファイルをアップロードすると、システムの一時フォルダーに一時的に保存されます。

たとえば、XAMMP を使用している場合、アップロードされたファイルは一時的にxammp/tmp/.

http://php.net/manual/en/reserved.variables.files.php$_FILES 変数の使用に関する説明を確認してください

于 2012-05-29T21:53:31.473 に答える
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">&nbsp;</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>&nbsp;</td>
      <td><label for="FF_Song"></label>
      <input type="file" name="FF_Song" id="FF_Song"/></td>
    </tr>
    <tr>
      <td>Album Name</td>
      <td>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</td>
      <td>&nbsp;</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; ?>&nbsp;</td>
    </tr>
  </table>
</form>
</body>
</html>
于 2012-05-29T22:20:18.070 に答える