php 未被识别为内部或外部命令,尽管它在命令行中可用

php 未被识别为内部或外部命令,尽管它在命令行中可用

当谈到“我应该把它放在哪里?”时,这是一个有点棘手的问题,但我认为这背后有一个普遍的问题,这就是为什么我把它放在超级用户身上。

我有一个 Doctrine 脚本,通过调用以下命令在 php 文件中执行:

exec('bin\doctrine.php.bat dbal:import import_data/mssql_data.sql'.' 2>&1', $output);

由于我将错误从 STDERR 传输到 STDOUT 并将其保存在 $output 中,因此我收到错误消息。

执行脚本得到以下结果:

php is not recognized as an internal or external command

虽然我已将其添加到我的系统 PATH 变量中:

(...)C:\Program Files\Microsoft\Web Platform Installer\;C:\PHP

C:\PHP 是正确的路径,并且不包含此处提到的尾随“\”:php 未被识别为内部或外部命令(Windows 7)

另外,我可以使用“php someFile.php”从 CMD 手动执行 php 脚本,没有任何问题。因此,我认为 PATH 已正确调整。

为确保万无一失,我也重新启动了机器,但结果没有改变。

我意识到这可能是一个教义错误,但由于错误消息看起来像一个一般的系统问题,我希望在这里找到帮助。

目前我有点无能为力,只能假设,由于脚本是由 php 执行的,因此它以系统用户身份运行,因此无法访问 PATH 变量。但据我所知,这仅适用于“普通”环境变量,因为它们是“每个用户”存储的。PATH 是一个系统变量,因此任何运行脚本的用户都应该可以访问,所以这应该无关紧要。对吗?

系统是Windows Server 2012 R2。

非常感谢任何建议和帮助!

答案1

在无法找到解决方案之后,我们继续将 PHP 路径传递给 Doctrine 批处理脚本:

例如: exec("bin\doctrine.php.bat \"".PHP_PATH."\php.exe\" orm:generate-proxies");

然后我们修改 doctrine.php.bat 如下: @ECHO OFF SET BIN_TARGET=%~dp0/../doctrine/orm/bin/doctrine.php %1 "%BIN_TARGET%" %2 %3 %4 %5

在执行 doctrine 之前,只需添加我们的 PHP_PATH 作为第一个参数。

因此,PHP 是否被识别为在路径中并不重要。绝对路径虽然丑陋,但它可以工作...

相关内容