【问题标题】:"Is a directory" error when using unlink() PHP使用 unlink() PHP 时出现“是目录”错误
【发布时间】:2021-05-13 00:56:53
【问题描述】:

我正在尝试一件简单的事情。 从 post 方法获取图像,将这些图像移动到我的 public/images 文件夹中,如果出现任何阻止代码继续运行的错误(比如我用preg_match() 检查的不受支持的文件类型),则回滚整个事情,也就是说,删除已经移动到文件夹中的文件。

问题是,当我尝试使用 unlink() 时,我收到了“是一个目录”错误。我不是要删除目录!我正在尝试删除文件!

我使用了is_file()is_dir()file_exists() 来检查所有内容,所有内容都指向一个文件。 我几乎整天都在试图弄清楚发生了什么,但没有成功。我几乎要放弃这件事了。

我使用的是 Ubuntu 20.04,使用 Lumen 8 和 PHP 7.4。这是我的控制器代码:

<?php

namespace App\Http\Controllers;

use App\Models\Insumo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class InsumosController extends BaseController
{
    public function __construct()
    {
        $this->classe = Insumo::class;
    }

    public function store(Request $request)
    {
        try {
            DB::beginTransaction();

            $images = [
                'mainImg' => "",
                'img1' => "",
                'img2' => "",
                'img3' => "",
                'img4' => ""
            ];

            $filesKeys = $request->files->keys();

            foreach ($filesKeys as $fileKey) {
                $pattern = "/^image\/(jpeg|jpg|bmp|png|gif)$/";
                $mimeType = $request->file($fileKey)->getMimeType();

                if (!preg_match($pattern, $mimeType)) {
                    throw new \Exception('Not supported file', 415);
                }

                $insumoNome = lcfirst(str_replace(' ', '', $request->nome));
                $ext = "." . $request->file($fileKey)->extension();
                $newName = $insumoNome . "-" . $fileKey . "-" . bin2hex(random_bytes(5)) . $ext;
                $images[$fileKey] = $newName;

                $request->file($fileKey)->move('images', $newName);
            }

            $insumo = Insumo::create([
                'nome' => $request->nome,
                'descricao' => $request->descricao,
                'mainImg' => $images['mainImg'],
                'img1' => $images['img1'],
                'img2' => $images['img2'],
                'img3' => $images['img3'],
                'img4' => $images['img4'],
            ]);

            DB::commit();

            return response()->json($insumo, 201);
        } catch (\Exception $e) {
            DB::rollBack();

            $imagesDir = __DIR__ . '/../../../public/images/';

            foreach ($images as $image) {

                if (file_exists($imagesDir . $image)) {
                    $imagesPath = $imagesDir . $image;
                    unlink($imagesPath);
                }
            }

            return response()->json($e->getMessage(), $e->getCode());
        }
    }
}

unlink() 外,所有代码似乎都按我的预期工作。 有好心人能帮我解决这个问题吗?

【问题讨论】:

  • 发布完整的错误信息。它将包括它试图取消链接的文件的完整路径。

标签: php unlink lumen-8


【解决方案1】:

经过将近一天的时间试图弄清楚发生了什么,我提交这个问题的那一刻在我脑海中通过检查foreach 中的$image 变量,你猜怎么着? 有时它会变空。

嗯,找到问题了……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2015-10-27
    • 2014-05-30
    • 2020-07-31
    • 2018-08-27
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多