当谈到“我应该把它放在哪里?”时,这是一个有点棘手的问题,但我认为这背后有一个普遍的问题,这就是为什么我把它放在超级用户身上。
我有一个 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 是否被识别为在路径中并不重要。绝对路径虽然丑陋,但它可以工作...