使用 Composer 安装库时出现分段错误错误

问题描述 投票:0回答:1

在过去的几天里,我一直在尝试编译 PHP 以在 Amazon Lambda 中使用它,但至少可以说,我的经验很差。

我正在学习一个教程,它运行得很好,直到我需要安装三个 Composer 库。

这就是发生的事情。

我使用 Amazon Linux 2023 AMI 在 Amazon EC2 上启动了 t2.medium 实例(2 个 vCPU 和 4 GB)。

连接到实例后,我运行了以下命令:

sudo yum update -y
sudo yum install autoconf bison gcc gcc-c++ libcurl-devel libxml2-devel -y

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
sudo yum group install 'Development Tools' -y
sudo yum install perl-core zlib-devel -y

cd /usr/local/src/
sudo wget https://www.openssl.org/source/openssl-1.0.2u.tar.gz
sudo tar -xf openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
cd /usr/local/src/openssl-1.0.2u
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
sudo make
sudo make install

cd ~
mkdir ~/php-8.2.6-source
curl -sL https://www.php.net/distributions/php-8.2.6.tar.gz | tar -xvz
cd ~/php-8.2.6/
./buildconf --force
sudo yum install oniguruma-devel -y
sudo yum install sqlite-devel -y
PKG_CONFIG_PATH="/usr/local/ssl/lib/pkgconfig/" ./configure --prefix=/home/ec2-user/php-8.2.6-source --with-openssl=/usr/local/ssl --with-curl --with-mysqli --enable-mbstring --enable-soap
sudo make install

mkdir -p ~/lambda-root/{bin,src,lib}/
cd ~/lambda-root
touch ./bootstrap
chmod +x ./bootstrap
cp ~/php-8.2.6-source/bin/php ./bin
curl -sS https://getcomposer.org/installer | ./bin/php
./bin/php composer.phar require guzzlehttp/guzzle
./bin/php composer.phar require aws/aws-sdk-php
./bin/php composer.phar require phpzip/phpzip

我的问题出在最后三个命令中。每当我运行三个 `./bin/phpcomposer.phar require [ 中的任何一个。 。 。 ]``该命令显示错误。

这是我运行命令时的输出

./bin/php composer.phar require guzzlehttp/guzzle -vvv

Running 2.6.6 (2023-12-08 18:32:26) with PHP 8.2.6 on Linux / 6.1.66-91.160.amzn2023.x86_64
Reading ./composer.json (/home/ec2-user/lambda-root/composer.json)
Loading config file ./composer.json (/home/ec2-user/lambda-root/composer.json)
Checked CA file /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem: valid
Executing command (/home/ec2-user/lambda-root): 'git' 'branch' '-a' '--no-color' '--no-abbrev' '-v'
Executing command (/home/ec2-user/lambda-root): git describe --exact-match --tags
Executing command (CWD): git --version
Executing command (/home/ec2-user/lambda-root): git log --pretty="%H" -n1 HEAD --no-show-signature
Executing command (/home/ec2-user/lambda-root): hg branch
Executing command (/home/ec2-user/lambda-root): fossil branch list
Executing command (/home/ec2-user/lambda-root): fossil tag list
Executing command (/home/ec2-user/lambda-root): svn info --xml
Reading /home/ec2-user/.config/composer/composer.json
Loading config file /home/ec2-user/.config/composer/composer.json (/home/ec2-user/.config/composer/composer.json)
Downloading https://repo.packagist.org/packages.json
Segmentation fault (core dumped)

之前,输出还在下载软件包之前显示消息

Failed to initialize global composer: Composer could not find the config file: /home/ec2-user/.config/composer/composer.json
,因此我创建了文件
/home/ec2-user/.config/composer/composer.json

这是文件的内容:

{
   "require": {}
}

有人知道为什么会发生此错误以及如何修复它吗?显然,在视频中它可以正常工作,没有任何问题。 “它可以在我的机器上运行”的经典案例。

我尝试使用 memory_limit 参数,将命令更改为:

./bin/php -d memory_limit=-1 composer.phar require guzzlehttp/guzzle

但是结果是完全一样的。

我还尝试了 COMPOSER_MEMORY_LIMIT 参数:

./bin/php composer.phar COMPOSER_MEMORY_LIMIT=-1 require guzzlehttp/guzzle

这次出现一条消息说

Command "COMPOSER_MEMORY_LIMIT=-1" is not defined.

php aws-lambda composer-php
1个回答
0
投票

首先,您应该提供您正在关注的教程的 URL - 我们不知道它给了您什么建议。

其次,v 8.2.6 相当旧 - 尽管我很欣赏坚持使用教程中显示的版本应该可以避免意外的惊喜。

第三,作为一名程序员,您应该对程序在您使用的操作系统中如何执行有一个基本的了解,并具有一些诊断问题的知识。对于 SEGFAULT 的 PHP 运行时,问题不在于您正在运行的代码(编写器),而在于运行时加载的 PHP 二进制文件或 .so 文件。诊断故障相当简单 - 并且所需的所有工具都很容易获得,但由于您不知道如何执行此操作,因此您不太可能识别实际的根本原因,更不用说修复它了。

该故障似乎是在命令通过互联网检索内容时发生的。因此,更有用的时间利用方式可能是编写一些简单的 PHP 来下载文件并尝试看看是否可以重现错误 - 然后您可以进一步尝试 DNS 查询、TCP 握手、http 请求,然后是 https 连接。

您的 AWS 实例实际上是否能够连接到互联网可能取决于一些复杂的配置 - 您还应该使用 dig、nc、curl 等从命令行在 PHP 之外测试这些组件步骤。

© www.soinside.com 2019 - 2024. All rights reserved.