在非标准位置使用composer和php


Using composer with php in non standard location

我正在尝试在我的NAS上使用composer(一个很好的旧D-Link DNS-23,运行非常好的fonz fun plug 0.7)。

我在/ffp/bin/php中安装了php。

当我使用以下命令安装composer时

 php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/ffp/sbin --filename=composer

但当我做一个简单的less /ffp/sbin/composer时,我有以下shebang集:

#!/usr/bin/env php
<?php
/*
 * This file is part of Composer.
 *

不幸的是,我的NAS上没有/usr/bin/env文件夹。。。那么,如何让composer引用正确的php可执行文件呢?

此外,我尝试将声明更改为使用#!/ffp/bin/php,但在这样做时,任何composer运行都会返回以下结果:

PHP Warning:  PHP Startup: Unable to load dynamic library '/ffp/lib/php/extensions/no-debug-non-zts-20100525/gd.so' - File not found in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/ffp/lib/php/extensions/no-debug-non-zts-20100525/gd.so' - File not found in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/ffp/lib/php/extensions/no-debug-non-zts-20100525/sqlite.so' - File not found in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/ffp/lib/php/extensions/no-debug-non-zts-20100525/sqlite.so' - File not found in Unknown on line 0
PHP Fatal error:  Uncaught exception 'PharException' with message 'phar "/mnt/HD_a2/ffp/sbin/composer" has a broken signature' in /mnt/HD_a2/ffp/sbin/composer:23
Stack trace:
#0 /mnt/HD_a2/ffp/sbin/composer(23): Phar::mapPhar('composer.phar')
#1 {main}
  thrown in /mnt/HD_a2/ffp/sbin/composer on line 23
Fatal error: Uncaught exception 'PharException' with message 'phar "/mnt/HD_a2/ffp/sbin/composer" has a broken signature' in /mnt/HD_a2/ffp/sbin/composer:23
Stack trace:
#0 /mnt/HD_a2/ffp/sbin/composer(23): Phar::mapPhar('composer.phar')
#1 {main}
  thrown in /mnt/HD_a2/ffp/sbin/composer on line 23

特别重要的是线路

PHP Fatal error:  Uncaught exception 'PharException' with message 'phar "/mnt/HD_a2/ffp/sbin/composer" has a broken signature' in /mnt/HD_a2/ffp/sbin/composer:23

我该怎么修?换句话说,如何在NAS上安装一个可工作的php+composer?

那么,如何让composer引用正确的php可执行文件呢?

一个非常简单的解决方案是创建一个shell脚本:

#!/bin/sh
/ffp/bin/php -n /ffp/sbin/composer "$@"

使其可执行,将其命名为composer,将其放在/ffp/sbin之前的路径中(或者将/ffp/sbin/composer重命名为composer.phar,并更新上面的脚本)。

-n标志告诉PHP不要使用php.ini。当从php.ini加载了许多扩展时,这很有用;不加载它们使CCD_ 12运行得更快。特别是xdebug建议而不是composer加载,以提高速度。