Tutorial 1: PHP Function w/ Input (3 minutes)
This example will show you how to test and deploy PHP code to Oracle Functions. It will also demonstrate passing data in through stdin.
First, run the following commands:
# Initialize your function creating a func.yaml file
fn init <DOCKERHUB_USERNAME>/hello
# Test your function.
# This will run inside a container exactly how it will on the server. It will also install and vendor dependencies from Gemfile
fn run
# Now try with an input
cat hello.payload.json | fn run
# Deploy your functions to the Oracle Functions server (default localhost:8080)
# This will create a route to your function as well
fn deploy myapp
Now call your function:
curl http://localhost:8080/r/myapp/hello
Or call from a browser: http://localhost:8080/r/myapp/hello
And now with the JSON input:
curl -H "Content-Type: application/json" -X POST -d @hello.payload.json http://localhost:8080/r/myapp/hello
That's it! Our fn deploy packaged our function and sent it to the Oracle Functions server. Try editing func.php
and then doing another fn deploy.
Note on Dependencies
In PHP, you can create a composer file in your function directory, then run:
fn build
This will rebuild your gems and vendor them. PHP doesn't pick them up automatically, so you'll have to add this to the top of your func.php file:
require 'vendor/autoload.php';
Open func.php to see it in action.
3. Queue jobs for your function
Now you can start jobs on your function. Let's quickly queue up a job to try it out.
cat hello.payload.json | fn call phpapp /hello
In Review
-
We piped JSON data into the function at the command line
cat hello.payload.json | fn run -
We received our function input through stdin
$payload = json_decode(file_get_contents("php://stdin"), true); -
We wrote our output to stdout
echo "Hello World!\n"; -
We sent stderr to the server logs
fwrite(STDERR, "--> this will go to stderr (server logs)\n"); -
We added PHP dependencies and enabled them using:
require 'vendor/autoload.php';