在Laravel中删除图像时文件名过长

时间:2019-02-01 07:55:52

标签: php laravel

我正在一个Laravel项目上,代码将图像保存在一个文件夹中,该文件夹的标题来自帖子。问题是,在添加帖子时,它不会给出警告,提示文件名太长,而在删除帖子时,它会在demo.php/uploads/filename.php中提示文件名太长。

是真的因为长文件夹名还是其他原因?

调用以下代码在删除帖子时删除文件夹。

function rmdir_recursive($dir) {
if (is_array($dir) || is_object($dir))
  {
    foreach(scandir($dir) as $file) {
        if ('.' === $file || '..' === $file) continue;
        if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
        else unlink("$dir/$file");
    }
  }
    if (is_string($dir)) {
        rmdir($dir);
    }
}

以下功能可添加帖子:

 function create()
{
    if($_SERVER['REQUEST_METHOD']=="POST")
    {
      $pid          = rand(1000,9000);
      $title        = $_POST['title'];
      $descpt       = $_POST['description'];
      $push         = isset($_POST['send_push']) ? $_POST['send_push'] : "";
      $feature_image = array();
      $fy           = $_POST['fy'];

      if(empty($title) || empty($descpt) || empty($fy))
      {
          array_push($this->errors, MEND_FIELD_ERROR);
          return;
      }

      if(!empty($_FILES['feature_image']['name'][0]))
      {
          $image = $_FILES['feature_image'];
          $allowed_ext = array('jpeg','jpg','png','pdf','docx');
          $allowed_size = 20000000;

          foreach($image['name'] as $pos=>$image_name)
          {
              $dir = "./cdn/uploads/notice/".$title;      
              $tmp = $image['tmp_name'][$pos];
              $img_size = $image['size'][$pos];
              $img_error = $image['error'][$pos];
              $img_ext = explode('.', $image_name);
              $img_name = $img_ext[0];
              $img_ext = strtolower(end($img_ext));


              if(in_array($img_ext, $allowed_ext))
              {
                  if($img_size <= $allowed_size)
                  {
                    if(!file_exists($dir))
                    {
                        mkdir($dir);
                    }
                    $image_new_name = $img_name.'$$'.uniqid('', true).'.'.$img_ext;

                    $upload_destination = $dir.'/'.$image_new_name;
                    if(move_uploaded_file($tmp, $upload_destination))
                    {
                        array_push($feature_image, $image_new_name);
                    }
                    else
                    {
                        array_push($this->errors, $img_error);
                        return;
                    }

                  }
              }
              else
              {
                array_push($this->errors, $img_ext.' is not an allowed file extension.');
                return;
              }
          }
      }

      $s_feature_image = json_encode($feature_image, JSON_UNESCAPED_UNICODE);

      $statement = $this->db->prepare("INSERT INTO `notice` (`pid`,`title`,`descpt`,`date`,`photo`,`fy`)
      VALUES (?,?,?,?,?,?)");         
      if($statement->execute([$pid,$title,$descpt,DAT, $s_feature_image, $fy]))
      {
        if($push == "checked")
        {

            $descpt = strip_tags($descpt);
            $tek = array("message"=>$descpt,"title"=>$title);

            $tokens = $this->getTokens();
            $this->push_notification($tokens,$tek);

        }
        ExitThis::send_to(URL.'notice?id='.$pid);

      }
      else
      {
          array_push($this->errors, DATABASE_ERROR);
          return;
      }
    }
}

注意:标题将为尼泊尔字符。

1 个答案:

答案 0 :(得分:0)

我不知道这是正确的,但是如果不是字符串,则删除文件夹会帮助我。我对代码进行了以下更改:

function rmdir_recursive($dir) {
if (is_array($dir) || is_object($dir))
  {
    foreach(scandir($dir) as $file) {
        if ('.' === $file || '..' === $file) continue;
        if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
        else unlink("$dir/$file");
    }
  }
  if(!is_string($dir)){
     rmdir($dir);
  }
}