【问题标题】:File name too long while deleting image in Laravel在 Laravel 中删除图像时文件名太长
【发布时间】:2019-02-01 17:03:57
【问题描述】:

我正在处理一个 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;
      }
    }
}

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

【问题讨论】:

  • 至少你应该在rmdir($dir);周围添加一个条件来检查它是否是一个目录,因为当$dir不是一个字符串时你不能调用它。
  • @jeroen 我在代码中添加了条件。你的意思是这样做吗?

标签: php laravel


【解决方案1】:

我不知道这是对的,但如果不是字符串,请删除文件夹帮助我。我在我的代码中做了以下更改:

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);
  }
}

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2021-08-14
    • 1970-01-01
    • 2014-05-30
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多