# PHP PhantomJS
Author: Jonny W

# Usage

This page contains some common examples of how to use the PHP PhantomJS library.

- Basic Request
- POST Request
- Other Request Methods
- Response Data
- Screen Captures
- Custom Timeout
- Delay Page Render
- Custom Run Options

For more advanced customization or to load your own PhantomJS scripts, see the advanced documentation.

## Basic Request

A basic GET request:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createRequest();
        $response = $client->getMessageFactory()->createResponse();

        $request->setMethod('GET');
        $request->setUrl('http://google.com');

        $client->send($request, $response);

        if($response->getStatus() === 200) {
            echo $response->getContent();
        }

You can also set the URL, request method and timeout period when creating a new request instance through the message factory:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createRequest('http://google.com', 'GET', 5000);
        $response = $client->getMessageFactory()->createResponse();

        $client->send($request, $response);

        if($response->getStatus() === 200) {
            echo $response->getContent();
        }

## POST Request

A basic POST request:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createRequest();
        $response = $client->getMessageFactory()->createResponse();

        $data = array(
            'param1' => 'Param 1',
            'param2' => 'Param 2'
        );

        $request->setMethod('POST');
        $request->setUrl('http://google.com');
        $request->setRequestData($data); // Set post data

        $client->send($request, $response);

## Other Request Methods

The PHP PhantomJS library supports the following request methods:

- OPTIONS
- GET
- HEAD
- POST
- PUT
- DELETE
- PATCH

The request method can be set when creating a new request instance through the message factory:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createRequest('http://google.com', 'PUT');

Or on the request instance itself:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createRequest();
        $request->setMethod('PATCH');

## Response Data

A standard response gives you access to the following interface:

Accessor | Description | Return Type
--- | --- | ---
getHeaders() | Returns an array of all response headers. | Array
getHeader(header) | Returns the value for a specific response header e.g. Content-Type. | Mixed
getStatus() | The response status code e.g. 200. | Int
getContent() | The raw page content of the requested page. | String
getContentType() | The content type of the requested page. | String
getUrl() | The URL of the requested page. | String
getRedirectUrl() | If the response was a redirect, this will return the redirect URL. | String
isRedirect() | Will return true if the response was a redirect or false otherwise. | Boolean
getConsole() | Returns an array of any javascript errors on the requested page along with a stack trace. | Array

If the response contains a status code of 0, chances are the request failed. Check the request debug log for more detailed information about what may have gone wrong.

## Screen Captures

You can save screen captures of a page to your local disk by creating a screen capture request and setting the path you wish to save the file to:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createCaptureRequest('http://google.com');
        $response = $client->getMessageFactory()->createResponse();

        $file = '/path/to/save/your/screen/capture/file.jpg';

        $request->setCaptureFile($file);

        $client->send($request, $response);

You will need to make sure the directory that you are saving the file to exists and is writable by your application.

You can also set the width, height, x and y axis for your screen capture:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createCaptureRequest('http://google.com');
        $response = $client->getMessageFactory()->createResponse();

        $file = '/path/to/save/your/screen/capture/file.jpg';

        $top    = 10;
        $left   = 10;
        $width  = 200;
        $height = 400;

        $request->setCaptureFile($file);
        $request->setCaptureDimensions($width, $height, $top, $left);

        $client->send($request, $response);

## Custom Timeout

By default, each request will timeout after 5 seconds. You can set a custom timeout period (in milliseconds) for each request:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createRequest('http://google.com');
        $response = $client->getMessageFactory()->createResponse();

        $timeout = 10000; // 10 seconds

        $request->setTimeout($timeout);

        $client->send($request, $response);

## Delay Page Render

Sometimes when taking screen captures you may want to wait until the page is completely loaded before saving the capture. In this instance you can set a page render delay (in seconds) for the request:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();

        $request  = $client->getMessageFactory()->createCaptureRequest('http://google.com');
        $response = $client->getMessageFactory()->createResponse();

        $delay = 5; // 5 seconds

        $request->setDelay($delay);

        $client->send($request, $response);

You can set a page render delay for standard requests also.

## Custom Run Options

The PhantomJS API contains a range of command line options that can be passed when executing the PhantomJS executable. These can also be passed in via the client before a request:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();
        $client->addOption('--load-images=true');
        $client->addOption('--ignore-ssl-errors=true');

        $request  = $client->getMessageFactory()->createRequest('http://google.com');
        $response = $client->getMessageFactory()->createResponse();

        $client->send($request, $response);

You can also set a path to a JSON configuration file that contains multiple PhantomJS options:

    <?php

        use JonnyW\PhantomJs\Client;

        $client = Client::getInstance();
        $client->addOption('--config=/path/to/config.json');

        $request  = $client->getMessageFactory()->createRequest('http://google.com');
        $response = $client->getMessageFactory()->createResponse();

        $client->send($request, $response);

See the PhantomJS Documentation for a full list of command line options.

- ← Previous
- Next →