Php 将用户文件上载到codeigniter中每个上载文件的随机生成路径

Php 将用户文件上载到codeigniter中每个上载文件的随机生成路径,php,codeigniter,Php,Codeigniter,我正在尝试将用户文件放入目录,该目录必须为每个上载的文件随机生成。如何通过编辑配置文件中的上载路径直接执行此操作 下面是我的config/upload.php的样子: $config=array('upload_path' => './uploads/','allowed_types' => 'jpg|png|gif|doc|xml|zip|pdf|ppt docx|txt|mp4|m3u8|ts|3gp|mov|avi|wmv|mp3|aif|aifc|ai

我正在尝试将用户文件放入目录,该目录必须为每个上载的文件随机生成。如何通过编辑配置文件中的上载路径直接执行此操作

下面是我的config/upload.php的样子:
    $config=array('upload_path' => './uploads/','allowed_types' => 'jpg|png|gif|doc|xml|zip|pdf|ppt
        docx|txt|mp4|m3u8|ts|3gp|mov|avi|wmv|mp3|aif|aifc|aiff|aac|m4a|mp1|mp2|mpeg|wav|ogg',
        'max_size' => '102400','detect_mime'=>TRUE);
?>
我希望以下函数的输出为随机目录名:

    public function crypto_rand_secure($min, $max)
{
     $range = $max - $min;
     if ($range < 1) return $min; // not so random...
     $log = ceil(log($range, 2));
     $bytes = (int) ($log / 8) + 1; // length in bytes
     $bits = (int) $log + 1; // length in bits
    $filter = (int) (1 << $bits) - 1; // set all lower bits to 1
    do 
    {
          $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
         $rnd = $rnd & $filter; // discard irrelevant bits
    }
     while ($rnd >= $range);
    return $min + $rnd;
}

public function getRandom($length)
{
    $token = "";
     $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
     $codeAlphabet.= "0123456789";
     $max = strlen($codeAlphabet) - 1;
     for ($i=0; $i < $length; $i++) 
     {
         $token .= $codeAlphabet[$this->crypto_rand_secure(0, $max)];
    }
    return $token;
}
public $random='./uploads/'.$this->getRandom(32);
mkdir($random);

因此,它应该从某处获取随机值,而不会导致重复对象生成(即,重复目录生成)

您有太多允许的文件扩展名。整理您的文件和随机生成的子目录路径

if(isset($_FILES['File'])){
   $Ext = end((explode(".", $_FILES['File']["name"])));
   $UploadPath = 'uploads/'.$Ext.'/'.rand(1, 1000).'/'; 

   if(!is_dir($upload_path)) {
       mkdir(FCPATH.$UploadPath, 0777, TRUE);
       chmod(FCPATH.$UploadPath, 0777);
   }
   $UploadPath = FCPATH.$UploadPath;
   // And encrypt your file name
   $config = ['upload_path'=>$UploadPath,'allowed_types'=>'jpg|png|gif|doc|xml|zip|pdf|ppt|docx|txt|mp4|m3u8|ts|3gp|mov|avi|wmv|mp3|aif|aifc|aiff|aac|m4a|mp1|mp2|mpeg|wav|ogg','encrypt_name'=>true]
}

在您的控制器中输入代码$config['encrypt_name']=TRUE;在上传的实际代码之前。
if(isset($_FILES['File'])){
   $Ext = end((explode(".", $_FILES['File']["name"])));
   $UploadPath = 'uploads/'.$Ext.'/'.rand(1, 1000).'/'; 

   if(!is_dir($upload_path)) {
       mkdir(FCPATH.$UploadPath, 0777, TRUE);
       chmod(FCPATH.$UploadPath, 0777);
   }
   $UploadPath = FCPATH.$UploadPath;
   // And encrypt your file name
   $config = ['upload_path'=>$UploadPath,'allowed_types'=>'jpg|png|gif|doc|xml|zip|pdf|ppt|docx|txt|mp4|m3u8|ts|3gp|mov|avi|wmv|mp3|aif|aifc|aiff|aac|m4a|mp1|mp2|mpeg|wav|ogg','encrypt_name'=>true]
}