[Yandex Cloud documentation](../../../index.md) > [Yandex Cloud Functions](../../index.md) > [Getting started](../index.md) > [Creating a function](index.md) > PHP

# Creating a function in PHP

Create and run a user welcome [function](../../concepts/function.md) in PHP.

## Getting started {#before-begin}

[Create a folder](../../../resource-manager/operations/folder/create.md) in Yandex Cloud.

## Create a function {#create-func}

{% list tabs group=instructions %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), select the folder where you want to create a function.
    1. Navigate to **Cloud Functions**.
    1. Click **Create function**.
    1. Enter the function name: `php-function`.
    1. Click **Create**.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    To create a function, run this command:

    ```bash
    yc serverless function create --name=php-function
    ```

    Result:

    ```text
    id: b09bhaokchn9********
    folder_id: aoek49ghmknn********
    created_at: "2019-06-14T10:03:37.475Z"
    name: php-function
    log_group_id: eolm8aoq9vcp********
    http_invoke_url: https://functions.yandexcloud.net/b09bhaokchn9********
    status: ACTIVE
    ```

- API {#api}

    You can create a function using the [create](../../functions/api-ref/Function/create.md) API method.


{% endlist %}

## Create the first version of your function {#create-first-version}

To create a function [version](../../concepts/function.md#version), you can use one of the [code upload formats](../../concepts/function.md#upload). This example uses a ZIP archive.

{% note warning %}

Use Object Storage to [upload](../../../storage/operations/objects/upload.md) files larger than 3.5 MB. For more information about limits, see [Quotas and limits in Cloud Functions](../../concepts/limits.md).

{% endnote %}

### Create a ZIP archive with the function code {#create-zip}

1. Save the following code to a file named `hello.php`:
    ```php
    <?php

    function handler () {
        $resp =  'Hello, World!';
        return [
            'statusCode' => 200,
            'body' => json_encode($resp),
        ];
    }

    ?>
    ```

1. Add `hello.php` to the `hello-php.zip` archive.

### Create a function version {#create-version}

{% list tabs group=instructions %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), navigate to the folder containing the function.
    1. Navigate to **Cloud Functions**.
    1. Select the `php-function` function.
    1. Under **Last version**, click **Сreate in editor**.
    1. Select the `PHP 8.2` runtime.
    1. Disable **Add files with code examples** and click **Continue**.
    1. Configure the version:
        * **Code source**: `ZIP archive`
        * **File**: Attach `hello-php.zip`.
        * **Entry point**: `hello.handler`.
        * **Timeout**: `3`.
        * **Memory**: `128 MB`.
        * **Service account**: `Not selected`.
    1. Click **Save changes**.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    To create a function version, run this command:

    ```bash
    yc serverless function version create \
      --function-name=php-function \
      --runtime php82 \
      --entrypoint hello.handler \
      --memory 128m \
      --execution-timeout 3s \
      --source-path ./hello-php.zip
    ```

    Where:

    * `--function-name`: Name of the function whose version you want to create.
    * `--runtime`: Runtime.
    * `--entrypoint`: Entry point in `<function_file_name>.<handler_name>` format.
    * `--memory`: Amount of RAM.
    * `--execution-timeout`: Maximum function execution time before timeout.
    * `--source-path`: ZIP archive with the function code and required dependencies.

    Result:

    ```text
    done (1s)
    id: d4evvn8obisa********
    function_id: d4elpv8pft63********
    created_at: "2020-08-01T19:09:19.531Z"
    runtime: php82
    entrypoint: hello.handler
    resources:
        memory: "134217728"
    execution_timeout: 3s
    image_size: "4096"
    status: ACTIVE
    tags:
    - $latest
    log_group_id: ckg3qh8h363p********
    ```

- API {#api}

    You can create a function version using the [createVersion](../../functions/api-ref/Function/createVersion.md) API method.


{% endlist %}

## Invoke the function {#invoke}

{% note info %}

To allow any user to invoke your function, [make it public](../../operations/function/function-public.md). For more information about access permissions, see [Access management in Cloud Functions](../../security/index.md).

{% endnote %}

{% list tabs group=instructions %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), navigate to the folder containing the function.
    1. Navigate to **Cloud Functions**.
    1. Select the function.
    1. Navigate to the ![CirclePlay](../../../_assets/console-icons/circle-play.svg) **Testing** tab.
    1. In the **Version tag** field, specify `$latest` to invoke the latest function version.
    1. In the **Payload template** field, select `No template`.
    1. Click ![PlayFill](../../../_assets/console-icons/play-fill.svg) **Run test**.
    1. You will see the test status under **Test result** in the **Function status** field. **Note** that the maximum function execution time before [timeout](../../operations/function/version-manage.md), including first call initialization, is ten minutes.
    1. You will see the function execution result in the **Function output** field.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    To invoke a function, run this command:

    ```
    yc serverless function invoke <function_ID>
    ```

    The function version with the `$latest` tag is invoked by default.


- HTTPS {#https}

	You can find the function invocation link on the **Overview** tab, in the **Link to invoke** field.

	For security reasons, you can only call a function via HTTPS. Call it as a regular HTTPS request by pasting the function invocation link into your browser’s address bar:

	```
	https://functions.yandexcloud.net/<function_ID>
	```

	The following response will appear on the page:

	```
	Hello, World!
	```


{% endlist %}

## What's next {#what-is-next}

- To learn more about the function structure required for different invocation methods (HTTP and CLI), see [Invoking a function in Cloud Functions](../../concepts/function-invoke.md).
- Read about [service concepts](../../concepts/index.md).
- Check out our [step-by-step guides](../../operations/index.md) to learn what you can do with functions and their versions.