php exec или pro_open C # exe OutOfMemoryException , CLI OK

Среда: Win10 64bit, WAMP3.0.6 64bit (PHP v7.0.10, apache v2.4.23), ppt2png.exe (написанный на C #, приложение PowerPoint для Call dcom)

1.php код: exec (ppt2png.exe, в ppt, вне pngs).

<?php
//echo exec('whoami');
$cmd="D:\wamp64\www\convert\application\convert\util/../bin/ppt2png/ppt2img.exe D:\wamp64\www\convert\application\convert\util/../convert_tmp/ppt/ba228be6f2cfa6a6bc2a66878afacb662018-01-15-15-04-57-7206.pptx -t png -o D:\wamp64\www\convert\application\convert\util/../convert_tmp/png/ba228be6f2cfa6a6bc2a66878afacb662018-01-15-15-04-57-7206";
exec($cmd, $output, $status);
//var_dump($status);
var_dump($output);

// pro_open($cmd);

function pro_open($cmd)
{
$cmdErrorTxt = "error-output.txt";
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", $cmdErrorTxt, "a"),
);

$process = proc_open($cmd, $descriptorspec, $pipes);

if (is_resource($process)) {

fwrite($pipes[0], '<?php print_r($_ENV); ?>');
fclose($pipes[0]);

echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);

return $return_value;
}
return 0;
}

2.c # ppt2png.exe код

static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine(@"Usage: ppt2img <ppt|pptx> [options]
Option:
-t|--type <png|jpg>
-o|--output <dir>");
return;
}

try
{
for (int i = 0; i < args.Length; ++i)
{
if (args[i] == "--type" || args[i] == "-t")
{
++i;
imgType = args[i];
}
else if (args[i] == "--output" || args[i] == "-o")
{
++i;
outDir = args[i];
}
else if (inPpt.Length == 0)
inPpt = args[i];
else
throw new Exception("Unknow option '" + args[i] + "'");
}
}
catch (Exception e)
{
Console.WriteLine("Invalid args");
Console.WriteLine("{0}", e.Message);
return;
}

outDir = Path.GetFullPath(outDir);
inPpt = Path.GetFullPath(inPpt);
baseName = Path.GetFileNameWithoutExtension(inPpt);

Type officeType = Type.GetTypeFromProgID("Powerpoint.Application");

if (officeType == null)
{
// Powerpoint is not installed.
// Show message or alert that Powerpoint is not installed.
}
else
{
// Powerpoint is installed.
// Continue your work.
}

Microsoft.Office.Interop.PowerPoint.Application PowerPoint_App = new Microsoft.Office.Interop.PowerPoint.Application();
Microsoft.Office.Interop.PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations;
Microsoft.Office.Interop.PowerPoint.Presentation presentation = multi_presentations.Open(inPpt,
MsoTriState.msoTrue /* ReadOnly=true */,
MsoTriState.msoTrue /* Untitled=true */,
MsoTriState.msoFalse /* WithWindow=false */);

int count = presentation.Slides.Count;
for (int i = 0; i < count; i++)
{
Console.WriteLine("Saving slide {0} of {1}...", i + 1, count);
string fmtI= i.ToString("000");
String outName = String.Format(@"{0}\slide_{2}.{3}", outDir, baseName, fmtI, imgType);
try
{
presentation.Slides[i + 1].Export(outName, imgType, width, height);
}
catch (Exception e)
{
Console.WriteLine("Failed to export slide {0}", i + 1);
Console.WriteLine("{0}", e.Message);
break;
}
}

PowerPoint_App.Quit();

Console.WriteLine("Done");
}

Это правильно при выполнении в cmd.

выполняется только в cmd

выполняется в cmd php cli

Но неправильно, когда выполняется браузером (когда веб-сервер — Apache или IIS), выбрасывая исключение OutOfMemoryException.

error-output.txt содержит «необработанное исключение: OutOfMemoryException.».

Журнал C # указывает, что программа C # останавливается на

Microsoft.Office.Interop.PowerPoint.Application PowerPoint_App = new Microsoft.Office.Interop.PowerPoint.Application();

Но когда веб-сервером является Nginx, такого исключения нет, оно срабатывает.

Кто может дать мне несколько советов? большое спасибо!

-3

Решение

Это не проблема PHP. Это проблема с программой ppt2png.exe. Вероятно, это слишком большой файл PPT или что-то в этом роде, но вам следует обратиться за помощью к первоначальному автору этой программы.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector