PHP调用COM("word.application")不稳定~求指教

Zack0Fair 2015-10-23 10:29:21
最近写网站遇到一个麻烦的需求就是
用户 上传 WORD文档 然后统计文档中【字数】【字符数(不计空格)】两项数值

由于客户一再要求 要和用office word 打开后统计字数中的信息完全一致,所以想到了用PHP调用com组件这个方法。

上传后 处理文件代码如下

           $word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Open(realpath($file));//realpath($file)文件路径
$content = (string) $word->ActiveDocument->Content;
//$num= (int) $word->ActiveDocument->BuiltinDocumentProperties(15);
//dump('1------:'.$num);
//exit;此处$num读取出来的结果 一直为1
$word->ActiveDocument->Close(false);
$word->Quit();
$word = null;
unset($word);


由于不知道什么原因 BuiltinDocumentProperties(15)读取的数值一直为1 所以想到用上面的方法 先把文件中的内容读取到$content中 然后再 利用一次word组件分析字符数代码如下

function StatisticWordsCount($text='',&$num,&$words)
{//$text为上面读出的$content内容

$word = new COM("word.application") or die ("Could not initialise MS Word object.");
$word->Documents->Add();

//4K读取
$len = strlen($text);
$my = 0;
while($my != $len)
{
if(($my + 4096) < $len)
{
$str2 = substr($text,$my,4096);
$word->Selection->TypeText($str2);

$word->Selection->TypeParagraph();
$my = $my+4096;
}
else
{
$str2 = substr($text,$my);
$word->Selection->TypeText($str2);
$word->Selection->TypeParagraph();
$my = $len;
}

}

$words = (int) $word->ActiveDocument->BuiltinDocumentProperties(15);
$word->ActiveDocument->Close(false);
$word->Quit();
$word = null;
unset($word);

$text = str_replace(str_split('|'),'',$text);//remove these chars
$text = str_replace(str_split('-'),'',$text);
$text = trim(preg_replace('/\s+/','',$text));
$text = preg_replace('/-{2,}/','',$text);

if($num=iconv_strlen($text, 'utf-8'))
{
return $num;
}
else
{
$num = iconv_strlen($text, 'gbk');
return iconv_strlen($text, 'gbk');
}

}


用上面的方法可以正常读取【字数】【字符数(不计空格)】两项数值

但是遇到了一个问题 ,当把程序放在服务器上运行
刚开始 上传word文件 分析字数 一切正常
但是服务器开启一段时间(时间不确定 有时几十分钟就会出现 有时1天左右才出现错误)
会出现 【'Failed to create COM object `word.application'的错误】
然后就不能正常分析字数
此时重启wamp则恢复正常。


求大神帮忙解决下这个问题~~~·或者是否有其他思路解决这个需求 谢谢

系统环境:windows server2008 standard【阿里云】
word2007
WAMP
-apache 2.4.9
-php 5.5.12
-mysql 5.6.17
框架thinkphp3.1
...全文
339 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zack0Fair 2015-10-23
  • 打赏
  • 举报
回复
刚发现 不用重启wamp 用远程桌面连接服务器 就恢复正常 一旦关闭远程桌面 Failed to create COM object 感觉是权限方面的原因 - -有没有人求帮助
NBSstudio 2015-10-23
  • 打赏
  • 举报
回复
而且國外有PHP處理Word文檔的API 比com穩定
NBSstudio 2015-10-23
  • 打赏
  • 举报
回复
服務器最好用xampp然後用運營配置不要用調試配置,PHP版本最好5.5至5.6
傲雪星枫 2015-10-23
  • 打赏
  • 举报
回复
是否只有远程桌面的帐号才有权限调用呢? 可以设置这个wamp帐号是这个试试。

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