当前位置: 首页 > 知识库问答 >
问题:

PHP exec()不与Windows环境变量的一些工作

龚俭
2023-03-14

我试图用exec()运行PHP中的几个命令,它似乎只适用于我的windows环境变量中定义的一些命令,但不适用于所有命令。
在命令提示符中,我可以从任何路径(C:\或E:\无论)

> pear -V     // ... "PEAR Version: 1.9.5" ...
> dot -V      // dot - graphviz version 2.38.0 (20140413.2041)
> phpdoc -V   // phpDocumentor version 2.8.1

它们都为每个指定的程序返回正确的版本,这意味着环境变量配置良好。
但是在PHP中我只能运行一些命令,其余的都失败了:

$out = array();
$ret = '';

exec('pear -V', $out, $ret);
echo var_dump($out); // $ret = 0, $out = array ..."PEAR Version: 1.9.5" ...

exec('phpdoc -V', $out, $ret);
echo var_dump($out); // $ret = 1, $out = array ..."Could not open input file: \phpdoc" ...

exec('dot -V', $out, $ret);
echo var_dump($out); // $ret = 1, $out = empty array

那么,我是不是遗漏了什么?。

编辑:exec()工作正常,它适用于我的一些环境变量,如pear,cmd等,它不适用于上面指定的

phpdoc
点(图形)

即使它们在我的命令提示符上工作,并且在我的窗口环境中配置良好。

EDIT2:
@Stefan Cvetkovic I gues这是您希望在运行此命令时从结果中看到的部分

shell_exec(set):

Path=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1。0\;C:\ProgramFiles\TortoiseHg\;C:\ProgramFiles(x86)\UniversalExtractor;C:\ProgramFiles(x86)\Universal Extractor\bin;C:\xampp\php;路径文本=。通用域名格式;。EXE;。球棒CMD;。VBS;。VBE;。JS;。JSE;。WSF;。WSH;。移动交换中心

有没有可能php无法访问我的“点”路径,因为结果中缺少这一点:

...C:\xampp\php;C:\xampp\php\pear\phpDocumentor\vendor\graphviz\bin

点exe位于C:\xampp\php\pear\phpDocumentor\vendor\graphviz\bin中,配置良好,可以运行


共有3个答案

司徒高丽
2023-03-14

我会尝试在有问题的数组或变量上使用gettype

除此之外,我还将运行phpinfo(),查看您的服务器中是否启用了该项(或者我确定您已选中的php.ini?)。

在exec exec()和shell exechttp://php.net/manual/en/function.shell-exec.php上看到了一些有趣的注释,其中项需要管理员权限才能运行。也许它适用?

华景焕
2023-03-14

虽然晚了两年,但我发现自己也处于同样的境地,并找到了解决办法:

<?php
putenv('PATH=' . $_SERVER['PATH']);
$currentBranch = exec('git rev-parse --abbrev-ref HEAD');

由于未知原因,exec调用中缺少环境变量,

但是它确实存在于$\u服务器['PATH']中,代码只是将它放回原处,它就可以工作了

田宇
2023-03-14

我也有同样的问题。如果有人遇到同样的问题,请确保重新启动Web服务器(在我的设置中为apache),因为PATH变量是最近设置的,因此在设置变量之前启动的进程(httpd)不可用。

 类似资料:
  • 本文向大家介绍Windows Powershell 环境变量,包括了Windows Powershell 环境变量的使用技巧和注意事项,需要的朋友参考一下 传统的控制台一般没有象Powershell这么高级的变量系统。它们都是依赖于机器本身的环境变量,进行操作 。环境变量对于powershell显得很重要,因为它涵盖了许多操作系统的细节信息。此外,powershell中的变量只存在于powersh

  • 我在Windows10机器上运行Docker1.12.0。我正在开发一个Java程序,使用Maven 3.3.9作为依赖项管理器。我有一个maven docker插件(https://github.com/fabric8io/docker-maven-plugin),它在干净安装时会出现以下错误。 [ERROR]未能执行目标IO.fabric8:docker-maven-plugin:0.15.1

  • 变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等。 值得一提的是,Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范。 我们可以使用 env 命令来查看到 Linux 系统中所有的环境变量,执行命令如下: [r

  • Weex 环境变量 Weex 提供 WXEnvironment 用来获取 Weex 运行的环境变量,浏览 Weex 环境变量。 提供字段如下 platform (String) Current running platform, could be "Android", "iOS" or "Web". weexVersion (String) The version of Weex SDK. app

  • 我试图运行一个读取环境变量的应用程序,该环境变量包含大约22K个字符的JSON。项目设置告诉我使用来正确配置它,但是当我使用windows时,这些命令不起作用。 我尝试使用GUI环境变量将文件的内容复制到变量中,但是它的输入会将值截断到一定的限制,这个限制甚至不到文件的一半。在此之后,我尝试使用Powershell和以下命令设置变量: 然后用以下命令保存结果:

  • 环境变量 Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。这里有一些普遍适用的内建变量: import.meta.env.MODE: string 应用运行基于的 模式。 import.meta.env.BASE_URL: string 应用正被部署在的 base URL。它由 base 配置项 决定。 import.meta.env.PROD: boolean 应用是