php - 如何在 aws lambda 中将 imagick 与 php 一起使用?

标签 php node.js amazon-web-services amazon-ec2 aws-lambda

目前 Amazon lambda 仅支持 node.js 和 python。 我找到了一个在lambda中运行php的官方文档。链接是https://aws.amazon.com/blogs/compute/scripting-languages-for-aws-lambda-running-php-ruby-and-go/

我已经成功在 lambda 中运行 php。但问题是我不知道如何将 imagick 与 php 一起使用。 我已经使用以下命令在我的 EC2 上安装了 imagick

sudo yum install pecl make ImageMagick ImageMagick-devel php-devel gcc re2c
sudo pecl install imagick

运行以下命令会返回我的 imagemagick 版本

convert --version

输出

Version: ImageMagick 6.7.8-9 2016-06-22 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP 

我正在使用 Node.js 中的 php 二进制文件运行我的 php

process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];

const spawn = require('child_process').spawn;

exports.handler = function(event, context,callback) {

    //var php = spawn('php',['helloLambda.php']); //local debug only
    var php = spawn('php-7-bin/bin/php',['imagick.php']);
    var output = "";

    //send the input event json as string via STDIN to php process
    php.stdin.write(JSON.stringify(event));

    //close the php stream to unblock php process
    php.stdin.end();

    //dynamically collect php output
    php.stdout.on('data', function(data) {
          output+=data;
    });

    //react to potential errors
    php.stderr.on('data', function(data) {
            console.log("STDERR: "+data);
    });

    //finalize when php process is done.
    php.on('close', function(code) {
            //context.succeed(JSON.parse(output));
            callback(null,output);
    });
}

以上 PHP 已成功运行,现在我尝试通过替换 var php = spawn('php-7-bin/bin/php',['imagick.php']); 来将 imagick 与 php 一起使用。

imagick.php

$image = new Imagick('image.jpg');
$image->thumbnailImage(100, 0);
// Just trying to use imagick function

php.js

process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];

const spawn = require('child_process').spawn;

exports.handler = function(event, context,callback) {

    //var php = spawn('php',['helloLambda.php']); //local debug only
    var php = spawn('php-7-bin/bin/php',['imagick.php']);
    var output = "";

    //send the input event json as string via STDIN to php process
    php.stdin.write(JSON.stringify(event));

    //close the php stream to unblock php process
    php.stdin.end();

    //dynamically collect php output
    php.stdout.on('data', function(data) {
          output+=data;
    });

    //react to potential errors
    php.stderr.on('data', function(data) {
            console.log("STDERR: "+data);
    });

    //finalize when php process is done.
    php.on('close', function(code) {
            //context.succeed(JSON.parse(output));
            callback(null,output);
    });
}

但它抛出以下错误

"\nFatal error: Uncaught Error: Class 'Imagick' not found in /var/task/imagick.php:5\nStack trace:\n#0 {main}\n  thrown in /var/task/imagick.php on line 5\n"

最佳答案

正如上面评论中所述,Imageick 与 ImageMagick 不同(我认为,ImageMagick 更像是一个访问它的包装器)。亚马逊有一个blog我相信您可能已经关注了。

I am running my php with php binaries in node.js

这意味着您已经完成大部分工作了。从上面的博客文章来看,在使用 ./configure --prefix=/home/ec2-user/php-7-bin/ 编译 php 之前,您需要为您的 php 编译 Imagick,所以它与它捆绑在一起。但是您需要静态编译它,以便将其包含在最终代码中。我相信您可能还想静态编译 ImageMagick,这样您就不必依赖已安装的 ImageMagick,因为它始终会安装。

我不再有上述两者的说明,我们使用 Magick.NET 采用了不同的路线,并用 C# 编写了我们的图像处理工具。 php 中使用 Imagick 和 Magick.NET 的方法很容易转换,但这也取决于您的环境的其余部分。

关于php - 如何在 aws lambda 中将 imagick 与 php 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43693893/

相关文章:

php - 请求帮助了解为什么我的表单无法正确验证

php - 文本输入更改值和即时检查

php - MySQL/PHP : group by classes

node.js - Node - 如何在 --watch 期间运行并行命令?

node.js - 优雅关闭 Node expressjs不起作用

hadoop - 我在AWS中仅需要4个映射器和2个reducer,但这不会发生吗?

php - 用于编辑常规数据库表的 Drupal 模块

javascript - 如何使用JS从URL获取查询参数和编码信息

ios - 当亚马逊的 iOS SDK v2 仍处于开发者预览版时,我们可以在实时应用程序中使用它吗?

php - 我找到了一个链接,但我不知道那是什么