Сценарий Python, вызванный из PHP, не может записать файл - PullRequest
1 голос
/ 30 января 2020

У меня проблема с преобразованием docx в pdf-файлы в моем скрипте.

Сначала я попытался использовать решение на основе чистого php, описанное здесь: { ссылка }

К сожалению, это не работает (создает пустой com-объект, а затем выдает фатальную ошибку).

Поэтому я попытался использовать скрипт python для этого. Здесь я использую отличный скрипт: { ссылка }

Итак, вот проблема.

Автономный скрипт Python (запускается из командной строки) работает просто хорошо, и сохраняет преобразованный PDF. К сожалению, когда я пытаюсь вызвать его через PHP, он не может сохранить преобразованный файл.

PHP сценарии могут создавать и записывать файлы в одном каталоге без проблем

Это предположительно быть локальной конфигурацией, поэтому мне нет дела до переносимости

Скрипты:

*******PHP*******

<?php
//Script only for testing Python calls, tried different methods

error_reporting(E_ALL);
echo '<h1>Begin</h1>';


echo '<h2>Before call</h2>';
exec ('python dp.py');

echo '<h2>After exec call</h2>';
system('python dp.py');
echo '<h2>After Sys Call</h2>';
passthru('python dp.py');
echo '<h2>After Pass Call</h2>';
$w = get_current_user();
var_dump($w);
?>

*****Python*****

import sys
import os
import comtypes.client
import win32com.client

wdFormatPDF = 17

#static file names for testing

in_file = 'C:\\Users\\fake_user\\OneDrive\\Stuff\\f1.docx'
out_file = 'C:\\Users\\fake_user\\OneDrive\\Stuff\\f3.pdf'
print('BEGIN<br>\n')

word = win32com.client.Dispatch('Word.Application')
word.Visible = False
doc = word.Documents.Open(in_file)
print('\nOpened Docx\n<br>')
print(in_file);
doc.SaveAs(out_file, FileFormat=wdFormatPDF)
print('\nSaved\n<br>')
doc.Close()
word.Quit()
print('DONE\n')

***** Вывод из браузера *****

Begin
Before call
After exec call
BEGIN
Opened Docx
C:\Users\fake_user\OneDrive\Stuff\f1.docx
After Sys Call
BEGIN
Opened Docx
C:\Users\fake_user\OneDrive\Stuff\f1.docx
After Pass Call
string(5) "fake_user"

Конфигурация системы

Windows 7 Professional Edition с пакетом обновления 1

Apache / 2.4.26 (Win32)

OpenSSL / 1.0.2l

PHP / 7.1.7

Python 3.8.1

Я пытался запустить Apache как системную службу и как пользователя, которому принадлежит OneDrive (имя изменено на "fake_user" здесь), так что это не должно быть проблемой с разрешениями (я думаю)

Любая помощь приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...