我在Windows Server 2012上通过Apache(WAMP)执行VBScript时遇到问题。我正在尝试将Docx转换为PDF,并且脚本从命令行运行完美,但在运行PHP时失败。我将提供一个指向它的链接:http://bit.ly/1gngYAn
,而不是发布vbscript当通过PHP执行如下操作时,WINWORD.exe启动,就像VBScript一样,它挂起并没有任何反应。没有生成PDF(我从未在目录中看到~story.docx隐藏文件)。
我几乎尝试了exec,system,passthru和COM('WScript.Shell')的每一次迭代,并且都有相同的结果。
为了避免“转义”问题,我还尝试通过.bat文件执行脚本,因此不需要传递参数,结果也一样。
这是我目前的php代码(convert.vbs是上面链接中的代码):
$obj = new COM ( 'WScript.Shell' );
$obj->Run ( 'cmd /C wscript.exe //B C:\Users\Administrator\Desktop\convert.vbs c:\wamp\www\fileconv\temp_store\52fa8272bf84f.docx', 1, false );
//I have tried different "window styles" too, and it doesn't make a difference
我还尝试修改apache服务用户以管理员身份运行(这不是生产服务器),并启用“允许服务与桌面交互”,并且结果相同。
我还确保每个人都有“完全控制”目录(阅读,写作,执行等)。
如果我从命令行或使用“.bat”文件运行,它会运行得很好。
由于它挂起(脚本和单词,而不是apache),我在控制面板中查看了事件查看器,但没有相关的事件。
我的问题首先是,为什么会发生这种情况,其次,如果第一个问题无法解决,是否有一种方法可以让我更深入地了解执行过程时发生的情况,以便进一步排除故障它?截至目前,我没有要检查或输出的数据,以帮助我排除故障。
请随时询问任何细节。我尝试了很多次迭代试图让它工作,搜索高低,似乎无法得出任何答案。
感谢您的协助,
路易斯
答案 0 :(得分:2)
我花了几天时间,但这是我找到的解决方案:
我使用了PsExec - http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
需要以下标志: -h -i -accepteula -u -p
(我试过没有-h,-accepteula和-i,但没有骰子。这是在WAMP下的Windows Server 2012上运行的)
以下是一个例子:
exec('c:\psexec\PsExec -h -i -accepteula -u Administrator -p '.$password.' C:\Windows\System32\CScript.exe //Nologo //B c:\wamp\www\fileconv\convert.vbs '.$filename)
现在它按预期正确执行。
我希望这可以帮助处于相同情况的人!
PS我在问题中使用的WScript.Shell
执行方法与exec()
一样,除了exec()
等待进程退出。
答案 1 :(得分:0)
你应该使用exec()函数 这是网址http://php.net/manual/fr/function.exec.php