php - 在 PHP 开发服务器 win 10 上更改 imagick 的权限或更改 tmp 目录
问题描述
我正在运行 symfony 开发服务器的 windows 10 pc 上开发 php7.1 应用程序,但每次我运行脚本将 svg 转换为 png 时都会收到此错误。
WriteBlob 失败`/tmp/5f49ac095abe6.png'@error/png.c/MagickPNGErrorHandler/1630
我刚买了这台电脑,脚本可以在我的旧 Windows 笔记本电脑上运行。我做了研究并怀疑这是一个权限问题,但我用尽了所有方法来更改 php 和 imagick tmp 存储位置。
如果确实是权限问题,那么我如何更新 php/imagick 保存 tmp 文件的位置。
这是我的整个参考方法:
private function createImageFromSVG(ConfigLogo $logoConfig)
{
$svg = $logoConfig->getDefaultImage()->getContent();
$idColorArray = [
'first' => $logoConfig->getFirstColor(),
'second' => $logoConfig->getSecondColor(),
'third' => $logoConfig->getThirdColor(),
];
foreach ($idColorArray as $state => $color) {
if ($color != 'FFFFFF') {
$svg = preg_replace(
'/class="' . $state . '" style="fill:#([0-9a-fA-F]{6})/',
'class="' . $state . '" style="fill:#' . $color,
$svg
);
}
}
$fileName = sprintf('%s.png', uniqid());
$filePath = sprintf('/tmp/%s', $fileName);
$this->filePath = $filePath;
$im = new \Imagick();
$im->setBackgroundColor(new \ImagickPixel('transparent'));
$im->readImageBlob($svg);
$im->setImageFormat("png24");
$im->writeImage($filePath); //error !
$file = new UploadedFile($filePath, $fileName .'.png');
$im->clear();
$im->destroy();
$oldImages = $logoConfig->getRenderedLogoImages();
foreach ($oldImages as $image) {
if ($image->getImageName() !== 'default_logo.png') {
$this->uploadHandler->remove($image, 'imageFile');
}
$logoConfig->removeRenderedLogoImage($image);
}
$renderedImage = new ConfigLogoDefaultImage();
$renderedImage->setImageFile($file);
$renderedImage->setImageName($fileName);
$logoConfig->addRenderedLogoImage($renderedImage);
$this->operateImage($logoConfig, 'RenderedLogo');
}
错误发生在 line $im->writeImage($filePath)
;
提前感谢您对此的任何帮助。
解决方案
谁可能会遇到这个问题,在我在 C:/tmp 创建 tmp 目录后它就解决了。显然 imagick 不使用系统属性或 php.ini 中设置的系统 tmp 目录。
推荐阅读
- unit-testing - 在 Dart 中,如何验证单元测试中不抛出异常的 void 方法?
- python - Python用一个替换两个标题
- python - 在 Python 中,我应该并行运行多少个进程?
- javascript - ReactJS / Gatsby Js - 将子组件的值传递给父组件以获取按钮 onClick 链接
- rest - 将 PhoneNumber IdentityUser 覆盖为 ForeignKey .Net Core Web Api
- javascript - 道具值没有在vue中将更新的值从父组件发送到子组件
- javascript - 如何在 JS 中编码查询字符串并在 PHP 中解码?
- python - 熊猫根据列值添加行
- typescript - 从元组评估函数的参数类型
- opengl - 可以使用顶点数组渲染光线投射吗?