#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