【问题标题】:About exec() function in PHP关于 PHP 中的 exec() 函数
【发布时间】:2011-11-25 15:36:23
【问题描述】:

我需要一些关于使用 PHP 脚本执行 .exe 文件的小信息。我读到可以使用 exec() 或 passthru() 或 echo system() 执行 .exe 文件。

是否可以运行存储在我的 Windows 机器上的 .exe 文件,比如 C: 目录,或者应该将 .exe 文件存储在 Web 服务器上以通过 php 脚本运行它。

如果是这样,我需要将 .exe 文件的路径提供给 exec() 函数,例如: file.exe 存储在 C:\Programs\mydocs\file.exe 上。

我可以将此路径存储在变量中吗

$path =  C:\Programs\mydocs\file.exe;

并像 echo exec($path); 一样传递它

问题一大堆,想知道PHP专业人士的看法。

谢谢

【问题讨论】:

  • 这就是“编译器即服务”的意思吗?将您的代码放到互联网上并询问人们它是否可以工作?试了怎么办?
  • @CodeCaster - 显然它无论如何都行不通:)。但是编译器即服务倾向于依赖沙盒......

标签: php exec


【解决方案1】:

是否可以运行存储在我的 Windows 机器上的 .exe 文件,比如 C: 目录,或者应该将 .exe 文件存储在 Web 服务器上以通过 php 脚本运行它。

PHP 只能在运行它的服务器上执行文件(它还必须具有正确的权限才能这样做)。

如果您正在尝试做我认为您正在尝试做的事情,即在用户的机器上执行命令,那么阻止某人使用的方法是:

exec('format c:');

然后格式化访问者的 C 盘?


我可以将此路径存储在变量中吗

$path = C:\Programs\mydocs\file.exe;

并像 echo exec($path); 一样传递它

这会给你一个语法错误,你需要引号:

$path = 'C:\Programs\mydocs\file.exe';

【讨论】:

  • @ChristianSciberras 为什么不呢?
  • 为什么不格式化驱动器?如果这就是开发人员想要的,为什么不呢?
  • @ChristianSciberras 我编辑了这个问题,希望它更容易理解我的观点。
【解决方案2】:

不,您的示例是语法错误

是的,如果你引用字符串:-

$path = 'C:\Programs\mydocs\file.exe';

【讨论】:

    【解决方案3】:

    您的问题并不完全清楚您的 PHP 脚本到底在哪里运行。如果它在不是您的工作站的网络服务器上运行,那么很简单;您无法通过在不同服务器上运行的 PHP 打开本地应用程序。您希望启动的应用程序必须与 PHP 脚本位于同一台服务器上。

    也就是说,如果您希望在本地工作站或服务器上运行应用程序,那么很简单:

    exec('C:\path\to\program.exe');

    确保使用单引号 ('C:\path\to\program.exe') 或带双引号的双反斜杠 ("C:\path\to\program.exe")。在这种情况下,单引号更有效,更合适。

    【讨论】:

      【解决方案4】:

      如果你使用引号,你可以像变量一样存储路径,在另一种情况下(没有引号)会显示语法错误。 尝试以下两种语法:

      $path = 'C:\Programs\mydocs\file.exe';
      

      或双引号

      $path = "C:\Programs\mydocs\file.exe";
      

      【讨论】:

        【解决方案5】:

        您只能执行该文件,前提是它位于服务器计算机上并且服务器进程具有访问/执行它的适当权限。您不能在远程用户机器上执行文件。

        【讨论】:

          【解决方案6】:

          根据服务器上的安全系统*,您可能能够为所欲为。

          但是,考虑到您对 PHP 的语法了解不多,我怀疑您应该玩弄exec()

          *例如 suexecchrooting apache,或 在 PHP 上启用安全模式 或将其作为 单独的服务运行(在窗户)。您是否注意到很多事情都可能出错?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-20
            • 2023-04-09
            • 1970-01-01
            • 2011-11-25
            • 1970-01-01
            • 2016-09-20
            • 2017-07-17
            • 2011-06-06
            相关资源
            最近更新 更多