すべてのプロダクト
Search
ドキュメントセンター

Function Compute:ハンドラ

最終更新日:Apr 21, 2026

PHP ハンドラを使用して、イベントに応答し、ビジネスロジックを実行できます。このトピックでは、PHP ハンドラの概念、構造、および例について説明します。

ハンドラの概要

FC 関数のハンドラは、お客様の機能コード内でリクエストを処理するメソッドです。お客様の FC 関数が呼び出されると、Function Compute は指定したハンドラを実行します。お客様は、Function Compute コンソールハンドラー パラメーターを設定して、ハンドラを構成できます。

FC の PHP 関数の場合、ハンドラは filename.methodname 形式である必要があります。たとえば、ファイル名が main.php で、メソッド名が handler の場合、ハンドラは main.handler になります。

FC 関数の定義の詳細については、「イベントトリガー関数の作成」をご参照ください。

ハンドラの構成は、Function Compute の構成仕様に準拠する必要があります。構成仕様はハンドラタイプによって異なります。

ハンドラシグネチャ

次のコードは、単純なハンドラシグネチャを定義しています。

<?php

function handler($event, $context) {
  return 'hello world';
}

パラメーターの説明は次のとおりです:

  • handler: メソッド名です。 これは、Function Compute コンソールで設定するハンドラーに対応します。 たとえば、FC 関数のハンドラーindex.handlerに設定されている場合、Function Computeindex.phpで定義されているhandler関数をロードし、handler関数から実行を開始します。

  • $event:関数を呼び出すときに渡すパラメーターです。データ型は文字列です。PHP 関数は、前処理なしで指定された event パラメーターを直接使用します。必要に応じて、関数内で event を解析できます。たとえば、入力データが JSON 文字列の場合、それを配列に変換できます。

  • $context:リクエスト ID や一時的な認証情報など、関数のランタイム情報が含まれています。この情報をコードで使用できます。

説明

HTTP トリガーまたはカスタムドメイン名を使用して関数にアクセスする場合は、HTTP 応答を定義する前にリクエスト構造体を取得してください。詳細については、「HTTP トリガーを使用した関数の呼び出し」をご参照ください。

例 1:JSON 形式のパラメーターの解析

サンプルコード

Function Compute は、JSON 形式のパラメーターを生の文字列として渡すため、コード内で解析する必要があります。次のサンプルコードは、JSON 形式のイベントを解析する方法を示しています。

<?php

function handler($event, $context) {
  $v = json_decode($event, true);
  var_dump($v['key1']);
  var_dump($v['key2']);
  var_dump($v['key3']);
  return $v;
}

前提条件

PHP ランタイムを使用する関数を作成済みであること。詳細については、「イベントトリガー関数の作成」をご参照ください。

操作手順

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。

  2. トップナビゲーションバーでリージョンを選択し、[関数] ページで対象の関数をクリックします。

  3. 関数詳細ページで、コード タブをクリックし、コードエディタにサンプルコードを入力して、デプロイメントコード をクリックします。

    説明

    サンプルコードでは、ハンドラは index.phphandler メソッドです。ご利用の関数のハンドラが異なる構成になっている場合は、ファイル名とメソッド名を構成に合わせて更新してください。

  4. コード タブで、関数のテスト の右側にある down アイコンをクリックし、ドロップダウンリストから テストパラメーターの設定 を選択し、次のサンプルテストパラメーターを入力して、OK をクリックします。

    {
      "key1": "value1",
      "key2": "value2",
      "key3": {
        "v1": true,
        "v2": "bye",
        "v3": 1234
      }
    }
  5. 関数のテスト をクリックします。

    関数が実行されると、JSON 形式のコンテンツが返され、key1key2、および key3 の値がログに出力されます。

例 2:OSS リソースへの安全なアクセス

サンプルコード

Function Compute からの一時的な認証情報を使用して、Object Storage Service (OSS) にアクセスできます。次のコードに例を示します。

<?php

use OSS\OssClient;
use OSS\Core\OssException;

function handler($event, $context) {
    /*
      Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する完全な権限を付与します。API 呼び出しや日常のメンテナンスには、RAM ユーザーを使用することを推奨します。
      AccessKey の漏洩リスクを軽減するため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないことを推奨します。
      この例では、コンテキストから認証情報を取得する方法を示しています。
    */
    $creds = $context["credentials"];
    $accessKeyId = $creds["accessKeyId"];
    $accessKeySecret = $creds["accessKeySecret"];
    $securityToken = $creds["securityToken"];
    $endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
    $bucket= "randombucket";
    $object = "exampledir/index.php";
    $filePath = "/code/index.php";

    try{
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
        $ossClient->uploadFile($bucket, $object, $filePath);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return $e->getMessage();
    }
    return 'hello world';
}

