2016-07-24 6 views
1

アップロードフォルダ内に新しいフォルダを作成しようとしていますので、ユーザーは自分のフォルダにファイルをアップロードできます。 PHPを使用してこれを行うことはできますか?またはMYSQLで列 "LONGBLOB"が必要ですか? 私はそれがあなたのデータベースに彼の新しいフォルダのための基礎として使用することができることを、あなたはセッション変数にユーザーのユーザー名またはIDを持っていると仮定するとユーザーフォルダにファイルをアップロード

<?php 
header('Content-Type: application/json'); 

$succeeded = []; 
$failed =[]; 
$uploaded = []; 
$allowed = ['png', 'gif', 'jpg']; 

if(!empty($_FILES["file"])) { 

    foreach ($_FILES['file']['name'] as $key => $name) { 
     if ($_FILES['file']['error'][$key] === 0) { 

      $temp = $_FILES['file']['tmp_name'][$key]; 

      $ext = explode('.', $name); 

      $ext = strtolower(end($ext)); 

      $file = md5_file($temp) . time() . '.' . $ext; 

      if (in_array($ext, $allowed) === true && move_uploaded_file($temp, "uploads/{$file}") === true) { 
       $succeeded[] = array(
           'name' => $name, 
           'file' => $file 
           ); 

      }else{ 
       $failed[] = array(
        'name' => $name); 
      } 
     } 
    } 


} 

if (!empty($_POST['ajax'])) { 
    echo json_encode(array(
     'succeeded' => $succeeded, 
     'failed' => $failed)); 
} 



?> 
+0

あなたは簡単にPHPを使用して、各ユーザー用のフォルダを作成し、デシベルよりも優れたアプローチであることができます - おそらく、DB内のファイルと、おそらくダウンロードリンクで使用するハッシュのいくつかの並べ替えへの参照を格納します。 db内に実際にBLOBSとしてイメージを格納すると、おそらく巨大なサイズに成長します – RamRaider

答えて

0

で画像を保存することをお勧めではないことを読みました/彼女はファイルをアップロードします。 ファイルをダウンロードしたいときは、同じユーザー名を使用する必要があります。ハッシュとファイルパスを保存することで、ファイル名、フォルダパス、所有者などを表示しないリンクを生成することができます.dbは灰をチェックし、必要に応じてファイルとパスを返すことができます。

以下は、ユーザーの独自のフォルダを生成し、アップロードプロセスで使用するための、テストされていない例です。

<?php 


    $succeeded = []; 
    $failed =[]; 
    $uploaded = []; 
    $allowed = ['png', 'gif', 'jpg']; 


    /* 
     generate a suitable name for the new folder, 
     remove characters which might be troublesome 
    */ 
    $userdir = str_replace( 
     array("'",'"','-'), 
     array('','','_'), 
     $_SESSION['username'] 
    ); 



    /* 
     new path into which the files are saved 
     It might be better to have the files 
     stored outside of the document root. 
    */ 
    $savepath = 'uploads/' . $userdir; 



    /* create the folder if it does not exist */ 
    if(!file_exists($savepath)) { 
     mkdir($savepath); 
     chown($savepath, $username); 
     chmod($savepath, 0644); 
    } 



    if(!empty($_FILES["file"])) { 

     foreach($_FILES['file']['name'] as $key => $name) { 
      if($_FILES['file']['error'][$key] === 0) { 

       $temp = $_FILES['file']['tmp_name'][$key]; 

       /* 
        is there anything to be gained by hashing the filename? 
        the hash would be the same for filenames with the same 
        name anyway. 

        If the file is large, calculating the hash of the file could 
        take some time... 
       */ 
       $ext = explode('.', $name); 
       $ext = strtolower(end($ext)); 
       $file = md5_file($temp) . time() . '.' . $ext; 


       /* generate a random hash to use in downloads */ 
       $hash=uniqid(md5(date(DATE_COOKIE))); 


       /* here probably - store reference in db? Assign permissions based upon owner etc */ 
       $sql='insert into `table` (`filename`,`username`,`uid`,`datetime`,`hash`) values (?,?,?,?,?);';    

       /* bind params and execute - not shown */ 



       if (in_array($ext, $allowed) === true && move_uploaded_file($temp, "{$savepath}/{$file}") === true) { 
        $succeeded[] = array('name' => $name, 'file' => $file); 
       }else{ 
        $failed[] = array('name' => $name); 
       } 
      } 
     } 
    } 

    if (!empty($_POST['ajax'])) { 

     header('Content-Type: application/json'); 
     echo json_encode(array(
      'succeeded' => $succeeded, 
      'failed' => $failed)); 
    } else { 

     header('HTTP/1.1 404 Not Found', true, 404); 
    } 
?> 
関連する問題