0

複数の人にメッセージを送信し、ファイルを添付できるこのページがあります...

これが私のコードです

<?php
    session_start();
    $inboxfrom = $_SESSION['loginusername'];
    $inboxto = $_POST['inboxto'];
    $inboxsubject = $_POST['inboxsubject'];
    $inboxcontent = $_POST['inboxcontent'];
    $inboxtime = date('g:i A', time()+(6*60*60));
    $inboxdate = date('Y-m-d', time()+(6*60*60));
    mysql_connect("127.0.0.1", "root", "")or die("Cannot Connect toDb");
    mysql_select_db("Abbot_db");
    $count = 0;
    function generateRandomString($length = 8){    
        $string = ""; 
        $possible = "0123456789bcdfghjkmnpqrstvwxyz"; //character that can be used 
        for($i=0;$i < $length;$i++){ 
            $char = substr($possible, rand(0, strlen($possible)-1), 1); 
            if (!strstr($string, $char)){ 
                $string .= $char; 
            } 
        } 
        return $string; 
    } 
    if (count($inboxto) != 0){
        $count = 0;
        while ($count < count($inboxto)){
            $recepient = $_POST['inboxto'][$count];

            mysql_query("INSERT INTO Inbox_tbl(InboxTo, InboxFrom, InboxSubject, InboxContent, InboxTime, InboxDate,InboxStatus,ToDelete,FromDelete)VALUES ('$recepient','$inboxfrom','$inboxsubject','$inboxcontent','$inboxtime','$inboxdate','Unread','No','No')");
            $recepient_result = mysql_query("SELECT * FROM Accounts_tbl WHERE UserID='$recepient'");
            if (mysql_result($recepient_result, 0, "UserTypeID") == 1){
                $notiurl = "LMSadmin_inbox.php";
            } else if (mysql_result($recepient_result, 0, "UserTypeID") == 2) {
                $notiurl = "LMSteacher_inbox.php";
            } else {
                $notiurl = "LMSstud_inbox.php";
            }
            mysql_query("INSERT INTO Noti_tbl(NotiTo,NotiFrom,NotiContent,NotiDate,NotiTime,NotiType,NotiUrl)
                VALUES('$recepient','$inboxfrom','has sent you a message','$inboxdate','$inboxtime','Message','$notiurl')");



//---------------------------------------------------------         
            $countto = 0;
            $cont = generateRandomString(128);
            $folder = "./Attachments/".$cont;
            $name = $_FILES['file']['name'];
            if (!empty($name)){
                    while (is_dir($folder)){
                        $cont = generateRandomString(128);
                        $folder = "./Attachments/".$cont;
                    }   
                    mkdir($folder, 0700, true);

            }
            while ($countto < count($_FILES['file']['name'])){
                $name = $_FILES['file']['name'][$countto];
                $type = $_FILES['file']['type'][$countto];
                $tmp_name = $_FILES['file']['tmp_name'][$countto];
                $folder = "Attachments/".$cont."/";
                move_uploaded_file($tmp_name, $folder.$name);
                $fileurl = $cont."/".$name;
                $dummypost = mysql_query("SELECT * FROM Inbox_tbl ORDER BY InboxID DESC");
                $msgid = mysql_result($dummypost, 0, "InboxID");

                mysql_query("INSERT INTO Attachments_tbl(FileUrl,FileName,AttachType,AttachID)
                    VALUES('$fileurl','$name','Message',$msgid)");
                $countto++;
            }
//----------------------------------------------            


            $count++;   
        }
    }
    header('Location: ' . $_SERVER['HTTP_REFERER']);
?>

複数の受信者と倍数を配置した後の結果は...最初の受信者が添付ファイルを取得します..つまり、添付ファイルのフォルダーがランダムに生成され、ファイルがそこに配置されます....しかし、次の受信者に添付ファイルはそれぞれのフォルダーに移動されません..フォルダーが作成されていることがわかりますが、ファイルは移動されていません..

私の質問は..「move_uploaded_file」コードを使用した後、「temp_name」は消えますか? それがファイルが移動しない理由だと思うので..だから、私が使用できる代替コードを提案できますか?

4

2 に答える 2

0

move_uploaded_file()ファイルを設定されたターゲットの場所に再配置し、tmp_name後で役に立たないようにします。

アップロードしたファイルを最初に移動した場所に「puffer」フォルダーを作成しcopy()、ファイルを受信者フォルダーに配信するために必要な回数だけ呼び出す必要があります。ファイルが必要なすべてunlink()の場所に配置されると、このフグフォルダーからファイルを作成できます。

または、ファイルを1つの場所にのみ配置し(冗長性とストレージスペースの過剰使用を排除するため)、設定されたフォルダー内Attachments_tblのこの同じファイルへのリンクを作成することもできます。attachmentsただし、これには、システムの動作を改造して、(現在は唯一の)添付ファイルが、それを指すすべてのレコードも削除された後にのみ削除されるようにする必要があります。

于 2012-08-08T11:22:55.283 に答える
0

はい、ファイルは移動されました。これが見つからない理由です。次のことをお勧めします。

  1. 内側の while ループ (アップロードされたファイル用) を最初の while ループ (受信者用) の前に移動し、アップロードされたファイルを指定した場所に移動します。
  2. 前に指定した場所から各ユーザーの添付ファイル フォルダーにファイルをコピーする新しい内部 while ループを作成します。
于 2012-08-08T11:15:38.117 に答える