У меня есть небольшая функция php, которая использует ghostscript для получения многостраничного PDF файла и преобразования его в несколько png. Эта часть скрипта работает, я могу запустить его и проверить папку с изображениями, и все они есть.
Следующая часть скрипта изменяет размеры png, созданных ghostcript. Однако любая попытка использовать эти png в php приводит к тому, что "не удалось открыть поток: нет такого файла или каталога"
Более того, если копировать один из сгенерированных png в другую папку или даже в одну папку, она станет читаемой. Это заставляет меня думать, что изображения, созданные с помощью ghostscript, могут иметь неправильные разрешения. Но когда я запускаю свой скрипт для проверки разрешений и если файл существует. оба возвращают false.
Вот сценарий конверсии:
<?php
//Upload pdf convert to pngs in the folder jpgs/originals
$uploaddir = 'uploadtemp/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo "<p>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
exec('bin\gswin32c.exe -o jpgs\originals\%3d.png -sDEVICE=png16m -r150 uploadtemp\input.pdf');
unlink('uploadtemp\input.pdf');
header('Location: main.php');
} else {
echo "Upload failed";
}
?>
Вот сценарий, который пытается вызвать теперь сгенерированные png:
<?php
$filename = "jpgs/originals/1.png";
if (is_writable($filename)) {
echo 'The file is writable';
} else {
echo 'The file is not writable';
}
if (file_exists($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
?>
Оба оператора if возвращают false, хотя я могу видеть файлы, сгенерированные в папке
Это, безусловно, странная проблема, при запуске параметра ghostscript: jpgs\originals\%3d.png
он создает файлы с двумя пробелами перед цифрой. Поэтому вызов файла 2.png не работает, потому что он не существует, но если вы вызываете [пробел] [пространство] 2.png, это работает! И когда окна копируют файл, он должен стереть лишние пробелы или что-то еще.