PHP exec 输出与命令行输出不同?
PHP exec output differs from Command line output?
上下文:
我有一个简单的 html 前端,允许用户输入一些基本细节,例如要使用的颜色。然后将其放置在我的 strings.xml 文件中,以便我们可以快速推出预览版本。 Windows 10 64 位 运行 WAMP,构建 Gradle 3.6.
目标:
使用 PHP.
从命令行构建更新的应用程序
问题:
当我通过命令行手动构建时项目构建正确,但是当我使用 PHP 的 exec 函数时构建失败。
必须从基础项目文件夹执行 gradle 包装器,因此需要 cd
...
首先我清理项目,所以我这样做:cd path/to/projectdir && gradlew clean 2>&1
哪个按 exec 和命令行的预期工作。
接下来是用 cd path/to/projectdir && gradlew assemble 2>&1
构建。
运行 以上通过命令行 returns 成功:
然而,运行与exec('cd path/to/projectdir && gradlew assemble 2>&1', $output)
相同,打印输出returns:
...[24] => FAILURE: Build failed with an exception.
[25] =>
[26] => * What went wrong:
[27] => Execution failed for task ':app:processDebugResources'.
...(完整输出https://pastebin.com/zdeXuukp)
据我所知,两者之间的唯一区别是进程所有者(基于 exec('whoami'))。
知道这是否可能是它失败的原因,或者还有什么可能导致 PHP exec 构建失败?
经过多方挖掘,我的怀疑得到了证实,确实是因为apache用户的权限不正确。
这是答案:
在这种情况下,我只是在我的本地机器上玩玩,显然不会在生产环境中推荐这种方法,无论如何,这是我解决它的方法:
- 关闭 WAMP。
- 打开services.msc(win+rservices.msc)
- 更改 wampapache64、wampmariadb64 和 wampmysqld64 右键单击>属性>登录选项卡并指定一个用户帐户以启动服务(我使用我的用户帐户,因为我知道它已经具有正确的权限)并应用更改。
- 打开 WAMP。
- 使用简单的
echo exec('whoami')
通过浏览器访问 PHP 页面现在应该直接在命令行中输出与 运行ning whoami
相同的结果。
我的脚本现在可以正确执行并返回与通过命令行 运行 时相同的输出。
上下文: 我有一个简单的 html 前端,允许用户输入一些基本细节,例如要使用的颜色。然后将其放置在我的 strings.xml 文件中,以便我们可以快速推出预览版本。 Windows 10 64 位 运行 WAMP,构建 Gradle 3.6.
目标: 使用 PHP.
从命令行构建更新的应用程序问题: 当我通过命令行手动构建时项目构建正确,但是当我使用 PHP 的 exec 函数时构建失败。
必须从基础项目文件夹执行 gradle 包装器,因此需要 cd
...
首先我清理项目,所以我这样做:cd path/to/projectdir && gradlew clean 2>&1
哪个按 exec 和命令行的预期工作。
接下来是用 cd path/to/projectdir && gradlew assemble 2>&1
构建。
运行 以上通过命令行 returns 成功:
然而,运行与exec('cd path/to/projectdir && gradlew assemble 2>&1', $output)
相同,打印输出returns:
...[24] => FAILURE: Build failed with an exception.
[25] =>
[26] => * What went wrong:
[27] => Execution failed for task ':app:processDebugResources'.
...(完整输出https://pastebin.com/zdeXuukp)
据我所知,两者之间的唯一区别是进程所有者(基于 exec('whoami'))。 知道这是否可能是它失败的原因,或者还有什么可能导致 PHP exec 构建失败?
经过多方挖掘,我的怀疑得到了证实,确实是因为apache用户的权限不正确。 这是答案:
在这种情况下,我只是在我的本地机器上玩玩,显然不会在生产环境中推荐这种方法,无论如何,这是我解决它的方法:
- 关闭 WAMP。
- 打开services.msc(win+rservices.msc)
- 更改 wampapache64、wampmariadb64 和 wampmysqld64 右键单击>属性>登录选项卡并指定一个用户帐户以启动服务(我使用我的用户帐户,因为我知道它已经具有正确的权限)并应用更改。
- 打开 WAMP。
- 使用简单的
echo exec('whoami')
通过浏览器访问 PHP 页面现在应该直接在命令行中输出与 运行ningwhoami
相同的结果。
我的脚本现在可以正确执行并返回与通过命令行 运行 时相同的输出。