«ImagickException» с сообщением «невозможно открыть файл - PullRequest
0 голосов
/ 10 мая 2011

«ImagickException» с сообщением «невозможно открыть файл /data/web/myweb.com/sub/7/file:/data/web/myweb.com/sub/7/sites/default/files/logo.png «

Привет, Я получил это сообщение, когда хочу создать PDF-файл с веб-страницы, это png-файлы. Выдает ошибку только тогда, когда содержимое PDF содержит какой-либо файл PNG. Когда я удаляю все файлы png, которые должны быть в pdf, все правильно. Когда я смотрю в php info, я вижу png поддерживаемый формат для Imagick. Когда я попытался найти решение в Google, он вернул многие сайты с той же ошибкой, но почти без решения. Единственное решение, которое я нашел, это установить другую библиотеку на сервер. Но я бы предпочел другое решение, если оно есть.

Спасибо за любые советы Tomas

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

ImageMagick действительно может взять png файлы и конвертировать их в pdf. Вы уверены, что файл на самом деле находится на сервере в правильном месте.

создается впечатление, что команда inout для ImageMagick может быть неправильной. Путь ниже выглядит странно.

data/web/myweb.com/sub/7/file:/data/web/myweb.com/sub/7/sites/default/files/logo.png
                         ^^^^^
                         Is this expected?

Я могу рассказать тебе больше, если ты скажешь мне сайт. В противном случае, я бы сказал, что это ошибка в скрипте php / python на сайте. Это не похоже на проблему ImageMagick для меня.

1 голос
/ 21 января 2013

Сообщение об ошибке ImagickException указывает на то, что Imagick (класс PHP) задыхается от префикса 'file: //', который является streamwrapper, довольно недавним дополнением PHP.Документация Imagick не дает четкого представления об использовании stremwrappers, и, скорее всего, Imagick их не поддерживает.Когда он не видит '/' в первом байте имени файла, он предполагает, что имя файла является относительным, и предварительно ожидает к нему текущий каталог, создавая строку монстра, которую вы вставили в вопрос.

Решениеобрезать префикс 'file: //' в имени файла, который вы отправляете в Imagick.Имя файла должно быть либо абсолютным (начинаться с /), либо относительным.

if (strpos('file://', $filename) === 0) {
  $filename = substr($filename, 7);
}
...