我有一个web应用程序,可以下载并安装在服务器上。
我不知道正在讨论的服务器,我所能做的就是假设,所以让我们这样做。
服务器在共享主机上没有作曲家不能安装npm之类的东西用户不知道命令行是什么
因此,考虑到这一点,我创建了一个PHP脚本,它将下载composer,然后安装依赖项。脚本只使用exec()
问题是,为了安装依赖,根文件夹需要是可写的,因为Apache不拥有这个目录,正如有人指出的那样,这是一个安全漏洞。
我需要找出一种方法来安装依赖从apache。不知道这是否可能,但任何帮助都是感激的。
下面是我下载composer和安装依赖的代码:
mkdir('composer', 0777);
exec('curl -sS https://getcomposer.org/installer | php -- --install-dir=' . __DIR__ . '/composer');
exec('COMPOSER_HOME=' . __DIR__ . ' php composer/composer.phar install -d ' . dirname(__DIR__), $out, $return)
上面的代码从/public
运行,并在其中创建一个名为composer
的目录。因为它属于apache,所以我可以将.phar
安装到其中并从那里调用它。
使下载的代码包含依赖项。这将避免在您无法控制的环境中调用Composer。
此外,这样做没有任何好处,因为您想调用composer install
,它将始终安装composer.lock
中锁定的版本-并且如果不满足包的要求,例如错误的PHP版本或缺少扩展,那么这样做将失败。这是你必须自己解决的问题,但你提出的代码无论如何都不会真正帮助用户。
所以使用包含所有依赖项的更大的可下载包。这样你就知道所有需要的代码都在那里,而不必担心在一个不可安装的环境中安装Composer。
但是请注意,您不应该将依赖项包含在管理您自己代码的存储库中。您应该有某种打包和发布脚本,通过添加您自己的代码和Composer安装的代码来创建下载zip。