Файл PHP Imagick не найден или путь является каталогом

#php

#php

Вопрос:

У меня есть PHP-скрипт для создания эскизов JPG из файлов PDF. Это работает до тех пор, пока не встретит файлы с неправильными именами со многими пробелами. (например, «aa bb cc dd.pdf»).

Вот мой упрощенный код:

 $cdir = scandir($dir);
foreach ($cdir as $key => $value) 
{ 
  $cfile = pathinfo($dir . DIRECTORY_SEPARATOR . $value);    
   if(strtolower($cfile['extension']) == "pdf")
    {
    $im = new imagick($dir . DIRECTORY_SEPARATOR . $value[0]); //zero is the first page of the PDF
    $im->setImageFormat('jpg');
    $im->thumbnailimage(80, 160, true); // width and height
    $im->writeimage('thumbs/'.$cfile['filename'].'.jpg');           
}}
  

Я перепробовал все, что знал:

  • экранирование пробелов с
  • используя __DIR__
  • $_SERVER[‘SCRIPT_FILENAME’]

Я всегда получаю или «файл не найден» или «это каталог».

Я не могу переименовать файлы PDF, так как же решить эту проблему?

Комментарии:

1. Вы пробовали: $im->writeimage('"thumbs/'.$cfile['filename'].'.jpg"');

2. Это не работает, я получаю: Фатальная ошибка: неперехваченное исключение ‘ImagickException’ с сообщением ‘Путь — это каталог: /’

3. вы пробовали заменять пробелы символами подчеркивания? str_replace(‘ ‘, ‘_’, $cfile[‘filename’])? Я предполагаю, что ошибка в строке writeimage?

4. Попробуйте urlencode($filename) .

5. Вы пробовали это с " s? Может попробовать ' s $im->writeimage("'thumbs/{$cfile['filename']}.jpg'"); или проблема в этой строке $im = new imagick($dir . DIRECTORY_SEPARATOR . $value[0]);

Ответ №1:

Хорошо, после нескольких попыток и ошибок это решает проблему:

 $value =  __DIR__ . "/". $dir . DIRECTORY_SEPARATOR . $value ;
$im = new imagick( $value."[0]" ); 
  

Ответ №2:

У меня была эта проблема в Windows, и для меня сработала установка Ghostscript