簡體   English   中英

如何在AWS Lambda中將imagick與php一起使用?

[英]How to use imagick with php in 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。 但是問題是我不知道如何在php中使用imagick。 我已使用以下命令在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是不同的(我認為它更像是用於訪問它的包裝器)。 亞馬遜有一個博客 ,我相信您可能會關注。

我正在node.js中使用php二進制文件運行我的php

這意味着您已到達目的地。 在以上博客文章中,在使用./configure --prefix=/home/ec2-user/php-7-bin/編譯php之前,需要為您的php編譯Imagick,因此將其捆綁在一起。 但是您需要靜態地對其進行編譯,使其包含在最終代碼中。 我相信您可能還希望靜態地編譯ImageMagick,因此您不必依賴將始終安裝的ImageMagick。

我再也沒有上述兩個說明,我們使用Magick.NET走了一條不同的路線,改為使用C#編寫了圖像處理工具。 與Imagick和Magick.NET一起在php中使用的方法很容易轉換,但這還取決於您的環境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM