我有一个可以在服务器上下载和安装的Web应用程序。
我不知道有问题的服务器,我所能做的就是假设,所以让我们这样做。
服务器位于共享主机上 没有作曲家 无法安装像npm这样的东西 用户不知道CLI是什么
因此,考虑到这一点,我创建了一个PHP脚本,它将下载编写器,然后安装依赖项。
该脚本只使用exec()
问题在于,为了安装依赖项,根文件夹需要是可写的,因为Apache不拥有该目录,并且有人指出这是一个安全漏洞。
我需要找出一种从apache安装依赖项的方法。不确定这是否可行,但感谢任何帮助。
以下是我下载编写器并安装依赖项的代码:
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
安装到其中并从那里调用它。
答案 0 :(得分:1)
使下载的代码包含依赖项。这样可以避免在无法控制的环境中调用Composer。
另外,这样做没有任何好处,因为你想要调用composer install
,它将始终安装锁定在composer.lock
中的版本 - 如果需要,还会失败。不符合包,如错误的PHP版本或缺少扩展名。无论如何,这是你必须解决的问题,但你提出的代码不会以任何方式真正帮助用户。
所以请使用包含所有依赖项的更大的可下载软件包。这样您就知道所有需要的代码都在那里,而不必担心在可卸载的环境中安装Composer。
但请注意,您不应该在存储库中包含管理自己代码的依赖项。你应该有一些包装和发布脚本,通过添加自己的代码和Composer安装的代码来创建下载ZIP。