【问题标题】:running java jar from php exec or shell_exec isnt working for batik从 php exec 或 shell_exec 运行 java jar 不适用于 batik
【发布时间】:2011-05-27 15:51:56
【问题描述】:

我正在努力做

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')

【问题讨论】:

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

标签: java php iis-7 exec


【解决方案1】:

您的计算机是否关闭了 UAC? (Windows 7 或 Vista,在没有 UAC 权限的情况下访问 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"');

已更新对菲尔斯的评论

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

  1. 创建一个包含<?php exec("echo hello"); ?>的php文件保存
  2. 然后启动CMD,
  3. 打开一个新窗口(打开我的/计算机)并浏览到您的 php.exe 应用程序
  4. 复制找到它的文件夹的地址
  5. 在 cmd 中键入不带引号的“cd”,然后右键单击并单击 pase,然后按 Enter 键
  6. 键入“php”(再次不带引号)将保存的php文件拖到cmd框中并放下它
  7. 然后按回车键,看看它是否在 cmd 框中打招呼

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

【讨论】:

    【解决方案2】:

    您可能需要检查正斜杠和反斜杠的路径

    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 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 指出 exec() 需要一个字符串输入

    【讨论】:

    • 它也没有做任何事情 wid exec('java -version');
    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2013-04-11
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多