Я пытаюсь использовать следующий сценарий оболочки для преобразования файла docx в pdf:
unoconv -f pdf tempfile.docx
В Laravel у меня есть функция контроллера, которая создает файл temp docx с помощью phpWord, который янеобходимо преобразовать в PDF и вернуть URL-адрес.
Я установил unoconv
, используя apt-get
на моем ubuntu 16.04
сервере, и когда я запускаю ssh на сервер и запускаю unoconv через мой терминал, он работает на 100% правильно, однако, когда я запускаю его с помощью exec () в моем контроллере ничего не происходит!Я думаю, что это может быть путь к docx по какой-то причине неверен, но я не уверен почему, так как я использую точный метод для получения пути к файлу, который будет правильно возвращать местоположение .docx
$path_copy = 'store/' . $email . '_higher_results.docx';
$path_copy_pdf = 'store/' . $email . '_higher_results.pdf';
$filename = public_path($path_copy);
$the_download->saveAs($filename); //saves my .docx created by phpWord
exec('unoconv -f pdf ' . $path_copy); //should take the .docx created above and convert it into a pdf
//return $path_copy; //this returns the correct path of the .docx, and adds it to a link in my .vue component which allows the user to download the .docx
return $path_copy_pdf; //this SHOULD return the correct path of the PDF but the PDF is never created at the exec() step
Файл docx (и возможный pdf) существует в моей общей папке laravel по пути: /public/store/tempfile.docx
Я также пробовал использовать переменную $ filename выше, которая вызывает путь, используяpublic_path (), а также без кубиков.
Есть ли какая-то проблема с синтаксисом, связанная с тем, как я получаю путь к моему файлу .docx в моей функции exec ()?Есть ли какая-то другая проблема?
Спасибо!
Редактировать: теперь я использую Symfony для запуска моего скрипта оболочки, но та же проблема, просматривая обновление версий и выясняя, есть ли какие-то конкретные пути пакетов, которые мне нужныизменить в исполняемом файле unoconv.Потенциально также может быть какая-то проблема с разрешениями, потому что пользователь root может выполнить команду, а пользователь www-data - нет!(