在 Php dev server win 10 上更改权限或更改 imagick 的 tmp 目录
Change permissions or change tmp directory for imagick on Php dev server win 10
我正在 windows 10 pc 运行ning symfony 开发服务器上开发一个 php7.1 应用程序,但每次我 运行 一个脚本来转换 svg到 png 我收到这个错误。
WriteBlob Failed `/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');
}
错误发生在第 $im->writeImage($filePath)
行;
在此先感谢您对此的任何帮助。
无论谁遇到这个问题,我在 C:/tmp 中创建 tmp 目录后都已解决。显然 imagick 不使用系统属性或 php.ini.
中设置的系统 tmp 目录
我正在 windows 10 pc 运行ning symfony 开发服务器上开发一个 php7.1 应用程序,但每次我 运行 一个脚本来转换 svg到 png 我收到这个错误。
WriteBlob Failed `/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');
}
错误发生在第 $im->writeImage($filePath)
行;
在此先感谢您对此的任何帮助。
无论谁遇到这个问题,我在 C:/tmp 中创建 tmp 目录后都已解决。显然 imagick 不使用系统属性或 php.ini.
中设置的系统 tmp 目录