我想在文件夹内运行npm install
以安装一些节点模块等
如何在PHP脚本中做到这一点?我已经尝试了一堆东西,很明显,我不清楚实际问题;)
我试过以下方法:
shell_exec("npm install");
(Fails)
exec("npm install")
(失败与127错误,这意味着它不能找到脚本运行我认为)
任何想法?
有两个问题需要处理:
-
确保PHP运行exec()命令的用户具有正确的权限。
在同事的帮助下,我能够确定要设置的正确权限。我调用exec("whoami")
以查看PHP正在使用apache
用户,然后SSH到vagrant并执行以下操作:
cd /var
sudo chown apache:apache www
然后我可以通过运行
来确保我的用户被授予权限ls -l
结果摘录如下。您可以看到www
文件夹对apache
drwxr-xr-x. 8 root root 4096 Nov 30 2015 spool
drwxrwxrwt. 4 root root 4096 Oct 27 15:48 tmp
drwxr-xr-x. 5 apache apache 4096 Jul 18 11:24 www
drwxr-xr-x. 2 root root 4096 Sep 23 2011 yp
下面是我现在能够通过PHP成功运行的代码:
exec("HOME='".$_SERVER['DOCUMENT_ROOT']."' && cd ./../tmp && npm install", $output, $status);
我建议你尝试使用npm的整个路径。它可以在Unix系统上通过运行
找到。which npm
必须确保将npm
添加到系统路径中。在windows上可以通过打开
此pc -> 系统属性 -> 高级系统设置 -> 进入选项卡高级设置 -> 环境变量然后编辑PATH
我的安装是在C:'Program Files (x86)'nodejs'
下找到的,所以我添加了它。然后重新启动php应用程序(确保在更改了PATH之后重新打开了进程/IDE),这样就可以完成