У меня есть эта часть программы PHP:
$docx_filename = "/var/www/editeur/docx/".$file1
$command5 = "python3 conv_docx_pdf.py \"$docx_filename\"";
$output = shell_exec($command5);
Скрипт conv_docx_pdf.py:
import subprocess
import os
import sys
def docx_to_pdf(input_file):
# Get the file name without extension
file_name, _ = os.path.splitext(input_file)
# Construct the output file path with .pdf extension
output_file = file_name + ".pdf"
# Run unoconv to convert DOCX to PDF
subprocess.run(["unoconv", "-f", "pdf", input_file])
return output_file
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python script.py <input_file>")
sys.exit(1)
input_file = sys.argv[1] # Get the input file from command-line argument
output_file = docx_to_pdf(input_file)
print("Output PDF:", output_file)
Команда (python3 conv_docx_pdf.py filename1.docx) работает нормально, когда я выполняю ее в терминале Ubuntu. Однако php не может его выполнить.
права на папку docx:
drwxr-xr-x 2 www-data www-data 4096 26 марта 12:58 docx
права на файл $file1
-rw-r--r-- 1 www-data www-data 11738 26 марта 11:45 status29024.docx
У меня есть другие программы Python (которые не используют подпроцесс), которые отлично работают при вызове из php. Любая помощь приветствуется.
Итак, вы вызываете скрипт Python, который вызывает unoconv? Почему бы вам не вызвать unoconv напрямую?






Команда (python3 conv_docx_pdf.py filename1.docx) работает нормально, когда я выполняю ее в терминале Ubuntu.
Команда, сгенерированная предоставленным вами кодом, — это не python3 conv_docx_pdf.py filename1.docx, а python3 conv_docx_pdf.py "filename1.docx" (обратите внимание на дополнительные кавычки).
Вместо этого попробуйте этот код, добавив точку с запятой в конце строки 2:
$file1 = "filename1.docx";
$docx_filename = "/var/www/editeur/docx/" . $file1;
$command5 = "python3 conv_docx_pdf.py $docx_filename";
$output = shell_exec($command5);
Я благодарю вас всех за вашу помощь. Наконец я обнаружил, что проблема связана с разрешениями Unoconv и www-data. Я воспользовалась рекомендациями этого сайта.
cd /var/www/
sudo mkdir .cache
sudo chown -R www-data:www-data .cache/
sudo chmod -R 744 .cache/
sudo mkdir .config
sudo chown -R www-data:www-data .config/
sudo chmod -R 744 .config/
В чем ошибка? «php не может его выполнить» может означать, что он не может найти двоичный файл или существуют проблемы с разрешениями для двоичного файла. Пожалуйста, включите сообщение об ошибке. Посмотрите файл php.log и проверьте, на что он жалуется.