我正在尝试将ppt文件上的幻灯片转换为PNG文件,但我的代码有问题。
在本地测试中,脚本停留在此行:
$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint");
然后显示"Maximum execution time of 30 seconds exceeded";
当我进入我的实时服务器时,该脚本第一次工作,但随后显示错误
“致命错误:未捕获异常'异常',消息'无法关闭ppt文件1251.pptx。'
我在Windows服务器上,我觉得我使用ppt进程的方式有问题。
以下是代码:
$ppApp = new COM("PowerPoint.Application") or die ("Unable to instantiate PowerPoint");
$ppApp->Visible = True;
$strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"])));
$ppName = $jobQuery['id'].".pptx";
$FileName = "MyPP";
//*** Open Document ***//
$ppApp->Presentations->Open(realpath($ppName));
//*** Save Document ***//
$p_opned = $ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
//$ppApp->ActivePresentation->SaveAs(realpath($FileName),17);
$ppApp->Quit();
$ppApp = NULL;
unset($ppApp);
感谢您的帮助。
答案 0 :(得分:0)
我认为您的问题可能出在您的保存位置,或者只是找不到您的文件,您确定您尝试保存的位置实际存在,因为您的代码我不太确定吗?
$strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"])));
应该是:
$strPath = realpath(dirname(__FILE__));
您确定该文件确实存在于以下位置:
$ppName = $jobQuery['id'].".pptx";
检查:
file_exists($ppName)
在这里查看类似的问题:Fatal Error in convert PPT to PNG in PHP
修改强>
尝试以下操作,我认为你的$ p_opned保持引用对你的$ ppApp对象开放,因此你的实例没有被正确删除。
//*** Save Document ***//
$ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
编辑2:
根据要求尝试包装您认为导致异常的行(所以假设它是这一行):
try {
//*** Save Document ***//
$ppApp->ActivePresentation->SaveAs($strPath."/".$jobQuery['id']."_".$FileName,18);
} catch (Exception $e) {
echo 'Exception message: ', $e->getMessage(), "\n";
}
虽然再次查看您的错误消息,但它指的是您尝试打开的原始文件(1251.pptx),因为您尝试使用不同的修补程序保存文件(在代码中未提及)
如果以上操作不起作用,您可以尝试在“打开”脚本行周围包装Exception try / catch,或者也可以在退出之前尝试添加:
$ppApp->ActivePresentation->Close();
如果您的错误是因为Powerpoint在第一次调用实例后仍然处于闲置状态,那么它必定是因为您仍然在某处存在引用,所以请尝试检查所有代码。如果仍然出现错误,您应该在问题中包含FULL错误消息并从您的问题中删除Max执行错误消息这实际上不是问题(我假设您仍然没有得到“超过30秒的最大执行时间“消息了?”。
最后,您可以随时尝试使用PowerPoint库: