在php中将参数传递给bat(或vbs)

时间:2012-07-05 15:31:08

标签: php vbscript batch-file

目标:使用PHP调用将xls / xlsx文件转换为csv的vbs。

问题:如何将源文件路径和目标文件路径传递给将xls / xlsx转换为csv并在PHP Web应用程序中运行该vbs的vbs?

详细信息:我有一个工作的vbs,它接受源文件路径和目标文件路径,并将源文件路径中的xls / xlsx转换为csv。我可以从Windows cmd行执行它,它完全符合我的要求。我还可以将执行命令放入bat文件并运行bat文件以获得相同的结果。但是,当我在PHP中使用exec()/ shell_exec()/ system()执行相同的命令时,不会创建csv。 (如果我尝试使用system()从PHP运行bat,bat文件的内容显示在页面上,实际上,echo Conversion complete!打印“echo Conversion complete!转换完成。”)我还没有看到任何还有错误。

注意:我了解PHPExcel,我不想使用它。

excelToCsv.vbs

On Error Resume Next
if WScript.Arguments.Count < 2 Then WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
Wscript.Quit
End If
csv_format = 6
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
oBook.SaveAs dest_file, csv_format
oBook.Close False
oExcel.Quit

batConverter.bat

excelToCsv.vbs conversionTestSourceMS2003.xls batTest.csv
echo Conversion Complete!

index.phtml

<?php
system("cmd /c batConvert.bat")
?>

注意:以上所有文件(以及conversionTestSourceMS2003.xls)都在同一目录中。我没有实现任何传递参数的方法(因为即使它都是硬编码的我也无法工作......)

设置: PHP5,Zend Framework,WAMP,Windows 7(localhost)。

1 个答案:

答案 0 :(得分:0)

为简单起见,我将所有内容合并到一个ASP页面中。这将允许我希望在IIS中看到类似的问题,并且由于它在单个ASP脚本中,我将能够更直接地看到错误。我的测试计算机在IIS7上使用Excel 2007 SP3在Windows Vista SP2上运行。

<强> excelToCsv.asp

<%

Option Explicit

Dim csv_format, src_file, dest_file, strPath, objFSO

csv_format = 6
src_file = "conversionTestSourceMS2003.xls"
dest_file = "testbat.csv"

strPath = "[HARDCODED PATH HERE]\"
src_file = strPath & src_file
dest_file = strPath & dest_file

Dim objExcel, objBook
Set objExcel = CreateObject("Excel.Application")

Set objBook = objExcel.Workbooks.Open(src_file)
objBook.SaveAs dest_file, csv_format
objBook.Close False

Response.Write "Conversion Complete!"
objExcel.Quit

%>

运行此代码时,我遇到了一般ASP错误。所以,我启用了detailed error messages in ASP,我收到了以下错误...

  

Microsoft Office Excel错误“800a03ec”

     

Microsoft Office Excel无法访问文件'[HARDCODED PATH   HERE] \ conversionTestSourceMS2003.xls'。有几种可能   原因:•文件名或路径不存在。 •文件正在   由另一个程序使用。 •您要保存的工作簿具有   与当前打开的工作簿同名。

     

/temp/ExcelToCsv.asp,第18行

现在,这不是Apache,但我相信这个问题与你的问题有关。此错误意味着存在安全/权限问题,其中Excel无法执行访问或读取文件所需的操作。事实上,当我从PHP(在IIS中)执行VBScript(并将错误传递给链)时遇到了类似的错误。

我相信可以通过更改用于创建流程的Windows用户来解决此问题。这可以通过编辑Apache服务并将Log On选项卡更改为实际的Windows用户而不是服务帐户来在Services.msc中进行配置。我还没有测试过,因为设置Apache不是我现在可以做的事情。

相关问题