cmd — PHP exec завершается неудачно без ошибок

Я хотел бы автоматизировать экспорт .odf подать в .pdf,

Я попробовал что-то под названием unoconv.

При вводе в командной строке Windows все правильно.

>"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt

После использования в скрипте PHP ничего не работает. Ошибка не появляется.

exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt');

//or

shell_exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt')

Я также пытался сбежать \ или используя ' а также " иначе, но ни один из моих тестов не был убедительным.

$test = exec($cmd, $output, $return);
echo var_dump($test);
echo var_dump($output);
echo var_dump($return);

Дай мне

//echo var_dump($test)give nothing

//echo var_dump($ouput);
array (size=0)
empty

//echo var_dump($return);
int 1

Это звучит как проблема с разрешениями, но я также проверил это, и все папки доступны для PHP.

5

Решение

Я бы добавил это как комментарий вместо этого, но недостаточно реп …

У меня была эта проблема при переходе с сервера WAMP на IIS, и, как вы сказали, это была проблема с разрешениями.
Оказывается, я должен был предоставить пользователю «IUSR» и группе «IIS_IUSRS» полные разрешения для его выполнения.

Позже я столкнулся с чем-то похожим, и я считаю, что решил просто изменить пользовательский запуск IIS на Администратор, но это, вероятно, не рекомендуется.

Конечно, это не имеет значения, если вы не используете IIS, но я оставлю это здесь на всякий случай.

0

Другие решения

При тестировании экзотического кода файл python.exe был перезаписан и непригоден для использования.
Код в первоначальном посте был почти верным. Виноват.

Для любопытных людей это мой окончательный код с легко использовать функция

createPDF.bat

@echo off
set arg1=%1
set arg2=%2

cd "C:\Program Files (x86)\OpenOffice 4\program\"
python.exe "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf -o %arg2% %arg1%

createPDF.php

function createPDF($from, $to)
{
//Launch the .bat, do not forget the double backslash
$handle = popen("start /B path\\to\\createPDF.bat ".$from." ".$to, "r");

//Debug if needed
//echo "'$handle'; " . gettype($handle) . "\n";
//$read = fread($handle, 2096);
//echo $read;

//Close the socket
pclose($handle);
}

И теперь, когда мне нужно конвертировать файл ODT в PDF, я просто должен сделать следующее

test.php

include_once($_SERVER['DOCUMENT_ROOT']."path\to\createPDF.php");

//createPDF(source, destination), do not forget the double backslash (\\)
createPDF("E:\\A\\strange\\path\\to\\Report.odt" , "D:\\Final_report");
0

По вопросам рекламы [email protected]