サンプルコードの説明は次のとおりです:

  • $creds = $context["credentials"]$context パラメーターから一時的な認証情報を取得します。この方法により、認証情報などの機密情報をコードにハードコーディングすることを回避できます。

  • 上記のコードは、/code/index.php ファイルを OSS の randombucket バケット内の exampledir ディレクトリにアップロードします。

    説明

    endpointbucketobject、および filePath を実際のりソース値に置き換えてください。

前提条件

操作手順

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。

  2. トップナビゲーションバーで、リージョンを選択します。[関数] ページで、目的の関数をクリックします。

  3. 「関数詳細」ページで、コード タブをクリックし、コードエディタにサンプルコードを入力して、デプロイメントコード をクリックします。

    説明

    サンプルコードでは、ハンドラは index.phphandler メソッドです。ご利用の関数のハンドラが異なる構成になっている場合は、ファイル名とメソッド名を構成に合わせて更新してください。

  4. 関数のテスト をクリックします。

    関数が実行されると、hello world が返されます。

例 3:外部コマンドの呼び出し

PHP プログラムは、プロセスを fork して外部コマンドを呼び出すこともできます。

PHP 関数で、シェルスクリプトや C++ または Go でコンパイルされた実行可能ファイルなど、他の言語で記述されたツールを使用する必要がある場合は、そのツールを関数コードと一緒にパッケージ化してアップロードできます。その後、関数から外部コマンドを実行してこれらのツールを呼び出すことができます。外部コマンドを呼び出す一般的な方法には、execsystemshell_exec などがあります。

次のサンプルコードは、Linux コマンド ls -halt を実行して、/code ディレクトリの詳細な内容を一覧表示します。

<?php

function handler($event, $context) {
  return shell_exec("ls -halt /code");
}        

例 4:HTTP トリガーを使用した関数の呼び出し

サンプルコード

<?php

function handler($event, $context) {
  $logger = $GLOBALS['fcLogger'];
  $logger->info('hello world');
  $logger->info('receive event: ' . $event);
  
  try {
    $evt = json_decode($event, true);
    if (is_null($evt['body'])) {
      return "The request did not come from an HTTP Trigger, event: " . $event;
    }
    $body = $evt['body'];
    if ($evt['isBase64Encoded']) {
      $body = base64_decode($evt['body']);
    }
    return array(
      "statusCode" => 200,
      'headers' => array("Content-Type" => "text/plain"),
      'isBase64Encoded' => false,
      "body" => $body
    );
  } catch (Exception $e) {
      $logger->error("Caught exception: " . $e->getMessage());
      return "The request did not come from an HTTP Trigger, event: " . $event;
  }
}

前提条件

PHP ランタイムと HTTP トリガーを使用する関数を作成済みであること。詳細については、「イベントトリガー関数の作成」および「HTTP トリガーの設定」をご参照ください。

操作手順

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。

  2. トップナビゲーションバーでリージョンを選択します。[関数] ページで対象の関数をクリックします。

  3. 関数詳細ページで、トリガー タブをクリックして、HTTP トリガーのパブリックエンドポイントを確認します。

  4. 次の cURL コマンドを実行して関数を呼び出します。

    curl -i "https://http-trigger-demo.cn-shanghai.fcapp.run" -d 'Hello FC!'
    重要
    • HTTP トリガーの 認証方法認証不要 に設定されている場合、Postman または cURL を使用して直接関数を呼び出すことができます。詳細については、「手順」をご参照ください。

    • HTTP トリガーの認証方法署名認証[JWT Authentication]、または[Bearer Authentication]の場合、関数を呼び出すには、対応する認証方式を使用する必要があります。 詳細については、「認証と権限付与」をご参照ください。

エラー分析

このサンプルコードは、HTTP トリガーまたはカスタムドメイン名を使用した呼び出しをサポートしています。HTTP トリガーのリクエスト形式と一致しないイベントを使用してコンソールから関数をテストすると、エラーが発生します。

たとえば、コンソールで関数を呼び出し、リクエストパラメーターを "Hello, FC!" に設定し、関数のテストをクリックすると、関数は以下の応答を返します:

The request did not come from an HTTP Trigger, event: Hello FC!