V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
edk24
V2EX  ›  PHP

PHP composer 安装 thinkphp 报错问题, 求助(急)

  •  
  •   edk24 · 2020-10-28 10:55:58 +08:00 · 4327 次点击
    这是一个创建于 1247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务器以前有个 php5.4, 后面加了个 php7.3

    用 composer 自动定位 5.4, 导致我 tp5.1 无法安装依赖, 现在用网上这个方式安装。 其他都 ok 了。 tp 却安装不上了

    着急。。。

    [root@yunguizhou star]# /usr/local/php/bin/php composer.phar install
    Do not run Composer as root/super user! See https://getcomposer.org/root for details
    Continue as root/super user [yes]? yes
    Installing dependencies from lock file (including require-dev)
    Verifying lock file contents can be installed on current platform.
    Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. It is recommended that you run `composer update` or `composer update <package name>`.
    Package operations: 1 install, 0 updates, 0 removals
      - Downloading topthink/framework (v5.1.40)
      - Installing topthink/framework (v5.1.40): Extracting archive
        Failed to extract topthink/framework: (9) unzip -qq  '/home/wwwroot/star/vendor/composer/tmp-7ea691416e557dbb8cb8858815b4c4ef' -d '/home/wwwroot/star/vendor/composer/bd3e9c7b'
                                                                                                                                                                                                                         
    unzip:  cannot find or open /home/wwwroot/star/vendor/composer/tmp-7ea691416e557dbb8cb8858815b4c4ef.                                                                                                                 
                                                                                                                                                                                                                         
        This most likely is due to a custom installer plugin not handling the returned Promise from the downloader
        See https://github.com/composer/installers/commit/5006d0c28730ade233a8f42ec31ac68fb1c5c9bb for an example fix
    Package endroid/qrcode is abandoned, you should avoid using it. Use endroid/qr-code instead.
    Package zendframework/zend-escaper is abandoned, you should avoid using it. Use laminas/laminas-escaper instead.
    Generating autoload files
    10 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    
    
    31 条回复    2020-10-29 14:41:14 +08:00
    dilu
        1
    dilu  
       2020-10-28 11:12:03 +08:00
    你这个错怎么看都不像是因为 php 版本报出来的啊

    加上 --no-plugins 参数试试?
    edk24
        2
    edk24  
    OP
       2020-10-28 11:13:27 +08:00
    已解决,composer 版本太新,换成 1.10x 就可以了。去 composer 官网下载低版本的
    edk24
        3
    edk24  
    OP
       2020-10-28 11:13:43 +08:00
    @dilu 已解决,谢谢
    Seanfuck
        4
    Seanfuck  
       2020-10-28 11:36:04 +08:00
    真是时代变了,我还是喜欢手工下载代码解压,php 用什么鬼 composer,就跟 js 用什么鬼 npm 一样,一堆问题,没见什么优点。
    skymei
        5
    skymei  
       2020-10-28 11:37:42 +08:00
    @Seanfuck 那你确实是老了,composer 让 PHP 的包管理好用不少
    agdhole
        6
    agdhole  
       2020-10-28 11:39:07 +08:00
    @Seanfuck #4 现代开发包管理都是必备了吧
    Seanfuck
        7
    Seanfuck  
       2020-10-28 11:46:30 +08:00
    @skymei 但这个没有手工的可靠
    Mitt
        8
    Mitt  
       2020-10-28 11:53:10 +08:00   ❤️ 1
    @Seanfuck #4 “一堆问题” 莫名其妙,就跟 linux 装个啥软件都网上一堆教程教你如何手工编译安装一样,人家本来就有稳定版的包 apt install 就装完了还非得自己编译出一堆问题怪 linux 太复杂,除非有需要,否则谁还会把时间浪费在这上面
    Mitt
        9
    Mitt  
       2020-10-28 11:55:43 +08:00
    “unzip: cannot find or open /home/wwwroot/star/vendor/composer/tmp-7ea691416e557dbb8cb8858815b4c4ef.” 这一行报错最主要,要么就是下载失败了,要么就是文件占用权限问题,降级 composer 应该是顺便清了缓存所以才好的,应该多花点时间了解一下具体原因的,千万不要直接甩锅
    hbolive
        10
    hbolive  
       2020-10-28 11:57:04 +08:00   ❤️ 1
    Composer 实现了一键包安装、版本依赖解析、自动加载,是现代 PHP 的基石。从此 PHP 迎来了大统一时代。如今,不仅是框架,任何 PHP 项目,都可以使用 Composer 安装项目所需要的库包。
    Seanfuck
        11
    Seanfuck  
       2020-10-28 13:54:40 +08:00 via iPhone
    @Mitt 我说的就是这个 install 一堆问题!正好你说了编译问题,如果 install 一下能解决问题,谁愿意去编译,现实中就是有很多情况需要编译。再说回来,你发布 php 项目是 install 好一起发布还是线上再 install ?大家的习惯一样吗?如果线上机器因为安全或管理原因不能连外网,这时如果要 install 如何方便的处理?
    Seanfuck
        12
    Seanfuck  
       2020-10-28 14:00:42 +08:00 via iPhone
    @agdhole 如果是包管理确实必备,但 php 的( Js 也一样)这个包方式有些别扭,如果是类似编译成二进制的方式那就没问题。
    JaguarJack
        13
    JaguarJack  
       2020-10-28 14:13:22 +08:00
    @Seanfuck composer 问题还多?从没遇到过
    Mitt
        14
    Mitt  
       2020-10-28 14:43:16 +08:00
    @Seanfuck #11 线上 install,如果你不能连外网那肯定另当别论,但凡不是网络问题都不应该把包一起打包上去,而且现在都是 docker 镜像了就更没这个问题了,而且如果 install 都有问题,那你系统环境就已经是有问题的了,这就不能怪包管理器了,应该先解决环境问题不然就算你自己编译也照样会有一大堆问题
    ben1024
        15
    ben1024  
       2020-10-28 15:10:15 +08:00
    @Seanfuck 源码的包相对方便改造和断点
    hsk9044
        16
    hsk9044  
       2020-10-28 15:53:13 +08:00
    @Seanfuck 时代是会变的, 观念是要更新的. 手工安装局限性太大了, 新技术的产生是为了提高效率的, 大家少在这种事情上花时间, 不就有更多的时间可以摸鱼了, 何乐不为
    topthink
        17
    topthink  
       2020-10-28 16:45:48 +08:00   ❤️ 1
    ThinkPHP 全版本都已经兼容 Composer2 了的哦
    Seanfuck
        18
    Seanfuck  
       2020-10-28 17:13:47 +08:00 via iPhone
    @hsk9044 是这样,这里讨论存在的问题,整体效率怎样。
    @ben1024 没错,这是正常情况,“包”改造后经常有人没处理好,后面就被覆盖了。
    @Mitt 运维可以把问题推给你,你的代码为什么还要他来装(这点 JS 做得好些,可以 build 最终结果,PHP 看起来是让运维去做 build ),这就是一堆问题之一。如果你全包进 docker 那是没问题。
    Mitt
        19
    Mitt  
       2020-10-28 17:32:17 +08:00
    @Seanfuck #18 我觉得这不是运维的问题,这是你的问题。。。事实上编译环境是开发提供的,运维只是执行编译命令而已,放到以前 PHP 等这些环境也是要运维去装的,composer 就是为了减少问题才存在的,现在 docker 更是全套自己包了,运维干的事情已经很少了,要改变下思维了
    Seanfuck
        20
    Seanfuck  
       2020-10-28 21:00:30 +08:00 via iPhone
    @Mitt 如果执行“开发给的”命令可靠怎么会存在题主的问题?运维安装环境是装运行环境,不是装代码,如果运维也出现题主的问题,那是不是多了麻烦事?再比如你的代码是给客户用的,客户连运维也没有,是不是每次都得找你?再比如客户的服务器是虚拟空间没有命令权限,装不了那只能怪客户了? PHP 用 docker 的比例不高,如果 80%的网站用 php,里面用 docker 的占多少?与时俱进是没错,但要正视存在的问题,抛开传统方式的 PHP 站点,那些改变思维的市场率不知还剩多少?
    Mitt
        21
    Mitt  
       2020-10-28 21:21:13 +08:00
    @Seanfuck #20 所以说这是你的问题,不是技术的问题
    emeab
        22
    emeab  
       2020-10-28 21:36:40 +08:00
    @Seanfuck php 不是编译型语言 为什么包要编译成二进制. 你用包都不看源码和实现的吗
    emeab
        23
    emeab  
       2020-10-28 21:41:43 +08:00
    @Seanfuck tp6.0 引用了 7 个包。 如果不用 composer 还要处理版本问题。
    Seanfuck
        24
    Seanfuck  
       2020-10-28 22:05:57 +08:00 via iPhone
    @emeab 那用低版本好了
    Seanfuck
        25
    Seanfuck  
       2020-10-28 22:07:05 +08:00 via iPhone
    @emeab 不是这个意思……
    Seanfuck
        26
    Seanfuck  
       2020-10-28 22:08:14 +08:00 via iPhone
    @Mitt 那行,我就不再回复你了。
    dvaknheo
        27
    dvaknheo  
       2020-10-29 10:21:07 +08:00
    @Mitt 线上 install 是错误的用法。发布的时候直接复制做好的包就够了。
    composer 的离线功能做得不够好。 没有完全离线的命令.
    甚至有人都不知道可以使用本地第三方作为包。
    dvaknheo
        28
    dvaknheo  
       2020-10-29 10:27:25 +08:00
    php5 时代的框架,没有一个不被魔改的
    composer 结束了系统库被魔改这一种烂现象。
    dvaknheo
        29
    dvaknheo  
       2020-10-29 10:30:20 +08:00
    @emeab 才 7 个包的框架能实现什么功能,laravel 用 101 第三方个包,带动了产业大发展 (手动狗头)
    RickyC
        30
    RickyC  
       2020-10-29 13:00:40 +08:00
    https://blog.class4ever.com/2712.html

    这是一个修改 composer 对应 php 版本的方法, 在宝塔面板环境实操过

    可以参考
    edk24
        31
    edk24  
    OP
       2020-10-29 14:41:14 +08:00   ❤️ 1
    感谢大家的回复,现在问题是总结出来了,无法下载是因为我用了最新的 composer2,tp 的包还没有兼容这个新版本改动; 切换回旧版本就可以了。

    关于用 composer 的问题, 我个人是觉得很好用, 很方便, 要用什么东西直接用, 不需要这里引入一个文件哪里映入问题, 服务器上下载包用镜像就可以了。 这次是出问题在 composer 新版特性上;

    优点是专注敲业务, 不需要管很多东西的实现,只需要引用就可以了,并且 git 是自动忽略依赖文件的,所以 git 仓库里只有业务代码, 没有多余的乱七八糟的文件。

    这个是我个人的想法,
    @Seanfuck
    @skymei
    @agdhole
    @Mitt
    @hbolive
    @JaguarJack
    @ben1024
    @hsk9044
    @emeab
    @dvaknheo
    @RickyC
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   989 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:58 · PVG 05:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.