从php exec或shell_exec运行java jar不适用于batik

从php exec或shell_exec运行java jar不适用于batik,java,php,iis-7,exec,Java,Php,Iis 7,Exec,我正在努力 exec(java -jar "C:\batik\batik-rasterizer.jar" -m image/png -d "C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 "C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg"); 它没有给我任何结果,任何人都能告诉我我做错了什么 计算机是windows 2008 R2企业版 iis 7

我正在努力

exec(java -jar "C:\batik\batik-rasterizer.jar" -m image/png -d 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg"); 
它没有给我任何结果,任何人都能告诉我我做错了什么

计算机是windows 2008 R2企业版 iis 7 使用fastcgi


exec('java-version')

您可能需要检查前后斜杠的路径

exec(java -jar "C:\batik\batik-rasterizer.jar" -m image/png -d 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg");
可以尝试正斜杠:

exec('java -jar "C:/batik/batik-rasterizer.jar" -m image/png -d 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg"');
或带参数路径的正斜杠:

exec('java -jar "C:/batik/batik-rasterizer.jar" -m C:/pathto/image/png -d 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg"');
exec('java -jar "C:\batik\batik-rasterizer.jar" -m C:\pathto\image\png -d 
"C:\pathtoimg\temp\2fa8af078803491746235057c546c1b6.png" -w 800 
"C:\pathtoimg\temp\2fa8af078803491746235057c546c1b6.svg"');
对不起,我想这是反斜杠

可以尝试反斜杠:

exec('java -jar "C:\batik\batik-rasterizer.jar" -m image\png -d 
"C:\pathtoimg\temp\2fa8af078803491746235057c546c1b6.png" -w 800 
"C:\pathtoimg\temp\2fa8af078803491746235057c546c1b6.svg"');
或带参数路径的反斜杠:

exec('java -jar "C:/batik/batik-rasterizer.jar" -m C:/pathto/image/png -d 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg"');
exec('java -jar "C:\batik\batik-rasterizer.jar" -m C:\pathto\image\png -d 
"C:\pathtoimg\temp\2fa8af078803491746235057c546c1b6.png" -w 800 
"C:\pathtoimg\temp\2fa8af078803491746235057c546c1b6.svg"');

正如Barkermn01所指出的,您的计算机是否关闭了UAC?(Windows 7或Vista,在没有UAC perms的情况下访问C:

其次,exec需要一个字符串输入

第三,正如菲尔所说,我们需要逃走

exec('java -jar "C:/batik/batik-rasterizer.jar" -m C:/pathto/image/png -d 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.png" -w 800 
"C:/pathtoimg/temp/2fa8af078803491746235057c546c1b6.svg"');
更新对PHILLS的评论

检查是否允许您使用CLI使用exec/system/backticks

  • 创建一个包含
    的php文件并保存它
  • 然后启动CMD
  • 打开一个新窗口(打开my/computer)并浏览到php.exe应用程序
  • 复制找到它的文件夹的地址
  • 在cmd中键入不带引号的“cd”,然后右键单击并单击pase,然后单击enter
  • 键入“php”(同样不带引号)将保存的php文件拖到cmd框中并将其放下
  • 然后按enter键,查看它是否在cmd框中显示hello

  • 如果这不起作用,请检查java是否在没有exe路径的情况下工作,在cmd窗口中键入您的
    java--help
    ,然后查看它是否工作

    它也不做任何事情wid exec('java-version');Java可执行文件是否在您的路径中?运行脚本的用户帐户是否具有对java目录的访问权限和对java.exe的执行权限?@Marc,java perms不需要将执行权限作为其系统内核,因此它应该具有除UAC之外的访问权限,以便进行异地访问,java应该将其自身添加到路径列表中,以便在没有完整路径的情况下运行。例如,可以从路径调用CMD中的echo,但其保存在%SysDrive%/windows/system32/@Barker中:是的,但是IIS用户在默认情况下拥有有限的权限,并且必须显式授予其对大多数内容的exec权限。同样,OP所做的不是系统内核调用。他正在使用PHP中对命令行.exe的exec调用。@Marc(IIS信息是新的),如果使用IIS,则是您的权利@sushil找到java.exe应用程序,右键单击它,然后单击“安全/权限”选项卡,将IIS用户添加到该应用程序,并将其“执行”设置为允许,然后您可能需要在IIS中执行某些操作,但marc似乎知道更多(IIS和php不是最好的)