CI4 - 尝试移动图像但出现错误“无法将文件 php6WkH2s 移动到 /var/www/example.com/development.example.com/app_dir/public/ ()

CI4 - Trying to move image but get error "could not move file php6WkH2s to /var/www/example.com/development.example.com/app_dir/public/ ()

我正在尝试上传文件并将其移动到 public/ 文件夹。文件上传到可写文件夹没有问题,但是,移动到 public 文件夹时出现问题。

这是我的代码;

$update_post->move(ROOTPATH.'public/', $update_post.'.'.$fileType);

路径正确。当我回显 echo ROOTPATH.'public/'; 然后手动 copy/paste 时,我确实到达了目标目录。

权限正确。我对 public/ 目录有权限:

drwxr-xr-x  9 www-data www-data  4096 Jan 30 01:08 public

感谢任何提示。

原因:

因为move(string $targetPath, ?string $name = null, bool $overwrite = false)方法的$name参数无效

$update_post->move( ... , $update_post.'.'.$fileType);

解释:

连接一个 class CodeIgniter\Files\File extends SplFileInfo 实例调用继承的 SplFileInfo class's __toString() 方法,该方法 return 将文件路径作为字符串。

请注意,它没有 return 文件名,这是您感兴趣的。

解决方案:

您应该改为传入基本名称。

$update_post->move(
    ROOTPATH . 'public/',
    $update_post->getBasename()
);

或者,由于您 不是 changing the destination filename,不传递 move(...) 方法的第二个参数会更简洁。即:


$update_post->move(
    ROOTPATH . 'public'
);

附录:

如果您希望将目标文件名更改为新名称,请尝试以下操作:

guessExtension()

Attempts to determine the file extension based on the trusted getMimeType() method. If the mime type is unknown, will return null. This is often a more trusted source than simply using the extension provided by the filename. Uses the values in app/Config/Mimes.php to determine extension:


$newFileName = "site_logo"; // New filename without suffixing it with a file extension.
$fileExtension = $update_post->guessExtension();

$update_post->move(
    ROOTPATH . 'public',
    $newFileName . (empty($fileExtension) ? '' : '.' . $fileExtension)
);

备注:

move(...) 方法 return 为重定位文件创建一个新的 File 实例,因此如果需要结果位置,您必须捕获结果:$newRelocatedFileInstance = $update_post->move(...);